У меня есть два образа раздела (A и B), и я хочу использовать их для создания патча, который я могу применить к A на другом компьютере, чтобы получить новый образ B, не затопляя сеть. У меня есть следующие требования:
- работает на Linux
- может создавать различия
- можно использовать diffs для исправления файлов
- может обрабатывать двоичные файлы
- может обрабатывать большие файлы (несколько сотен ГБ должно работать)
- взаимодействие с пользователем не требуется (только консольное приложение)
- в идеале, должен иметь возможность чтения / записи в каналы (чтобы я мог передать в него из сжатого gzip файла и записать в один)
Существует ли что-то подобное?
rdiff
который легко воспроизвести, был бы полезен для использования в будущем. Пример: Допустим ,file1
иfile2
два одинаковых файлов 1 Гб каждый. 1) Как вычислить rdiff? 2) Как сохранить этот rdiff вpatch
файл? 3) Как применить этотpatch
файлfile1
для восстановленияfile2
?Ответы:
Вероятно, вам стоит взглянуть на инструменты, связанные с rsync: rdiff и rdiff-backup . Команда
rdiff
позволяет вам создать файл патча и применить его к другому файлу.Команда
rdiff-backup
использует этот подход для работы с целыми каталогами, но я предполагаю, что вы работаете с однофайловыми образами дисков, поэтомуrdiff
будет использовать именно их.источник
rdiff signature oldfile | rdiff delta - newfile deltafile
file1
иfile2
есть два одинаковых файла по 1 ГБ каждый. 1) Как рассчитать разницу? 2) Как сохранить этот diff в файл патча? 3) Как применить этот файл патчаfile1
для восстановленияfile2
?xdelta может делать все, что вы хотите. Справедливое предупреждение, однако, если ваши изображения не очень похожи, вы можете получить очень большой патч, потому что xdelta использует половину определенного буфера памяти для поиска различий. Более подробная информация доступна на вики-странице TuningMemoryBudget . Увеличение размера буфера может немного помочь.
bsdiff - это еще один вариант, но он очень требователен к оперативной памяти и совершенно не подходит ни для какого размера диска.
источник
Канонический ответ
Что касается статьи rdiff , librsync 2.0.1 хорошо подходит для пояснения функциональности команды, поэтому я сослался на это ниже, чтобы сохранить содержимое этого ответа, если ничего больше.
Важно попытаться понять три шага по обновлению файла rdiff : подпись , дельта и патч, о которых говорилось на справочной странице rdiff . Я также нашел
rdiff
полезный скрипт команды на GitHub, на который я буду ссылаться и цитировать.Быстрые команды (за
rdiff-example.sh
)источник
JDIFF - это программа, которая выводит различия между двумя (двоичными) файлами.
источник