正如标题所示,我有一块硬盘,大约一年前我都没有打开过它,我想检查一下它是否有坏扇区。通常,我会使用坏块进行 4 次破坏性读写测试来测试新驱动器badblocks -b 4096 -wsv /dev/sdx
。由于磁盘上已存满数据,而且我没有其他备用驱动器来迁移数据,所以我正在考虑使用坏块进行只读测试,看看重定位扇区计数值是否发生变化。我会在smartctl -A /dev/sdx
只读测试之前和之后运行智能测试,看看是否有任何差异。这是找出坏扇区数量的有效方法吗?
只读测试能否确定是否存在数据损坏?除了 badblocks 之外,还有其他更好、更新的工具可以完成这项工作吗?
答案1
badblocks 根据使用的选项检查所有扇区是否可读/可写。这在第一步很有用,因为坏扇区会导致后续问题。
但是,由于 SMART 内置于任何 SATA 驱动器中,甚至许多较旧的驱动器也具有此功能,因此 badblocks 更有用。SMART 具有 CRC 错误或不可纠正错误等值,但 SMART 仅检查它查看的扇区。因此 badblocks 将强制硬盘 SMART 检查磁盘上的每个扇区。
我还没有找到一个程序,它可以读取一个扇区,然后在读取下一个扇区之前进行智能检查以查看错误是否增加,这将是理想的,因为这样您就可以将错误精确定位到特定的文件。
然而,即使硬盘有 ECC 或错误纠正技术,它也只能纠正一定数量的坏位。一旦纠正,损坏将是永久性的。
fsck 检查文件系统,但文件系统相当于书中的目录而不是单独的页面。
现在有些文件(如 zip 文件)内置有 CRC 或其他错误检测技术,可以检测到错误但无法纠正。CRC 失败表示文件已损坏,但无法纠正。然而,许多文件却没有。
现在,如果您提前采取预防措施,可以使用 QuickPar 等几个选项来生成可用于修复文件的奇偶校验数据。
但是,每次文件内容发生变化时,奇偶校验数据都必须重新运行 QuickPar 或类似程序来更新奇偶校验数据。如果您想将驱动器放在架子上 6 个月,这没问题,但如果您每天都在积极更改文件,这至少会很繁琐。该程序有一个选项可以确定可以恢复多少损坏,但设置越高,它将占用的磁盘空间就越多,并且可能需要很长时间才能完成。
除此之外,还有 RAID 镜像和级别 5 和 6,它们可以丢失 1 个或多个磁盘,而其他驱动器将重建它。但是,奇偶校验/修复数据全部由硬件或软件 RAID 控制器自动处理。缺点是,从金钱角度来看,它会更加昂贵。