4

Существует ли [виртуальная] файловая система, которая может автоматически разбивать файлы в хранилище, но представлять их пользователю как отдельные файлы?

Например:

The user sees: /user/files/10TBfile
But it is stored as: /backingstorage/user/files/10TBfile.{1..100}

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

Если вам интересно, конечной целью может быть что-то похожее на этот вопрос: разделите локальные файлы на разных серверах с ограниченным пространством с помощью rsync, за исключением того, что у меня есть отдельные большие файлы, которые нужно разделить, и файлы должны быть обновлены в режиме реального времени. -время, поэтому о дневном cron/rsync и split tar не может быть и речи. У меня уже смонтированы удаленные диски, поэтому мне просто нужен способ разбить файл и представить его как один файл пользователю.

Спасибо!

4 ответа4

6

То, что вы хотите, это chunkfs:

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

Это было написано с той же целью, что и вы:

Первоначально ChunkFS была написана для создания инкрементных резервных копий зашифрованных образов файловой системы с использованием rsync. Используя опцию --link-dest в rsync, вы можете создавать инкрементные резервные копии из образа, смонтированного на ChunkFS, где любой чанк, который не изменился со времени последней резервной копии, будет жесткой ссылкой на соответствующий чанк из предыдущей резервной копии.

1

Я нашел ответ здесь: https://unix.stackexchange.com/a/67995/6226

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

0

Я не уверен, но я думаю, что вы могли бы использовать чередование (например, метод сегментирования логически последовательных данных, таких как файл) с LVM, например.

Вот некоторая информация об этом от RedHat:

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

Дополнительная информация здесь

0

Обычно вы делаете это на уровне блоков. Некоторые решения для этого включают в себя:

  • Рейд 0
  • DRBD (больше для зеркалирования, сеть в порядке)
  • ZFS (более высокий уровень абстракции)

С точки зрения файловой системы:

  • Вручную сохраните половину файла в одной файловой системе и половину в другой, а затем представьте это через нечто вроде пользовательской файловой системы FUSE (подумайте о сложном пользовательском коде).
  • Большинство решений файловых систем ориентированы на синхронизацию, а не на разделение данных.
  • Hadoop (Data Sharding, а не традиционная ФС)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .