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