-
Sie verwenden die standardmäßigen 512 Bytes
dd
Block Größe. Sie würden die Leistung erheblich verbessern, indem Sie eine größere Blockgröße verwenden, sagen wir128k
oder sogar1m
. -
Es gibt zwei Ausgaben, weil Sie zwei
dd
ausführen Befehle, der erste ist der Geräteleser und zeigt einen E/A-Fehler an. -
Angesichts des von Ihnen verwendeten Gerätenamens verwenden Sie wahrscheinlich LVM:
/dev/Storage/Storage
. Sind Sie sicher, dass dies die gesamte Festplatte ist und nicht eine Teilmenge? Verwenden Sielvdisplay
herauszufinden, was sich hinter diesem Gerätenamen verbirgt.
Sehen Sie in Ihren Kernel-Protokollmeldungen nach (dmesg
, oder /var/log/kern.log
) für detailliertere Meldungen der SATA-Treiber, wenn es sich um einen Hardwarefehler handelt. Auch nützlich:smartctl -x /dev/sda
. Wenn es nur ein Versuch war, über das Ende einer Partition hinaus zu lesen, könnte das auch im Kernel-Log erscheinen.
Um dd dazu zu bringen, nach einem I/O-Fehler weiterzumachen, um die lesbaren Teile zu lesen, die auf den Fehler folgen, verwenden Sie
dd if=... of=... conv=noerror bs=128k # it doesn't get any faster beyond about 128k, because of L2 cache size
(Wie in den Kommentaren zum OP erwähnt, ddrescue
hat dies und mehr. conv=noerror
wurde nach ddrescue
zu GNU dd hinzugefügt existiert, IIRC.)
Wenn Sie dort weitermachen möchten, wo Sie aufgehört haben, können Sie den seek
verwenden und skip
Optionen, mit conv=notrunc
.
Wenn Sie wirklich sehen wollen, wie weit dd fortgeschritten ist, sehen Sie sich die Dateiposition seiner stdin an:
cat /proc/$(pidof dd)/fdinfo/0 # dd opens its infile as fd #0
(oder ls -lh
die Größe der Ausgabedatei). Das Kopieren einer ganzen Festplatte voller Daten 2 zusätzliche Male, indem man sie durch etwas leitet, erscheint mir albern, als würde es Ihren Computer nur ein kleines bisschen langsamer machen als für die Stunden, die die Kopie dauern wird.
Oder zumindest tun:
dd if=... conv=noerror bs=128k | pv > Storage.img