有什么办法可以防止坏驱动器从 /dev 中消失吗?

有什么办法可以防止坏驱动器从 /dev 中消失吗?

我正在尝试使用 ddrescue 恢复损坏驱动器上的分区。我跑:

$ sudo ddrescue -r -1 -v /dev/sdd3 OUT.img dd_rescue_logfile

它似乎在一段时间内表现很好,但大约一个小时后,“当前速率”降至零,因为驱动器从 /dev 中消失了。要恢复驱动器,我唯一能想到的就是重新启动系统并运行 ddrescue 命令以从中断处恢复。这使得运行该程序变得非常困难,因为我不能就这样离开它并忘记它几天 - 我必须不断监视它以确保磁盘没有消失。我在 Arch linux 和 Fedora 22 上都看到过这种行为。

我假设在某个时刻,内核无法访问驱动器并将其从 /dev 中删除。有什么办法可以避免这种情况吗?告诉内核将设备保留在那里,即使它看起来已损坏或不存在?

答案1

您也许可以通过卸载/重新加载正确的模块(或者只是取消绑定并重新绑定驱动程序)来重新检测它,而无需重新启动。

例如:

[  978.527221] sd 11:0:0:1: [sdk] Attached SCSI removable disk
#~> echo 11:0:0:1 > /sys/bus/scsi/drivers/sd/unbind
#~> echo 11:0:0:1 > /sys/bus/scsi/drivers/sd/bind
[ 5572.027119] sd 11:0:0:1: [sdk] Attached SCSI removable disk

或者,如果这不起作用,并且您没有其他设备连接到同一控制器,您可以通过例如/sys/bus/pci/drivers/ahci/AHCI 取消绑定并绑定整个控制器。

我没有任何有缺陷的硬盘来测试它是否真的可以工作,但我之前使用过这种方法来强制重新检测默认情况下不可热插拔的插槽中的 MicroSD/MMC 卡。

至于ddrescue将速度降至零,您可能想看看它是否支持该-a, --min-read-rate=<bytes>选项,所以它会希望吗?将慢速区域视为有缺陷并跳过它们。最坏的情况是您必须从外部监视磁盘并强制重新启动ddrescue

答案2

我使用 USB2NVME 适配器,只需拔下 USB 适配器并重新插入,即可在几秒钟内重新启动发生故障的驱动器。

也就是说,我发现 NVME 驱动器的直接冷却(使用 12V 风扇)可确保驱动器不再消失。从我冷却驱动器的那一刻起,ddrescue就不再显示了ddrescue: Input file disappeared: No such file or directory

答案3

我也遇到过这种情况,源/dev/sdx设备在启动后不久就会消失ddrescue,并且知道拔出并重新插入我用来将 SATA 驱动器连接到系统的 USB“烤面包机”会导致它重新启动成立。

重新启动 ddrescue 将使其运行几分钟,然后不久就会崩溃。使用lsblk,可以轻松查看驱动器是否已连接。无论如何,我在 1 个 Ubuntu 系统上运行了几次 ddrescue,然后在更新的 19.04 Ubuntu 上运行了几次 ddrescue,其中 ddrescue 稍旧(1.23)。

即使在尝试了上面和其他地方提到的绑定/取消绑定补救措施之后,仍然遇到问题,我想我只是尝试在 CentOS 7 系统(CentOS Linux 版本 7.7.1908(核心))上运行 ddrescue,使用 ddrescue 版本 1.24 和kernel 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux和成功!

我在运行时驱动器上出现了许多错误(根据 /var/log/messages),但此时它已经运行了 10 多个小时,没有一个硬盘驱动器实例消失。

让我再次尝试CentOS系统的是,几年前我遇到过类似的恢复情况,发现我当时使用的CentOS 6系统并没有丢失驱动器。

希望这可以帮助。

相关内容