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 Befehlszeilenparametern dd
können einige Fehler ignoriert werden . Dies ist äußerst ungewöhnlich: Dies ist dd
der einzige häufig verwendete Befehl mit dieser Eigenschaft. Verwenden Sie cat
stattdessen dd
, so riskieren Sie keine Korruption und es kann auch schneller sein .
Bei einer Datenkopierkette können zwei Arten von Fehlern auftreten.
- Korruption: Während der Übertragung wird ein bisschen gewendet. Es gibt keine Möglichkeit, dies auf Anwendungsebene zu überprüfen, da dies auf einen Programmierfehler oder einen Hardwarefehler zurückzuführen ist, der beim Zurücklesen mit hoher Wahrscheinlichkeit dieselbe Beschädigung verursacht. Der einzige nützliche Weg, um sicherzustellen, dass keine solche Beschädigung aufgetreten ist, besteht darin, das Medium physisch zu trennen und es erneut zu versuchen, vorzugsweise auf einem anderen Computer, falls das Problem mit dem RAM bestand.
- Abschneiden: Alle kopierten Daten wurden korrekt kopiert, aber einige der Daten wurden überhaupt nicht kopiert. Dieser ist manchmal eine Prüfung wert, abhängig von der Komplexität des Befehls. Dazu müssen Sie die Daten nicht lesen. Überprüfen Sie einfach die Größe.