我在 Ubuntu 16.04 中使用 mdadm 设置了 4 磁盘 RAID5。
深圳发展银行:好
sdc:根据 SMART,8 个坏扇区,8 个待处理扇区,4 个报告错误
sdd :根据 mdadm --examine 存在坏块
sde:好
我很天真,以为系统会通知我磁盘故障。由于根据“mdadm --examine /dev/sdd”的最后一次更新是在 11 月,我知道那是它从 RAID 中删除的时间。 7 个月以来,我一直在不知不觉中以降级模式运行。直到上周末,它将 sdc 标记为故障,并且我的 RAID 由于磁盘不足而变得不活动。
SMART (smartctl --xall) 表示所有磁盘均已通过,但报告 sdc 上有 8 个不可纠正的扇区和 4 个不可纠正的错误。所以磁盘相当健康。
sdd 上的事件计数显然要少很多,但 sdc 上的事件计数只少了 63 个。所以我强制使用三个磁盘进行组装,并且我的所有数据都可以访问。我确信存在一些损坏的文件,但这对于这些数据来说并不是一个大问题。
然后我用“mdadm /dev/md0 -a /dev/sdd”添加了第四个磁盘,它开始恢复,但遇到了 sdc 上的坏扇区,无法重新分配(我认为是因为它已降级?)和 mdadm再次将其标记为有错误,然后我又回到了开始的地方。
我在这里找到了一些关于如何将有坏块的磁盘保留在阵列中的好说明。 https://stephane.lesimple.fr/blog/how-to-securely-keep-a-hard-drive-with-bad-blocks-in-a-raid-array/
然而,我又犯了一个错误。由于我不确定是否要坚持使用 Linux,因此该阵列采用 NTFS 进行格式化,以防我想运行 Windows。这意味着 fsck 或 debugfs 等 fs 命令都不起作用。
chkdsk 可能会有所帮助,但我需要安装 Windows,并且我不想经历这种痛苦,除非我确定它会起作用。我希望有一种方法可以利用现有的 Linux 实用程序来做到这一点。我有来自 kern.log 的扇区,但奇怪的是它列出了 10 个带有“读取错误不可纠正”消息的扇区,这比 SMART 报告的 8 个扇区多。如果我可以将这些扇区转换为逻辑块,那么我可以使用 dd 将它们清零。
我已经备份了所有重要的内容,因此我可以购买新驱动器,但为了少数坏扇区而扔掉 4TB 驱动器似乎很浪费。我什至不确定 sdd 有什么问题,因为它没有坏扇区。
注意:当 RAID 在添加第 4 个磁盘后尝试恢复时,kern.log 中有数百条“失败的命令:READ FPDMA QUEUED”消息,谷歌搜索这表明我的 SATA 电缆或电源可能损坏。我也遇到过 PSU 故障的情况,但如果是这种情况,这将是第一次导致硬盘故障。
答案1
ddrescue 确实成功地从有坏扇区的驱动器复制到 11 月份从阵列中禁用的驱动器,但是,只有在我更换电源之后。在 /var/log/kern.log 中,我看到数百个失败的 WRITE FDMA QUEUE 命令,因此从较新的计算机中取出 PSU,移植后,ddrescue 工作正常。 4TB 磁盘大约需要 10 个小时。它报告了 15 个错误,总计 80kb。完成后,sdd 看起来就像您所期望的 sdc 一样,所以我用 sdb sdd 和 sde 组装了阵列,然后添加了 sdd 并让它恢复,它完成时没有错误。事实上,SMART 不再报告 sdd 上的任何坏扇区。我认为这是因为写入这些扇区导致磁盘重新分配这些扇区。一切都很好,只需要订购一个新的 PSU。