如何从 Linux 上不断断开连接的坏掉的硬盘中恢复数据

如何从 Linux 上不断断开连接的坏掉的硬盘中恢复数据

我有一个外部 USB 硬盘,它快要坏了。

我正在尝试使用 Linux Mint Cinnamon 20 来恢复文件,只需剪切和粘贴即可。但是,每隔约 30 秒左右,驱动器就会停止显示,操作将失败。如果我断开电缆并重新连接,驱动器将再次显示,操作将继续。已知良好的电缆会发生这种情况。

有没有建议如何最好地从该驱动器中获取数据,而不用坐在那里每 30 秒断开并重新连接电缆 10 小时?我愿意尝试不同的发行版,或者如果其中任何一个效果更好,执行磁盘克隆。

驱动器的底部。

驱动器上的连接器。

答案1

显然付费恢复服务是最好的选择,他们可以更换发动机和任何其他故障部件。

因此,这需要一些实验,但由于付费恢复听起来不是一个选择,所以尝试一下。

听起来硬件出现故障,你无法修复,你必须接受这个过程的一些繁琐。可能是硬盘电机出现故障,在这种情况下,更换它超出了 90% 的人的技能范围。

您将需要一个比源更大的输出设备。

实现自动化的唯一方法是,如果您有一个受控插座板,您可以定期让脚本关闭和打开,并将单独的电源上的硬盘插入到所述插座板上。

我相信其他品牌的插座板也许能够做到这一点,但我确信 kasa hs300(69.99 美元 - 89.99 美元,具体取决于商店和销售价格)在 github 上有一个 python API(https://github.com/p-doyle/Python-KasaSmartPowerStrip) 可以从 Linux 内部控制插座板。我做过,但不是为了这个目的。

因此,基本上,如果您将硬盘放在外部 USB 机箱中,则可以使用插座板自动将其关闭并打开,以将其唤醒 30 秒。但是,我不知道您是否准备好应对这种复杂性。

你可以尝试 ddrescue

ddrescue -d -r3 /dev/sda test.img test.logfile

然而,硬盘每30秒就会停止工作一次,因此仍然需要每30秒拔下并重新插入一次。

或者

dd bs=512 if=/dev/sda of=/location/of/output/drv.img count=1000

好的,现在您有了前 1000 个扇区。

dd bs=512 if=/dev/sda of=/location/of/output/drv.img count=1000 -skip=1000 seek=1000

因此“skip”应该跳过您已有的前 1000 个扇区。“seek”会推进输出文件中的起始位置。

因此现在您只需按照与计数值相同的倍数继续推进跳过和寻找值即可。

dd bs=512 if=/dev/sda of=/location/of/output/drv.img count=1000 -skip=2000 seek=2000
dd bs=512 if=/dev/sda of=/location/of/output/drv.img count=1000 -skip=3000 seek=3000

dd bs=512 if=/dev/sda of=/location/of/output/drv.img count=10000 -skip=4000 seek=4000
dd bs=512 if=/dev/sda of=/location/of/output/drv.img count=10000 -skip=14000 seek=14000

您可以尝试越来越大的计数、跳过、查找值来减少所需的时间。

基本上,您需要达到 30 秒内(失败时间)可以读取的最大扇区数。然后继续以该大小的块为单位进行读取。

最终您将获得整个驱动器的映像。

然后你就可以挂载图像

mkdir /mnt/whatever
mount -o loop /blah.img /mnt/whatever

然后复制文件就很容易了。

相关内容