Подтвердить что ты не робот

Утилита двоичной разницы и исправления для образа виртуальной машины

Мне нужно выпустить некоторое программное обеспечение довольно часто, и программное обеспечение содержится в файле диска VMWare, т.е. .vmdk. То, что я хочу, это своего рода двоичная утилита diff и patch, чтобы сделать дельта сгенерированным как можно меньше.

4b9b3361

Ответ 1

Позвольте мне начать с проверенных подходов, а затем указать на некоторые более современные подходы.

Подходы

, которые я видел в работе с бинарными файлами

Давным-давно люди расширили старые и новые версии двоичного файла во временных "текстовых" файлах (каждый байт был расширен до 3 байтов: 2 шестнадцатеричных цифры и новая строка). Затем запустите эти два "текстовых" файла через старую версию "diff" (которая определенно не сможет обрабатывать двоичные файлы), чтобы создать файл патча. Затем мы передали этот "текстовый" файл исправления по линиям связи, которые еще не были 8-битными. В конце приема один расширил старый двоичный файл во временную текстовую версию, затем исправил этот старый текстовый файл и затем сжимал новый текстовый файл обратно в двоичный файл (сжимал каждую пару шестнадцатеричных цифр в один байт и отбрасывал новые строки и любые возвращаемые каретки, которые могли бы заполниться).

Совсем недавно я использовал rsync (или какая-то утилита, построенная поверх нее, например Unison). Он отлично обрабатывает произвольные двоичные файлы. Я вообще делаю живое обновление, когда Unison работает на моем локальном компьютере и rsync работает на файловом сервере, разговаривая друг с другом.

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

Подходы

, которые, насколько мне известно, должны работать с бинарными файлами

fooobar.com/questions/429031/... предлагает использовать bsdiff.

Другой вопрос fooobar.com/questions/51786/... подразумевает, что "vimdiff", похоже, адекватно обрабатывает произвольные байты.

fooobar.com/questions/429032/... упоминает несколько других инструментов двоичной разницы.

Я слышал, что некоторые инструменты на основе rsync - " rdiff" и "rdiff-backup" и "duplicity" - позволяют вам создать файл исправления. Затем человек, который получает этот файл патча, может использовать его для обновления своего старого двоичного файла в новом двоичном файле.

Wikipedia утверждает, что последние версии стандартных "diff" и "patch" -установок поддерживают двоичные файлы. Вы пробовали это?

новейшие исследования в сжатии исполняемого файла

Если вы заинтересованы в передовых исследованиях по тому, как сделать дельта файл как можно меньшим при обновлении исполняемых файлов, вы захотите проверить "Как работает кабачок" Стивеном Адамсом 2009 года в The Chromium Projects.

Кроме всего прочего, компьютер, который получает патч, "разбирает" старое приложение, преобразуя все абсолютные адреса и смещения в символы; затем исправляет дизассемблированный код; затем "повторно собирает" исправленный код в новую версию приложения.

Ответ 2

Попробуйте xdelta.

Я искал некоторые инструменты для двоичного разложения для очень больших файлов (один LVM-логический том и его моментальные снимки, поскольку LVM еще не поддерживает моментальный снимок моментального снимка), и xdelta работает для меня.