В системах Unix файлы можно объединить с помощью cat
утилиты (в системах Windows естьtype
илиcopy /B
).
cat file1 file2 file3 > joined-file
Это берет содержимое старых файлов и копирует его в один новый файл. Процесс занимает время, необходимое для чтения старых файлов и записи нового. Новый файл сохраняется отдельно от старых файлов, поэтому команда не будет выполнена, если на диске недостаточно свободного места для записи нового файла.
Есть ли более быстрый способ объединить файлы или хотя бы «обмануть» программы, заставив их думать, что файлы объединены, не перемещая и не копируя данные на диске?
Одним из способов сделать это может быть изменение оглавления файловой системы таким образом, чтобы файлы обрабатывались какфрагментыбольшего файла. Есть ли "безопасный" способ сделать это (т. е. безопаснее, чем dd
вручную изменять TOC)?
Меня интересует любой метод объединения файлов на любой платформе, который будет быстрее и потребует меньше места на диске, чем физическое объединение файлов.
решение1
Я предположил, что это возможно, используя некую оверлейную файловую систему поверх существующей (изменение существующей — путь к катастрофе), а затем решил, что, вероятно, можно написать что-то для Linux, используя FUSE (файловая система в пространстве пользователя).
Ради интереса я погуглил и обнаружил, что кто-то уже реализовал это - есть проект GIT под названием concat-fuse -https://github.com/concat-fuse/concat-fuse/blob/master/README.md- который, похоже, делает то, что вы описываете.