ddrescue一个失败的硬盘; 得到一个内核模块死锁

我正在用ddrescue恢复正在死亡的硬盘。 该实用程序在驱动器中没有问题的部分工作得很好,但在驱动器的某些部分出现问题,速度非常慢,似乎导致某些内核模块出现死锁。

首先:我的系统,

$ uname -a Linux 3.16.2-1-ARCH #1 SMP PREEMPT Sat Sep 6 13:12:51 CEST 2014 x86_64 GNU/Linux 

这里是发生了什么事情,我目前在使用ddrescue -dn /dev/sdd ddrescue.img ddrescue.log进行恢复的第一阶段。在我的内核日志中重新configuration以下日志

 [ 1160.113936] end_request: critical target error, dev sdd, sector 520968448 [ 1191.145082] usb 3-2: reset SuperSpeed USB device number 3 using xhci_hcd [ 1191.159792] xhci_hcd 0000:01:00.0: xHCI xhci_drop_endpoint called with disabled ep ffff88044919cf00 [ 1191.159797] xhci_hcd 0000:01:00.0: xHCI xhci_drop_endpoint called with disabled ep ffff88044919cf48 [ 1222.107631] usb 3-2: reset SuperSpeed USB device number 3 using xhci_hcd [ 1222.122490] xhci_hcd 0000:01:00.0: xHCI xhci_drop_endpoint called with disabled ep ffff88044919cf00 [ 1222.122495] xhci_hcd 0000:01:00.0: xHCI xhci_drop_endpoint called with disabled ep ffff88044919cf48 [ 1346.337324] sd 17:0:0:0: [sdd] Unhandled error code [ 1346.337329] sd 17:0:0:0: [sdd] [ 1346.337332] Result: hostbyte=0x05 driverbyte=0x00 [ 1346.337334] sd 17:0:0:0: [sdd] CDB: [ 1346.337336] cdb[0]=0x28: 28 00 1f 0d 59 80 00 00 01 00 [ 1346.337345] end_request: I/O error, dev sdd, sector 520968576 [ 1377.408091] usb 3-2: reset SuperSpeed USB device number 3 using xhci_hcd [ 1377.422946] xhci_hcd 0000:01:00.0: xHCI xhci_drop_endpoint called with disabled ep ffff88044919cf00 [ 1377.422951] xhci_hcd 0000:01:00.0: xHCI xhci_drop_endpoint called with disabled ep ffff88044919cf48 

我推测这是由于在内核级发生I / O错误 – 模块最终重置到设备的连接。 (请纠正我,如果我错了)。

这将持续一段时间,工作正常,直到最终我看起来像是一个僵局。

 [ 4132.846802] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4132.866845] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4132.886878] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4132.906841] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4132.926928] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4132.946948] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4132.966935] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4132.986990] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4133.007033] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 [ 4133.027030] usb-storage: Error in queuecommand_lck: us->srb = ffff880446c78300 

这些消息永远不会停止

当它死锁所有相关的io锁和杀死进程不起作用 – 我唯一的解决办法是重新启动系统(有时强制) – 这在我看来像一种方式来导致潜在的数据损坏的数据我试图恢复。 我不需要为了恢复这个驱动器而多次重启我的系统。

  1. 我明白,这个驱动器是失败的,但为什么这个模块最终会死锁?
  2. 我应该如何去报告/修补这个bug?
  3. 是否有某些内核模块,我可以重新启动来从这个错误中恢复,而不必重新启动? (我最好的尝试是强行移除停止ddrescue的uas ,但是我无法再次启动它)

先进的谢谢你