2016-08-05 6 views
3

Если я хочу объединить два очень больших файла, находящихся в одной и той же файловой системе, скажем, ext3 или ext4, например, linux предоставляет api, чтобы сделать это программно, считывая и изменяя прямые/косвенные указатели inode этих двух файлов и изменяя значения размера и суперблока? Если да, есть ли какая-либо документация на api/headerfiles для этого?Можно ли объединить два файла в одну файловую систему Linux, изменив конструкцию и суперблок inode?

Примечание: Я знаю о встроенных бинарных файлах linux, таких как cat, tee и т. Д., Которые могут быть использованы, но мой вопрос заключается в программном достижении этого.

+3

Что делать, если размер первого файла не кратен размеру блока файловой системы? – dbush

+0

Это хороший вопрос @dbush. Выполнение математики и переписывание блоков, если возможно вообще, сделало бы это как обычное сцепление, или, хуже того, я предполагаю. Возможно ли это, если размер файла является кратным блокам? – nohup

+0

Я не думаю, что эта операция поддерживается. Это меня действительно удивило бы. – fuz

ответ

3

Да, в зависимости от того, что concatenate означает, и как низкий уровень выполнения кода, и что такое файловая система.

  1. низкий уровень, непрактично, трудно, особенно для ext3 & ext4. Предположим, что мы хотим сделать эквивалент cat foo bar | sponge foo, но ничего, кроме метаданных, которые читаются или перезаписываются. В этом случае foo должен быть точным числом в несколько раз, и трюк должен был бы получить inodes и dir структуру обоих файлов, rm bar, размонтировать файловую систему и настроить соответствующие inode, но, пожалуйста, (скажем dd и некоторый редактор шестнадцатеричных), таким образом, чтобы не разрушать ничего другого. В зависимости от файловой системы, которая может быть сложной, и требует обновления или изменения какой-либо другой затронутой или препятствующей структуры данных.

    Если foo не является точной величиной в блоке, то в середине конкатенированного файла будут данные об мусоре.

  2. Cheat. Используйте файловую систему с in-line deduplication. Btrfs должны иметь эту функцию someday.

 Смежные вопросы

  • Нет связанных вопросов^_^