dd stürzt ab - was kann man dagegen tun?

dd stürzt ab - was kann man dagegen tun?

Bei mir ddstürzt es nach ein paar Stunden ab. Normalerweise mit einer Meldung wie

Input/output error
68424+1 records in
68424+1 records out
342124883968 bytes (342 GB) copied, 5114.68 s, 66.9 MB/s

Kann ich etwas dagegen tun? Kann ich die Ausgabe irgendwie verwenden? Oder dort weitermachen, wo ich aufgehört habe?

Gibt es einen Grund für die Annahme, dass dies daran liegt, dass die Partition, zu der ein Backup erstellt wird, verwendet wird?

Es stürzt immer bei etwa 70–80 % ab, oft dann, wenn die Partition weniger genutzt werden sollte.

Da dieser Prozess so lange dauert, ist es schwierig, verschiedene Dinge auszuprobieren.

Ich gebe die Ausgabe in ein Image aus. Ich könnte wahrscheinlich eine Partition verwenden, aber LVM ist beteiligt:

sudo lvmdiskscan
/dev/centos/swap [       3.89 GiB] 
/dev/sda1        [     500.00 MiB] 
/dev/centos/root [      50.00 GiB] 
/dev/sda2        [     465.27 GiB] LVM physical volume
/dev/centos/home [     411.38 GiB] 
/dev/sdb1        [     931.51 GiB] 
3 disks
2 partitions
0 LVM physical volume whole disks
1 LVM physical volume


dd conv=sync,noerror if=/dev/centos/home bs=2000000   of=/run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image
dd: error reading '/dev/centos/home': Input/output error
171062+1 records in
171063+0 records out
342126000000 bytes (342 GB) copied, 4625.3 s, 74.0 MB/s
220856+2 records in
220858+0 records out
441716000000 bytes (442 GB) copied, 6138.1 s, 72.0 MB/s

Freitag Morgen ddrescue --sector-size=2048 --cluster-size=$((256*512)) --sparse --verbose /dev/centos/home /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.map

GNU ddrescue 1.18.1 About to copy 441714 MBytes from /dev/centos/home to /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd7c_dd.image Starting positions: infile = 0 B, outfile = 0 B Copy block size: 131072 sectors Initial skip size: 32 sectors Sector size: 2048 Bytes

Press Ctrl-C to interrupt rescued: 441714 MB, errsize: 8192 B, current rate: 0 B/s ipos: 342124 MB, errors: 1, average rate: 60675 kB/s opos: 342124 MB, run time: 2.02 h, successful read: 9 s ago Finished

Aber extundelete sd7c_dd.image --restore-directory /home/ob/p -o /tmp/tt extundelete: Bad magic number in super-block when trying to open filesystem sd7c_dd.image

/dev/mapper/centos-home on /home type xfs (rw,relatime,attr2,inode64,noquota) 

Antwort1

Sie sollten niemals ddauf einem gemounteten Dateisystem laufen, da dies das Image beschädigen kann, insbesondere wenn Sie ein Backup erstellen möchten. Sie können tarstattdessen verwenden.

Wenn Sie sicher sind, dass das GerätnichtAndernfalls können Sie die Flags seek(zum Suchen von N Blöcken in der Ausgabedatei) und skip=N(zum Überspringen von N Blöcken der Eingabe) verwenden. Auf einem Linux-System können Sie den dmesgBefehl verwenden, um das aktuelle Kernel-Protokoll abzurufen.

Wenn Sie sich nicht sicher sind, ob das Gerät, von dem Sie kopieren möchten, möglicherweise defekt ist, empfehle ich Ihnen, ddrescueein Image des Geräts zu erstellen. Dieses Tool bricht bei Lesefehlern nicht ab und protokolliert die Positionen der Blöcke, die nicht richtig gelesen werden konnten.

Antwort2

Wenn Sie versuchen, eine Image-Kopie einer verwendeten Partition zu erstellen, riskieren Sie einen wirklich schlimmen Absturz. Das Kopieren einer Partition auf diese Weise setzt voraus, dass nichts darauf geschrieben wird. Überhaupt nicht.

Wenn Sie die Partition stilllegen können ddrescue, können Sie verwenden, das zum Lesen von Festplatten und Partitionen mit fehlerhaften Sektoren entwickelt wurde. Ein typischer Aufruf zum Extrahieren /dev/sda1in die Image-Datei /media/sda1.imgwürde folgendermaßen aussehen:

ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/sda1 /media/sda1.img /media/sda1.map

Die Sektor- und Clustergrößen sind ddrescuefür das Lesen von 64-MB-Einheiten ausgelegt. Sie können versuchen, diese Größe auf 128 MB oder sogar 256 MB zu erhöhen. Beachten Sie jedoch, dass dies nicht unbedingt den Durchsatz erhöht.

In Ihrem speziellen Fall ist Ihre Quellpartition tatsächlich ein LVM-Volume, daher ist dies eine große Hilfe: Sie können einen Snapshot der Partition erstellen, um ein Backup zu erstellen. In diesem Beispiel habe ich es genannt home-snap.

lvcreate --snapshot --name home-snap --size 1G /dev/centos/home
ddrescue --sector-size=2048 --cluster-size=$((64*512)) --sparse --verbose /dev/centos/home-snap /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.image /run/media/ob/X_1T_Media1GHD-PCTU3/c/sd9e22_cel.map
lvremove -y /dev/centos/home-snap

Antwort3

Wenn das Gerät größer als die kopierten 342 GB ist, befindet sich auf dieser Festplatte höchstwahrscheinlich ein fehlerhafter Sektor.

Sie können seekund skipmit identischen Werten verwenden, um fortzufahren.

dd <your previous options here ...> seek=68424 skip=68424 conv=notrunc

68424wird höchstwahrscheinlich nur wieder denselben E/A-Fehler erzeugen, also müssen Sie ihn erhöhen. Sie haben nicht gesagt, welche Blockgröße Sie verwendet haben (und ich bin zu faul, das nachzurechnen). Um kleinere Fehlerbereiche zu überspringen, bevorzugen Sie möglicherweise eine kleinere Blockgröße (dann müssen Sie entsprechend anpassen seek) skip.

Nicht verwenden conv=noerror,es verdirbt die Dinge. Wenn weitere Fehler auftreten, verwenden Sie ddrescue. Dies ist ein Tool, das Lesefehler besser verarbeitet als dd.

verwandte Informationen