2011-01-19 7 views

risposta

8

Consentitemi di iniziare con approcci provati e veri, quindi evidenziare alcuni approcci più recenti.

approcci che ho visto lavorare con i file binari

Molto tempo fa, la gente ampliato il vecchio e le nuove versioni di un file binario in file temporanei "testo" (ogni byte estesa a 3 byte: 2 cifre esadecimali e una nuova riga). Quindi eseguire questi due file "di testo" attraverso una vecchia versione di "diff" (che sicuramente non poteva gestire file binari) per creare un file di patch. Poi abbiamo trasmesso quel file patch "di testo" su linee di comunicazione che non erano ancora pulite a 8 bit. Sul lato ricezione, uno ha espanso il vecchio file binario in una versione di testo temporanea, quindi ha applicato il patch a quel vecchio file di testo e poi ha compresso il nuovo file di testo in un file binario (comprimendo ogni coppia di cifre esadecimali in un byte e lanciando via i newline e qualsiasi ritorno di carrozza che potrebbe essersi insinuato).

Più recentemente, ho utilizzato rsync (o qualche utilità costruita su di esso come Unison). Gestisce file binari arbitrari bene. Generalmente faccio un aggiornamento in tempo reale, con Unison in esecuzione sul mio computer locale e rsync in esecuzione sul file server, parlando avanti e indietro l'uno con l'altro.

Indipendentemente da come viene generato un file di patch, è possibile utilizzare qualsiasi utilità di compressione dei dati per comprimere quel file.

approcci che, per quanto ne so, dovrebbe funzionare con i file binari

StackOverflow: "how to crate a PATCH file for the binary difference output file" suggerisce di utilizzare bsdiff.

Un altro StackOverflow question implica che "vimdiff" sembra gestire byte arbitrari in modo adeguato.

StackOverflow: "Useful Binary Diff Tool" menziona alcuni altri strumenti di differenza binaria.

Ho sentito che alcuni strumenti basati su rsync - "rdiff" e "rdiff-backup" e "duplicità" - consentono di creare un file di patch. Quindi una persona che riceve quel file di patch può usarlo per aggiornare il vecchio file binario in un nuovo file binario.

Il Wikipedia claims che le versioni recenti delle utilità "diff" e "patch" standard supportano i file binari. Hai provato?

ricerca d'avanguardia in compressione file eseguibile

Se siete interessati a ricerca d'avanguardia per rendere il file delta più piccolo possibile durante l'aggiornamento di file eseguibili, ti consigliamo di controllare "How Courgette works" di Stephen Adams 2009 presso The Chromium Projects.

Tra le altre cose, il computer che riceve la patch "disassembla" la vecchia applicazione, convertendo tutti gli indirizzi e gli offset assoluti in simboli; quindi applica il codice smontato; quindi "riassembla" il codice rattoppato nella nuova versione dell'applicazione.

+0

Grazie mille per la tua gentile spiegazione, David. Per il mio problema, xdelta è diventata la mia scelta dopo diversi esperimenti. – tianyapiaozi

5

Prova xdelta.

Stavo cercando alcuni strumenti di binary diff per file molto grandi (un volume logico LVM e le sue istantanee, perché LVM non supporta ancora l'istantanea dello snapshot) e xdelta funziona per me.