Ich benutze, dd
um Daten von einer alten Festplatte auf eine neue zu kopieren. Ich möchte sicherstellen, dass die Integrität der Daten sicher ist.
Zu dieser Antwort sagt Gilles
Wenn [dd] erfolgreich beendet wurde, ist die Sicherung korrekt, es sei denn, es liegt ein Hardwarefehler vor.
Was heißt das genau? Hat dd
eine Art von Verifikation eingebaut?
Wenn ich stattdessen rsync verwenden würde, würde ich auch einen zweiten Durchgang mit ausführen --checksum
, um dies zu überprüfen. Ist diese Art von Paranoia gerechtfertigt?
dd
verification
integrity
Sparhawk
quelle
quelle
rsync
wären wahrscheinlich die einfachsten.Antworten:
dd
oder eine andere Anwendung hat keine "eingebaute Verifikation" in dem Sinne, an den Sie wahrscheinlich denken: Sie liest nicht die Daten vom Speichermedium zurück, um sie mit dem zu vergleichen, was geschrieben wurde. Das ist die Aufgabe des Betriebssystems.Es ist nicht wirklich möglich, aus einer Anwendung heraus eine Leseüberprüfung auf die Hardware durchzuführen. In einigen Szenarien würde dies funktionieren, in den meisten Fällen jedoch nichts bewirken. Die Anwendung könnte zurücklesen, was sie gerade geschrieben hat, wenn sie direkt auf ein Speichermedium schreibt , aber das würde normalerweise aus einem speicherinternen Cache zurücklesen, was keine nützliche Sicherheit geben würde. In dem Beispiel, das Sie zitieren ,
dd
wird in eine Pipe geschrieben, und in diesem Fall hat es keine Kontrolle darüber, was mit den Daten weiter unten in der Zeile geschieht. In Ihrem RSYNC-Beispiel ein zweiter Durchgang vonrsync --checksum
Das ist sinnlos: Theoretisch könnte es einen Fehler auffangen, aber in der Praxis würde der zweite Durchgang wahrscheinlich nichts Falsches melden, wenn ein Fehler auftritt. Sie verschwenden also Mühe mit etwas, das keine wirklich nützliche Sicherheit bietet.Allerdings Anwendungen Sie überprüfen , was passiert mit den Daten, in dem Sinne , dass sie überprüfen, ob das Betriebssystem akzeptiert die Verantwortung für die Daten hat. Alle Systemaufrufe geben einen Fehlerstatus zurück. Wenn ein Systemaufruf einen Fehlerstatus zurückgibt, sollte die Anwendung diesen Fehler an den Benutzer weitergeben, indem im Allgemeinen eine Fehlermeldung angezeigt und ein Exit-Status ungleich Null zurückgegeben wird.
Beachten Sie, dass dies
dd
eine Ausnahme darstellt: Abhängig von den Befehlszeilenparameterndd
können einige Fehler ignoriert werden . Dies ist äußerst ungewöhnlich: Dies istdd
der einzige häufig verwendete Befehl mit dieser Eigenschaft. Verwenden Siecat
stattdessendd
, so riskieren Sie keine Korruption und es kann auch schneller sein .Bei einer Datenkopierkette können zwei Arten von Fehlern auftreten.
quelle
dd if=/dev/sdc of=/dev/sdb bs=4M
Produkt verwende. Mein Verständnis ist also, dass das Ignorieren von Fehlern und der Geschwindigkeit (mehr oder weniger im Vergleich zucat
) umstritten ist. Wollen Sie nur die Größe überprüfen, indem Sie dann montierendf
?Nein,
dd
führt keine explizite Überprüfung durch. Wenn Sie eine forensisch überprüfte Kopie Ihres Datenträgers oder eines Teils davon benötigen, verwenden Siedcfldd
diese erweiterte Version desdd
vom US-Verteidigungsministerium entwickelten Computer Forensics Lab.quelle
Die einzige Möglichkeit, "sicher" zu sein, besteht darin, einen zusätzlichen Durchlauf zum Lesen und Vergleichen durchzuführen (nachdem die Caches gelöscht wurden).
Außerdem werden
dd
Lese- und Schreibfehler auf dieselbe Weise wie in allen anderen Programmen erkannt. Dies funktioniert, wenn die Laufwerke (und die anderen beteiligten Komponenten) Fehler melden. Für Laufwerke, die Daten stillschweigend akzeptieren, ohne sie tatsächlich zu schreiben, haben Sie Pech.Wenn Sie nicht darauf vertrauen können, dass Ihre Hardware zuverlässig ist, wird es kompliziert ...
quelle
dd
Erkennen von Fehlern.dd
haben Sie schwerwiegende Datenkorruptionsprobleme, aber Sonderfälle wie diese waren nicht Teil der Frage.dd
. Die wirkliche Lösung ist, alles andere als zu verwenden,dd
da stille Datenkorruption eine Spezialität von istdd
.dd
, Fehler zu ignorieren. Sie können einem Programm nicht die Schuld geben, genau das getan zu haben, worum Sie es gebeten haben.dd
, Fehler nicht zu ignorieren? Und nein,conv=noerror
ist keine richtige Antwort. Siehe frostschutz Antwort für ein Beispiel. Ich mache das Designdd
dafür verantwortlich, dass das Ignorieren von Fehlern ein Standardmodus ist, der nicht ausgeschaltet werden kann, ohne die internen Mechanismen genau zu kennen.Ja, fehlerhafte Hardware kann zufällige Fehlerbits mit einer gewissen Rate von einem Bit pro Megabyte in die Daten einfügen. Dies ist möglich und findet in der Praxis manchmal statt.
Normalerweise verwende ich md5 oder sha1 Hash, um zu überprüfen, ob die Daten intakt sind, indem ich sowohl die Quelle als auch das Ziel erneut lese, zB:
Dies setzt voraus, dass die Daten viel größer sind als der Dateisystem-Cache. Andernfalls müssen Sie möglicherweise das System neu starten, um die tatsächlichen Daten auf dem Medium und nicht den Cache-Inhalt zu überprüfen, oder ein anderes System dafür verwenden.
quelle
Von
man dd
:dd
Überprüft, ob die Eingabe- / Ausgabeblockgrößen bei jedem Kopieren eines Blocks übereinstimmen. Wenn dies nicht der Fall ist, wird der Fehler mit einer Warnung oder einem schwerwiegenden Fehler behandelt (überschrieben mitnoerror
). Deshalbdd
funktioniert praktisch die ganze Zeit.Es ersetzt jedoch nicht die manuelle Überprüfung der Integrität Ihrer Festplatte. Wenn die Informationen für Sie wertvoll sind, ist Ihre Paranoia gerechtfertigt . Führen Sie nach Abschluss eine manuelle Überprüfung durch
dd
.quelle
dd
funktioniert praktisch nicht immer: Mit dembs
Parameter werden einige Fehler ignoriert .