Есть ли файловая система, которую можно монтировать несколько раз и которая поддерживает одновременный доступ к файлам для Linux? По сути, мне нужно что-то вроде кластерной файловой системы, но без необходимости иметь работающую сеть для распределенного менеджера блокировок. Это может быть очень удобно в сочетании с виртуальными машинами, которые могут делиться данными с хостом или другой виртуальной машиной без необходимости создания сетевого соединения. Я хочу этого избежать, чтобы сохранить сетевую архитектуру безопасной (виртуальная машина в DMZ), но делиться большими файлами. Не нужно масштабировать ее, просто две машины, которые монтируют одно и то же блочное устройство.
Разве нельзя разместить информацию о блокировке файлов прямо на диске?
решение1
Я предполагаю, что вы можете дать N VMs и доступ к одному и тому же блочному устройству, но только для чтения. Вы заметили это слово guess.
Если какая-либо из виртуальных машин начнет что-то изменять, все быстро рухнет, поскольку любое кэширование дисков других виртуальных машин теперь станет недействительным.
Трудность в том, чтобы иметь информацию о блокировке файлов на диске, заключается в том, что никто этого еще не делал. Без глубоких размышлений, идея атомарной транзакции чтения/изменения/записи на диске, вероятно, является базовой проблемой.
Полагаю, можно взять типичную файловую систему, которая уже является многопоточной, выяснить, где используются блокировки, и изменить это на какую-то операцию чтения/изменения/записи на диске.
Другая проблема с чтением/изменением/записью на диске заключается в том, что если вы часто блокируете данные, ваша производительность будет довольно низкой, поскольку каждое изменение чего-либо на диске требует:
- блокировка диска (поиск, чтение/изменение/запись)
- прочитайте сектор, который вы хотите изменить (искать/читать)
- внесите изменения и напишите (напишите)
- разблокировать диск (поиск, чтение/изменение/запись)
Это, возможно, не поможет, но я бы рассмотрел что-то вроде BSD Jails как более легкую систему виртуальных машин, если вы действительно не хотите нагружать сеть.
решение2
Чтобы ответить на мой собственный вопрос: в ситуации (пара)виртуализации развиваются некоторые общие файловые системы, которые могут использоваться для обмена файлами без сети между экземплярами. XenFS — это один из подходов, который, как мне кажется, не находится в активной разработке. Но для KVM, и, надеюсь, для XEN в скором времени, есть механизм общего доступа к папкам, основанный на библиотеке virtio, которая называется9p_virtio.