我的 Linux 系统开始在 syslog 中抛出 SMART 错误。我对其进行了追踪,并认为问题出在磁盘上的单个块上。如何轻松地让磁盘重新分配那个块?我想知道在这个过程中什么文件被破坏了。(我知道,如果磁盘上的一个块发生故障,其他块可能会跟随;我有一个很好的持续备份,只是想尝试保持该磁盘正常工作。)
在网络上搜索会导致Bad block HOWTO,它描述了在卸载磁盘上的手动过程。这似乎很复杂且容易出错。是否有工具可以在 Linux 中自动执行此过程?我唯一的其他选择是制造商的诊断工具,但我认为这会破坏坏块,而不会报告损坏的内容。最坏的情况,它可能是文件系统元数据。
有问题的磁盘是主系统分区。使用 ext3fs 和 LVM。这是来自 syslog 的错误日志和来自 smartctl 的相关位。
smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors
Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782
pastebin上有一个完整的 smartctl 转储。
我曾经为WD写磁盘固件,我曾经写过重新分配坏块的固件。
首先,大多数坏块是在读取时检测到的,而不是在写入时检测到的。写入是盲目进行的,这意味着数据在未经检查的情况下写入。因此,如果介质损坏,则在写入时,在主机读取该扇区之前您不会知道它。有一小部分扇区(扇区头)在写入时被读取以定位正确的扇区,因此如果读取扇区头时出现错误,驱动器将重新分配扇区并将接收到的数据写入从写命令。但是绝大多数坏块都是在读取时检测到的,仅仅因为一个扇区的写入成功并不意味着介质是好的或该扇区已被重新分配。
现在关于坏块重新分配(也称为重新分配)。是的,通常情况下,如果错误严重(即 ECC 故障已经严重),驱动器将尝试重新分配扇区,但在 ECC 更正后,驱动器仍然可以恢复数据。通常这是自动完成的。唯一的例外是主机之前可以告诉驱动器不要进行自动重新分配,但很少这样做。
那么如果驱动器进行读取并且无法恢复数据会发生什么?没有什么。错误会报告给主机,但不会重新分配。问题是驱动器可以重新分配扇区,但它根本不知道要在新重新分配的扇区中写入什么数据。例如,如果它只是写了一堆零,然后再次读取该扇区,它将返回所有零,而没有任何迹象表明数据无效。这与数据损坏本质上是一样的。由于各种原因,驱动器不能指望主机跟踪错误(例如,如果驱动器被移动到新主机怎么办?),所以最好的做法是当数据可以时什么都不做不能恢复。
但是,现代驱动器会在无法重新分配坏扇区时保存坏扇区的位置。可以在 SMART 数据中找到等待重新分配的坏扇区的数量。发生的情况是,如果对等待重新分配的坏扇区之一进行了写入,则重新分配已完成,因为驱动器现在在重新分配后具有要写入的有效数据。因此,当人们说写入坏扇区会重新分配它时,这实际上只是故事的一半。必须先读取驱动器,以便驱动器可以发现所有无法自动重新分配的坏扇区。因此您可以写入整个驱动器,SMART 数据会说没有坏扇区等待重新分配,但您不一定清除所有坏扇区的驱动器。因此,如果您真的想清除所有坏扇区的驱动器,
还有其他处理无法重新分配的坏块的方法。如果驱动器是冗余 RAID 配置的一部分(即除 RAID 0 之外的任何配置),RAID 软件应自动从其他驱动器恢复坏扇区的数据并将其写入重新分配的扇区。SCSI 磁盘有一个明确的重新分配块命令,即使没有有效数据写入块,主机也可以使用该命令强制重新分配,但它的使用非常低级。
你可以试试
hdparm --write-sector <LBA> /dev/ice
。我不知道这样做的任何其他方式 - 您需要手动将 LBA 转换为文件系统块(正如您已经找到的那样)
我想你所要做的就是:
假设 /dev/hda1 是(未挂载的)分区。或者:
做一个(较慢的)非破坏性读写测试。它仍然必须卸载。不过,我认为这不会为您提供任何丢失数据的详细信息。
迈克尔说得对,在大多数情况下,我会说只是更换便宜的驱动器。但是,如果您没有备份并且无法从驱动器中获取重要数据,或者只是想尝试修复驱动器,那么您可能需要尝试在最高级别上使用spinrite 。
几年前,我有一个笔记本电脑驱动器开始发出一些噪音。坏块显示驱动器有 118 个左右的坏块对最终用户可见。由于我已经拥有 SpinRite 的副本,因此我决定在购买新驱动器之前尝试一下。在驱动器坏块上运行 spinrite 后,显示 0 个坏块并且噪音停止。从那时起,该驱动器已经工作了两年多。
如果您有备份并且您知道这是一个逻辑错误而不是物理错误,那么解决此问题的最佳方法是将磁盘归零。
我会使用 MHDD,它相当容易使用,只要您记得在 Bios 中将 HDD 设置为 IDE 仿真,然后在您的工作完成后返回 AHCI,您就无需担心。
启动到 MHDD 后,在 ERASE 命令中选择您的驱动器类型并确认您的选择。
给自己买咖啡,这可能需要一段时间。
驱动器归零后,运行扫描(f4)并将重映射设置为打开(默认为关闭)。如果驱动器仍然存在问题(这意味着盘片上存在物理损坏并且驱动器处于稳定向下的斜坡上),此选项将通过将损坏区域映射到驱动器的健康部分来“修复”它们。
如果没有 UNC 错误,那么恭喜您和您的硬盘在未来几年仍然可以成为朋友。
如果磁盘坏了,请更换它。不值得冒它会更加崩溃的风险。