Was ist also der Fall, wenn das Hinzufügen conv=sync,noerror
einen Unterschied macht, wenn eine gesamte Festplatte auf einer Image-Datei gesichert wird? Ist conv=sync,noerror
eine Anforderung bei forensischen Sachen? Wenn ja, warum ist es in Bezug auf Linux Fedora der Fall?
Bearbeiten:
OK, wenn ich also auf dd verzichte conv=sync,noerror
und dd
beim Lesen des Blocks auf Lesefehler stoße (lasst uns 100M groß werden), überspringt dd einfach 100M Block und liest den nächsten Block, ohne etwas zu schreiben ( dd conv=sync,noerror
schreibt Nullen in 100M Ausgabe - was ist mit diesem Fall?) ?)?
Und wenn der Hash der Original-Festplatte und der Ausgabedatei anders ist, wenn nicht conv=sync,noerror
? Oder ist dies nur beim Lesen ein Fehler aufgetreten?
Antworten:
conv=sync
erzähltdd
jeden Block auf der linken Seite mit Nullen aufzufüllen, so dass der volle Block aufgrund eines Fehlers, wenn nicht gelesen werden kann, wird die volle Länge der Originaldaten erhalten, auch wenn die Daten nicht alle selbst im Bild enthalten sein können , . Auf diese Weise wissen Sie zumindest, wie beschädigt die Daten sind, was Ihnen möglicherweise forensische Hinweise liefert, und wenn Sie aufgrund von fehlerhaften Blöcken oder Ähnlichem überhaupt kein Bild aufnehmen können, können Sie keine der Daten analysieren. manche sind besser als keine.conv=sync,noerror
ist notwendig, um zu verhinderndd
, dass ein Fehler auftritt und ein Dump ausgeführt wird.conv=sync
ist weitgehend bedeutungslos ohne Fehler.http://linuxcommand.org/man_pages/dd1.html
http://vlinux-freak.blogspot.com/2011/01/how-to-use-dd-command.html
quelle
dd conv=sync,noerror
(oderconv=noerror,sync
) verfälscht Ihre Daten.Abhängig vom aufgetretenen E / A-Fehler und der verwendeten Blockgröße (größer als der physische Sektor?) Bleiben die Eingabe- und Ausgabeadressen nicht synchron, sondern landen am falschen Versatz, wodurch die Kopie für Dateisystem-Images und andere unbrauchbar wird Dinge, bei denen Versätze eine Rolle spielen.
Viele Orte empfehlen die Verwendung
conv=noerror,sync
beim Umgang mit defekten Datenträgern zu verwenden. Ich selbst habe die gleiche Empfehlung gemacht. Es hat bei mir funktioniert, als ich vor einiger Zeit eine fehlerhafte Festplatte wiederherstellen musste.Tests haben jedoch ergeben, dass dies in keiner Weise zuverlässig ist.
Verwenden Sie
losetup
unddmsetup
, um einA error B
Gerät zu erstellen :Die A, B-Loop-Geräte sehen folgendermaßen aus:
So ist es A, B mit inkrementierenden Zahlen, die uns helfen, Offsets später zu überprüfen.
Um nun einen Lesefehler zwischen die beiden zu setzen, mit freundlicher Genehmigung von Linux Device Mapper:
Dieses Beispiel erstellt
AerrorB
wie in2000
Sektoren vonA
, gefolgt von2*48
Sektoren von Fehlern, gefolgt von2000
Sektoren vonB
.Nur zur Verifizierung:
Es liest also bis
A127999\n
, da jede Zeile 8 Bytes hat, was 1024000 Bytes entspricht, was unseren 2000 Sektoren mit 512 Bytes entspricht. Alles scheint in Ordnung zu sein ...Wird es sich mischen?
Ergebnisse:
An den Dateigrößen allein können Sie erkennen, dass einige Blockgrößen falsch sind.
Prüfsummen:
dd
stimmtddrescue
nur für Blockgrößen zu, die zufällig an unserer Fehlerzone ausgerichtet sind (512
,4K
).Lassen Sie uns die Rohdaten überprüfen.
Die Daten selbst scheinen zwar vorhanden zu sein, sind jedoch offensichtlich nicht synchronisiert. Die Offsets sind für bs = 16K, 1M, 42,64K völlig aus dem Gleichgewicht ... nur diejenigen mit Offset
2088576
sind korrekt, wie anhand des Originalgeräts überprüft werden kann.Ist das erwartetes Verhalten von
dd conv=noerror,sync
? Ich weiß es nicht und die beiden Implementierungen, diedd
ich zur Verfügung hatte, stimmen nicht einmal überein. Das Ergebnis ist sehr nutzlos, wenn Siedd
eine performante Blockgrößenauswahl verwenden.Die oben wurde hergestellt unter Verwendung von
dd (coreutils) 8.25
,BusyBox v1.24.2
,GNU ddrescue 1.21
.quelle
ddrescue
stattdd
bei laufwerken mit defekten sektoren zu arbeiten?sync
Argument besagt, dass die Ausgabe die richtige Länge haben soll. Es funktioniert nicht, wenn Sie die falsche Blockgröße verwenden. Tun Sie das einfach nicht.iflag=fullblock
scheint es zu retten. Obwohlmd5sum
s mit gemacht Bilderiflag=fullblock
noch unterscheiden (! Natürlich , weil Zahlen von Bytes, die mit dem Lesefehler übersprungen aufgrund waren unterschiedlich - also Anteile von\0
s in den Bildern unterscheiden sich ), aber Ausrichtung wird gespeichert mitiflag=fullblock
:grep -a -b --only-matching B130000
Rückkehr2088576
für alle Bilder.