
Ich versuche, mit ddrescue ein Image von einem beschädigten USB-Stick zu erhalten. Der Vorgang funktioniert für die ersten 100 MB des Laufwerks und bleibt dann völlig hängen: Die ddrescue-Ausgabe ist eingefroren (bewegt sich auch stundenlang nicht).
Der ddrescue-Prozess befindet sich im Zustand „D“ – Unterbrechungsfreier Ruhezustand (normalerweise IO) und kann nicht durch Signale gestoppt werden, nur das Abziehen des USB-Laufwerks reicht aus.
Es scheint, dass die E/A-Fehler ddrescue nicht erreichen, sodass es nicht zum nächsten Block übergehen kann. Gibt es eine Möglichkeit, sicherzustellen, dass der Kernel einen E/A-Fehler an ddrescue zurückgibt, sodass es weitergehen kann?
Ich habe ddrescue mit den Standardoptionen ausgeführt:
sudo ddrescue /dev/sdc /tmp/image_usb_rescue.img /myt/image_usb_rescue.log
Die Verwendung dd
anstelle von ddrescue
führte zum selben Ergebnis (Prozess blieb hängen).
Ich erhalte die folgende Meldung auf dmesg:
[ 2247.230715] usb 1-2: reset high-speed USB device number 15 using xhci_hcd
[ 2247.381353] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_TIME_OUT driverbyte=DRIVER_OK cmd_age=1s
[ 2247.381377] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 05 eb 00 00 00 f0 00
[ 2247.381385] blk_update_request: I/O error, dev sda, sector 387840 op 0x0:(READ) flags 0x84700 phys_seg 30 prio class 0
[ 2252.054160] usb 1-2: reset high-speed USB device number 15 using xhci_hcd
[ 2252.203889] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_TIME_OUT driverbyte=DRIVER_OK cmd_age=1s
[ 2252.203912] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 06 19 00 00 00 f0 00
[ 2252.203920] blk_update_request: I/O error, dev sda, sector 399616 op 0x0:(READ) flags 0x84700 phys_seg 15 prio class 0
[ 2254.610160] usb 1-2: reset high-speed USB device number 15 using xhci_hcd
Um sicherzugehen, dass es kein Problem mit dem USB-Controller-Treiber war, habe ich die Rettung auf zwei verschiedenen Systemen versucht (AMD-Desktop und Intel-Laptop). Die Ergebnisse waren die gleichen.
Ich habe versucht, den Stecker zu ziehen, den USB-Stick wieder anzuschließen und ddrescue erneut zu starten, mit der --input-position
Option, den fehlerhaften Bereich zu überspringen. Das funktioniert, aber aufgrund der zahlreichen Probleme ist es unmöglich, es manuell durchzuführen.