Ich habe zwei Partitionsimages (A und B) und möchte damit einen Patch erstellen, den ich auf A auf einem anderen Computer anwenden kann, um das neue B-Image zu erhalten, ohne das Netzwerk zu überfluten. Ich habe folgende Anforderungen:
- funktioniert unter Linux
- kann Unterschiede erzeugen
- kann diffs verwenden, um Dateien zu patchen
- kann mit Binärdateien umgehen
- kann mit großen Dateien umgehen (einige hundert GB sollten funktionieren)
- Keine Benutzerinteraktion erforderlich (nur eine Konsolenanwendung)
- sollte idealerweise in der Lage sein, aus Pipes zu lesen / in Pipes zu schreiben (damit ich aus einer gzip-komprimierten Datei hineinpipen und in eine schreiben kann)
Gibt es so etwas?
rdiff
wäre für zukünftige Referenz wertvoll. Beispiel: Nehmen wir an,file1
undfile2
zwei ähnliche Dateien von 1 GB je. 1) Wie berechnet man den rdiff? 2) Wie speichere ich diesen rdiff in einerpatch
Datei? 3) Wie wende ich diesepatch
Datei anfile1
, um sie wiederherzustellenfile2
?Antworten:
Sie sollten sich wahrscheinlich die rsync-bezogenen Tools ansehen: rdiff und rdiff-backup . Mit dem
rdiff
Befehl können Sie eine Patch-Datei erstellen und auf eine andere Datei anwenden.Der
rdiff-backup
Befehl verwendet diesen Ansatz, um ganze Verzeichnisse zu verarbeiten, aber ich vermute, Sie arbeiten mit Single-File-Disk-Images, alsordiff
wird er verwendet.quelle
rdiff signature oldfile | rdiff delta - newfile deltafile
file1
undfile2
sind zwei ähnliche Dateien von 1 GB je. 1) Wie berechnet man den Diff? 2) Wie speichere ich diesen Diff in einer Patch-Datei? 3) Wie wende ich diese Patch-Datei anfile1
, um sie wiederherzustellenfile2
?xdelta kann alles machen, was Sie wollen. Faire Warnung: Wenn Ihre Bilder nicht sehr ähnlich sind, kann dies zu einem sehr großen Patch führen, da xdelta die Hälfte des definierten Speicherpuffers verwendet, um Unterschiede zu finden. Weitere Informationen finden Sie auf der TuningMemoryBudget- Wiki-Seite. Das Erhöhen der Puffergröße kann einiges helfen.
bsdiff ist eine weitere Option, aber es ist sehr RAM-hungrig und für alles, was so groß wie ein Disk-Image ist, völlig ungeeignet.
quelle
Kanonische Antwort
In Bezug auf rdiff the post ist librsync 2.0.1 eine gute Lektüre für die Erläuterung der Befehlsfunktionalität, daher habe ich unten darauf verwiesen, um den Inhalt dieser Antwort beizubehalten , wenn nichts anderes.
Es ist wichtig zu versuchen, ein gutes Verständnis der drei Schritte zum Aktualisieren einer Datei zu erlangen : Signatur , Delta und Patch, wie auf der rdiff- Manpage beschrieben. Ich habe auch ein
rdiff
Befehlsbeispielskript auf GitHub gefunden, das hilfreich ist und auf das ich verweisen und zitieren werde.Schnellbefehle (per
rdiff-example.sh
)quelle
JDIFF ist ein Programm, das die Unterschiede zwischen zwei (binären) Dateien ausgibt.
quelle