Es gibt bup
Backup-Programm (https://github.com/bup/bup) basierend auf einigen Ideen und einige Funktionen aus git
Versionskontrollsystem für kompakte Speicherung von virtuellen Maschinenbildern.Wie bup (git-basierte Imagesicherung) berechnet Hashes von gespeicherten Objekten
In bup
gibt es bup ls
subcommand, die einig SHA1-Hashes wie (die gleiche Länge von hex), von Objekten gespeichert innerhalb der Sicherung, wenn -s
Option übergeben wird (in man bup-ls
gibt es nur "es zeigt --hash : show hash für jede Datei/jedes Verzeichnis. "). Aber der sha1-artige Hash ist nicht gleich sha1sum
Ausgabe der ursprünglichen Datei.
Ursprüngliche git
berechnet SHA1 Hash der Daten durch Daten mit BLOB NNN \ 0' string Vorfixierung, wobei NNN eine Größe des Objekts in Bytes, als Dezimalzahl geschrieben, entsprechend How does git compute file hashes? und https://stackoverflow.com/a/28881708/
I prefix BLOB getestet NNN \ 0 'und immer noch nicht die gleiche sha1 Summe.
Was ist die Methode der Berechnung Hash-Summe für Dateien in Bup verwendet wird? Ist es linear sha1 oder eine baumartige Variante wie Merkle? Was ist der Hash eines Verzeichnisses?
Die Quelle von ls
Befehl von bup ist https://github.com/bup/bup/blob/master/lib/bup/ls.py, und Hash nur in Hex gedruckt, aber wo der Hash generiert wurde?
def node_info(n, name,
''' ....
if show_hash:
result += "%s " % n.hash.encode('hex')
Ist das Hash auf die Schaffung BUP Backup erzeugt (wenn die Datei innerhalb von bup index
+ bup save
Befehle auf den Backup platziert ist) und nur auf bup ls
ausgedruckt; oder wird es auf jedem bup ls
neu berechnet und kann als Integritätstest von bup backup verwendet werden?
https://github.com/bup/bup/blob/master/DESIGN – torek
torek, bereits überprüft, keine genauen Informationen über Hash Berechnung (es gibt sha1 type, aber * ungleich sha1sum * result) – osgx
bup spaltet Datei-Dateien in viele Dateien auf, mit der dort beschriebenen Technik. Also ist der "bup hash" einer Datei kein git-Datei-Hash, weil es kein einzelnes git-Blob gibt, das der Datei oder dem Verzeichnis entspricht, das bup-save-d ist. Siehe Zeilen 556-560. Es gibt * ein einzelnes git * tree * -Objekt für eine solche Datei und wahrscheinlich ist das der bup-Hash. In jedem Fall ist die Integrität des gesamten Backups (oder sogar eines Gruppenelements darin) eindeutig nicht prüfbar, ohne alle zugrunde liegenden Git-Objekte zu überprüfen, was das Ausführen von "git fsck" oder Ähnliches erfordert. – torek