Назад | Перейти на главную страницу

Файловая система общего блочного устройства (файловая система кластера без сети)

Есть ли файловая система, которая может быть смонтирована несколько раз и поддерживает одновременный доступ к файлам для Linux? В основном я хочу что-то вроде файловой системы кластера, но без необходимости иметь работающую сеть для распределенного диспетчера блокировок. Это может быть очень удобно в связи с виртуальными машинами, которые могут обмениваться данными с хостом или другой виртуальной машиной без необходимости создавать сетевое соединение. Этого я хочу избежать, чтобы обеспечить безопасность сетевой архитектуры (виртуальная машина в DMZ), но поделиться большими файлами. Нет необходимости увеличивать масштаб, просто две машины, которые устанавливают одно и то же блочное устройство.

Разве нельзя иметь информацию о блокировке файлов прямо на диске?

Чтобы ответить на мой собственный вопрос: в ситуации (пара) виртуализации развиваются некоторые общие файловые системы, которые можно использовать для обмена файлами без сети между экземплярами. Я думаю, что XenFS - это подход, который активно не разрабатывается. Но для KVM и, надеюсь, в ближайшее время для XEN существует механизм совместного использования папок на основе библиотеки virtio под названием 9p_virtio.

Я предполагаю, что вы можете предоставить N виртуальных машин и доступ к одному и тому же блочному устройству, но только для чтения. Вы заметили это слово «угадать».

Все быстро рухнет, если какая-либо из виртуальных машин начнет что-то изменять, поскольку любой диск, кэширующий другие виртуальные машины, теперь будет недействительным.

Сложность наличия информации о блокировке файлов на диске заключается в том, что этого еще никто не делал. Без глубоких размышлений идея атомарной транзакции чтения / изменения / записи на диск, вероятно, является основной проблемой.

Я предполагаю, что вы можете взять типичную файловую систему, которая уже является многопоточной, выяснить, где используются блокировки, и изменить это на какую-то операцию чтения / изменения / записи на диске.

Другая проблема с чтением / изменением / записью на диск заключается в том, что если вы делаете много блокировок, ваша производительность будет очень плохой, поскольку каждое изменение чего-либо на диске требует:

  • заблокировать диск (поиск, чтение / изменение / запись)
  • прочтите сектор, который хотите изменить (искать / читать)
  • внести изменения и написать (написать)
  • разблокировать диск (поиск, чтение / изменение / запись)

Это, вероятно, не поможет, но я бы посмотрел на что-то вроде BSD Jails как на более легкую виртуальную систему, если вы действительно не хотите подключаться к сети.