Восстановление файла из фрагментов без копирования или перемещения данных

0

В системах Unix файлы можно объединять с помощью catутилиты (в системах Windows есть typeилиcopy /B ).

cat file1 file2 file3 > joined-file

Это берет содержимое старых файлов и копирует его в один новый файл. Процесс занимает время, необходимое для чтения старых файлов и записи новых. Новый файл сохраняется отдельно от старых файлов, поэтому команда не будет выполнена, если на диске не осталось свободного места для записи нового файла.

Есть ли более быстрый способ объединить файлы или, по крайней мере, «обмануть» программы, заставив их думать, что файлы объединяются, что не требует перемещения или копирования данных на диск?

Одним из способов сделать это может быть изменение оглавления файловой системы, чтобы файлы обрабатывались как фрагменты файла большего размера. Есть ли «безопасный» способ сделать это (то есть безопаснее, чем использовать ddдля изменения оглавления вручную)?

Меня интересует любой способ объединения файлов на любой платформе, который быстрее и требует меньше места на диске, чем физическая конкатенация файлов.

HullCityFan852
источник
1
См. Stackoverflow.com/a/13411315 для идей.
dsstorefile1
Это ответ . Ограничение состоит в том, что dmsetupинструмент предназначен для работы с блочными устройствами и / или обычными файлами, которые являются изображениями блочных устройств, поэтому он использует общие блоки 512 B. Возможно, можно было бы разветвить проект и изменить источник, чтобы разрешить разрешение 1 B, I не знаю
Камиль Мачоровски
Также этот ответ , это несколько лет назад; по-видимому, произошли некоторые изменения nbd, я не мог заставить это работать так легко. Изучите concatfs и / или concat-fuse (об этом уже есть в ответе Давидго ниже). Я не проверял их, так что это просто комментарий.
Камиль Мачоровский

Ответы:

0

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

На всякий случай я погуглил и обнаружил, что кто-то уже реализовал это - есть проект GIT под названием concat-fuse - https://github.com/concat-fuse/concat-fuse/blob/master/README.md - который выглядит делать то, что вы описываете.

davidgo
источник