Wie überprüfe ich die Integrität eines dd-Backups?

11

Ich habe gerade ein Backup einer ganzen Festplatte (50 GB) über folgende Adresse erstellt ssh:

dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

Was ist jetzt der beste Weg, um die Integrität der Datei image.imgzu überprüfen, dh wie man überprüft, ob alles korrekt kopiert wurde?

Schüler
quelle
Normalerweise ist es immer perfekt, wenn Sie dd. Sie können jedoch immer sha1sum ausführen, um die sha1-Hashes des Originals und der Sicherung zu überprüfen.
Darnir
2
" Normalerweise ... ist es immer perfekt." Das erinnert mich an das Zitat von The Naked Gun: "Ärzte sagen, dass Nordberg eine 50/50-Chance hat zu leben, obwohl es nur eine 10-prozentige Chance dafür gibt."
Sparhawk

Antworten:

9

Wenn der Befehl erfolgreich beendet wurde, ist die Sicherung korrekt, mit Ausnahme eines Hardwarefehlers (der sich auch auf die von Ihnen durchgeführte Überprüfung auswirken kann). Es kann später falsch werden, wenn die Hardware fehlerhaft ist, aber die meisten Speicherhardware erkennt Beschädigungen.

Hier gibt es eine Einschränkung: In einer Pipeline meldet die Shell keine Fehler von der linken Seite. (Dies liegt an einem ziemlich häufigen Szenario, in dem die rechte Seite nicht alle Daten lesen muss, z. B. some_command | headund die linke Seite stirbt, weil ihre Ausgabe nicht mehr gewünscht wird.) Hier also ein Lesefehler von ddwürde ignoriert werden. Legen Sie in bash die pipefailOption fest, Fehler aus allen Teilen der Pipeline zu melden.

Achten Sie auch darauf, dass dd bs=…einige Fehler ignoriert werden und ddhäufig langsamer als bei Alternativen sind . Ich empfehle, überhaupt nicht zu verwenden dd: Es hat keine Vorteile, nur eine ganze Datei zu kopieren. Im Gegensatz zu dem, was Sie vielleicht irgendwo gelesen haben, ddhandelt es sich nicht um einen einfachen Festplattenzugriffsbefehl mit speziellen Eigenschaften, es ist absolut keine Magie in dd, die Magie ist in /dev/hda.

shopt -s pipefail
set -e
</dev/hda buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

Wenn Sie jedoch die Sicherung überprüfen möchten, ist es am besten, auf jeder Seite eine kryptografische Prüfsumme zu erstellen und diese zu vergleichen. Beispielsweise:

ssh myuser@myhost "sha1sum image.img" &
sudo sha1sum /dev/hda

Überprüfen Sie, ob die beiden Prüfsummen identisch sind.

Beachten Sie, dass hierdurch geprüft wird, ob das Backup und das Original zum Zeitpunkt der Überprüfung identisch sind. Alles, was Sie ändern /dev/hda, einschließlich des Ein- und Aushängens eines Dateisystems, auch ohne Änderungen vorzunehmen (wodurch bei vielen Dateisystemen das Datum der letzten Bereitstellung aktualisiert wird), ändert die Prüfsumme. Wenn Sie die Integrität später überprüfen möchten, notieren Sie sich die Prüfsumme der Festplatte zum Zeitpunkt der Sicherung irgendwo.

Gilles 'SO - hör auf böse zu sein'
quelle
3
Beachten Sie, dass , wenn etwas auf /dev/hdageändert hat , seit die Sicherung die Hashes übereinstimmen , werden nicht gemacht wurde.
Bahamat
Der Vorteil einer Hash-Prüfung besteht darin, dass falsch-negative Ergebnisse (Fehler beim Aufzeichnen des Bildes werden zufällig während des Hash-Laufs wiederholt, so dass ein Fehler unbemerkt bleibt) astronomisch winzig sind. Wenn ein Hardwarefehler vorliegt, sollte dies überwiegend zu einer fehlgeschlagenen Hash-Prüfung führen. Erhält eine falsch-positive Fehlerprüfung, wenn die Festplatte geändert wurde, wie bereits erwähnt.
Steven Lu
@StevenLu Nein, die Wahrscheinlichkeit einer Korrelation ist ziemlich hoch, da Hardwarefehler nicht einheitlich zufällig sind. Insbesondere treten RAM-Fehler (die die häufigsten Hardwarefehler sind, die bei typischen PCs beobachtet werden können) an bestimmten Bits auf.
Gilles 'SO - hör auf böse zu sein'
Okay, wahrscheinlich ... Hasch wie dieser mit einem großen Körnchen Salz, klar, aber OP wurde über ein Netzwerk übertragen. Es ist einfach von Natur aus unzuverlässig, trotz TCP. Außerdem ist es wahrscheinlich, dass wir nicht genau das gleiche Zugriffsmuster sehen (im physischen Speicher).
Steven Lu
Neue verwandte Frage zur Klärung des ersten Satzes von @Gilles.
Sparhawk
5

Wie von darnir & Giles erwähnt, ist es am besten, kryptografische Hashes unmittelbar nach dem Backup auszuführen, bevor Änderungen an Ihrer Quellfestplatte vorgenommen wurden. Wenn Sie die Festplatte jedoch seitdem verwendet haben, stimmen die Hashes höchstwahrscheinlich nicht überein. Selbst das Ändern eines Bytes auf der Festplatte führt zu einem völlig anderen Hash.

Obwohl es weit weniger als ideal ist, können Sie das Bild vor Ort überprüfen, indem Sie es montieren. Führen Sie auf dem System, auf dem sich das Disk-Image befindet, Folgendes aus (erstellen /mnt/diskSie , wenn es nicht vorhanden ist, oder einen alternativen Speicherort):

mount -o loop image.img /mnt/disk

Sie können sich dann in /mnt/diskallen Dateien umsehen . Überprüfen Sie die sha1-Hashes kritischer Dateien im Bild mit den Originalen, um deren Integrität zu überprüfen.

Bahamat
quelle
-1

Verwenden Sie den Befehl qemu-img

qemu-img check image.img
PolkaRon
quelle