I/O 錯誤未冒泡至 ddrescue

I/O 錯誤未冒泡至 ddrescue

我正在嘗試使用 ddrescue 從損壞的 USB 記憶棒中獲取圖像。該過程適用於驅動器的前 100MB,然後完全卡住:ddrescue 輸出被凍結(甚至幾個小時都沒有移動)。

ddrescue 進程處於「D」 - 不間斷睡眠(通常是 IO)狀態,而且訊號不會停止它,只有拔掉 USB 隨身碟才會停止。

看起來 I/O 錯誤沒有到達 ddrescue,因此它無法移動到下一個區塊。有沒有辦法確保核心向 ddrescue 傳回 I/O 錯誤,以便它可以繼續前進?

我使用預設選項運行 ddrescue:

sudo ddrescue /dev/sdc /tmp/image_usb_rescue.img /myt/image_usb_rescue.log

使用dd代替會ddrescue導致相同的結果(進程卡住)。

我在 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

為了確保這不是 USB 控制器驅動程式問題,我嘗試在兩個不同的系統(AMD 桌上型電腦和 Intel 筆記型電腦)上進行救援。結果是一樣的。

我嘗試拔下、插入 USB 記憶棒並再次啟動 ddrescue,並選擇--input-position跳過壞區,它可以工作,但問題的數量使得無法手動執行此操作。

相關內容