我有一个固态硬盘,它出现了某种硬件故障,我可以 rma 它,因为它仍在保修期内,但他们的服务不包括数据恢复。我已经从中收集了我的工作文件,但我的个人文件和插件仍然存在,我想恢复它们。
问题... 带宽和总副本大小接缝成为一个问题。阅读太多,驱动器崩溃。到处报告坏扇区(错误)或关闭整个操作系统。所以我已经把驱动器放在一个外壳中,所以我可以热交换它,因为我怀疑内存缓冲区是问题所在。根据另一个问题here,我曾想过使用具有带宽限制的rsync,但我相信我需要错开复制过程以让缓冲区自行清除或冷却。
我需要一些脚本或工具来恢复丢失的数据。
“扇区”不是 SSD 上存在的东西。“块”会,如果你的驱动器报告它们是坏的,这意味着,因为没有什么可以机械地失败:
所以,你得到一个错误。这意味着无法读取该内容。没有“SSD 对不可恢复的数据的错误”:它总是读取一些电压,无论一切如何损坏,并检查这些是否通过检查,并在必要时和可能的情况下纠正它们。
所以:
你必须相信你的 SSD——它实际上无法读取数据。尽管存储单元(顺便说一下,是充电到某个电压的小电容器)完好无损,但您唯一可以更改为“全局”的方式会使读取变得困难,那就是如果您“移动”转换模拟信号的 ADC 的参考电压电压到数字值。然后,即使实际内存正常,您的解码器也会得到不正确的软输入。
但是该电压是在与 ADC相同的芯片内产生的(因此,在您的闪存芯片内),并且应该对电源电压的变化具有相当的弹性。
所以,也许这是一个热问题,真的,或者是一些硅模式故障。
无论哪种方式,在我看来,您都不想使用 rsync 或任何文件系统级工具从驱动器获取数据。这要求操作系统能够非常频繁地访问相同的数据点,只是为了了解哪些数据在哪个文件中。
您需要做的是制作块设备级别的副本,并以小步骤进行复制。将 16 MB 读入(例如)图像文件。稍等片刻。读取 16 MB……等等。
这可以在带有循环的 ZSH/bash shell 脚本中完成,该循环使用 顺序读取这些块
dd
,然后调用sleep
等待,然后读取下一个等,或者在几行 Python 中完成。不要忘记检查途中读取的错误,并在发生错误时中止该过程,以便稍后在同一点重新启动它。因为需要一个实际准备好的解决方案: