一位朋友给了我一个性能一直很差的外部硬盘,让我看看能诊断并修复什么。
第一步是拆开驱动器,以消除 USB 控制器作为变量。然后我把它扔进一台旧电脑并运行chkdsk
。它花了整整两天时间(运行时间超过 40 小时),但最终完成了,有 ~8000 个坏扇区。事件查看器还报告了控制器问题 - The driver detected a controller error on \Device\Ide\IdePort4
。
我确实运行了硬盘制造商的诊断工具(它只在连接了机箱控制器时检测到驱动器,但是呃)。它报告了一个错误并停止了,互联网上没有文档说明错误代码的含义。
复制几乎不可能,因为传输开始后设备立即开始抖动,读写头发出咔嗒声,而传输停滞。不过我怀疑问题只限于硬盘的某个区域。
所以我想知道 - 是否有一些应用程序可以映射问题区域,然后在它们周围创建一个分区或者用隐藏文件填充该区域或者使用某种工具将所有缓慢的区域标记为坏块或者任何其他方法来恢复某些功能?
答案1
所以我想知道 - 是否有一些应用程序可以映射问题区域,然后在它们周围创建一个分区或者用隐藏文件填充该区域或者使用某种工具将所有缓慢的区域标记为坏块或者任何其他方法来恢复某些功能?
ddrescue 将通过其日志文件向您提供有关不可读区域的信息。在有缺陷的区域周围创建分区并不是一个明智的想法,但它不定期地出现在这个网站上。当 FAT 和 NTFS 文件系统可以存储有关坏扇区的信息时,为什么要将硬盘空间分成可能很小的不可用区域?使用正确的参数调用 chkdsk 就可以完成这项工作。
除非有缺陷的驱动器是最后一个可用的驱动器,并且假设您在欧洲空间站工作并且披萨班车已经离开一天,否则没有必要在损坏的驱动器上浪费时间。
答案2
现代硬盘会保留一部分空间作为替换块。新硬盘通常有少量坏块,一旦发现,就会从这个池中替换掉。
随着驱动器的老化,更多的块可能会出现损坏并被替换。
最终,驱动器可能会因内部漂浮的碎片而损坏。发生这种情况时,驱动器将迅速产生新的坏块,而替换池将很快耗尽。SMART 算法和内部诊断将在池耗尽之前发现这一点,并在驱动器发生故障之前向操作系统和 BIOS 发出警告——尽管这并不总是传达给用户。
等到需要使用 chkdsk 等工具来查找坏块时,驱动器已经耗尽了所有替换池,驱动器即将走向最终报废,数据丢失不可避免。尝试使用 chkdsk “修复”驱动器只会让情况变得更糟,因为它会将碎片散布到驱动器内部,并在表面造成新的刮擦,直到内部校准轨道被损坏,驱动器甚至无法在通电时正确初始化。
您的驱动器现在基本上已经损坏。它早已无法修复。任何“翻新”基本上都需要在工厂进行,并且需要彻底清洁和更换内部磁性介质,可能还需要更换驱动器磁头,可能还需要更换大部分其他内部活动部件。
答案3
这显然不是一个新问题,人们已经想到了我以前想到的相同的解决方案。
一些研究揭示了以下资源:
重新分区坏驱动器[Windows 程序] - 几乎完全符合我的要求。将扫描您的驱动器并在坏区周围创建分区。可以配置最小分区大小和缓冲区,以避免创建过多分区。创建 MBR 分区和 RAW 卷。据说 IDE 模式比 AHCI 更快。当我运行该程序时,它出现了一些错误,数字超出范围(>100% 进度,负扇区数),但运行成功结束。
硬盘扫描[Windows 程序] - 可以创建坏 LBA 列表。
救援[Linux 程序] -r2d3说:
ddrescue 将通过其日志文件为您提供有关不可读区域的信息。
基本磁盘和动态磁盘[文章] - 由于您最终可能会得到许多分散的分区,因此您可能需要将磁盘转换为动态磁盘,以允许一个卷跨越多个不连续的分区。还解释了 MBR 和 GPT 之间的区别。
隐藏坏块中的数据[文章] - 一篇安全文章,尽管如此,它还是讨论了手动隔离坏块所需的确切技术。从 Linux 角度撰写。可以与任何提供坏块列表的方法结合使用。
最初,根据chkdsk
活动模式(编号较低的扇区扫描速度较慢,而末尾速度较快),我怀疑后面的扇区处于完全可用的状态。最终,我的驱动器完全变砖了,因为当我尝试应用上述技术时,RW 磁头的振动/咔嗒声模式扩展到驱动器的所有区域。我怀疑这是控制器问题或磁头碰撞或此时更全局的问题。