恢复显然没有错误的 RAID 磁盘

恢复显然没有错误的 RAID 磁盘

几年来,我们一直在一台装有定制 Linux 2.6.31 的旧 Gentoo 机器上运行软件 RAID1。该 RAID 由 2 个硬盘组成,每个硬盘有 4 个分区。在过去的几年里,磁盘从阵列中被丢弃的情况发生了 3-4 次。但每次都badblocks没有报告错误,我能够像这样重新激活磁盘

mdadm /dev/md3 -r /dev/sda3
mdadm /dev/md3 -a /dev/sda3

这次情况不同:mdadm过去 24 小时内报告了 2 个故障分区,均位于同一磁盘上sda。我再次运行badblocks但未成功:它报告了 0 个坏块。如果我尝试将故障磁盘重新添加到阵列,它每次都会出现相同的错误:

Mar 25 23:09:10 xen0 kernel: ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Mar 25 23:09:10 xen0 kernel: ata1.00: irq_stat 0x40000001
Mar 25 23:09:10 xen0 kernel: ata1.00: cmd ea/00:00:00:00:00/00:00:00:00:00/a0 tag 0
Mar 25 23:09:10 xen0 kernel: res 51/04:00:38:df:f7/00:00:00:00:00/a7 Emask 0x1 (device error)
Mar 25 23:09:10 xen0 kernel: ata1.00: status: { DRDY ERR }
Mar 25 23:09:10 xen0 kernel: ata1.00: error: { ABRT }
Mar 25 23:09:10 xen0 kernel: ata1.00: configured for UDMA/133
Mar 25 23:09:10 xen0 kernel: ata1: EH complete
Mar 25 23:09:10 xen0 kernel: end_request: I/O error, dev sda, sector 18297870
Mar 25 23:09:10 xen0 kernel: md: super_written gets error=-5, uptodate=0
Mar 25 23:09:10 xen0 kernel: md: md3: recovery done.
Mar 25 23:09:10 xen0 kernel: RAID1 conf printout:
Mar 25 23:09:10 xen0 kernel: --- wd:1 rd:2
Mar 25 23:09:10 xen0 kernel: disk 0, wo:1, o:0, dev:sda3
Mar 25 23:09:10 xen0 kernel: disk 1, wo:0, o:1, dev:sdb3
Mar 25 23:09:10 xen0 kernel: RAID1 conf printout:
Mar 25 23:09:10 xen0 kernel: --- wd:1 rd:2
Mar 25 23:09:10 xen0 kernel: disk 1, wo:0, o:1, dev:sdb3

扇区始终相同:18297870。如果我检查输出,smartctl -a /dev/sda它不会显示任何重新分配的扇区,所以我认为,我可以使用我找到的方法强制重新分配这里

hdparm --read-sector  18297870 /dev/sda
hdparm --write-sector  18297870 --yes-i-know-what-i-am-doing /dev/sda

但是使用上述命令,磁盘根本不会报告任何错误 - 因此不会重新分配扇区:

smartctl -a /dev/sda | grep -i reall
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0

我谷歌了一下这条status: { DRDY ERR }消息,有人说这可能是内核错误。但后来我想知道为什么现在才开始发生这种情况。过去几年系统没有变化。

但有一件事仍然困扰着我:smartctl -a /dev/sda日志中还报告了一些错误。总是相同的错误:

Error 15 occurred at disk power-on lifetime: 39971 hours (1665 days + 11 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  04 51 00 38 df f7 a7

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  ea 00 00 00 00 00 00 08  35d+12:17:45.571  FLUSH CACHE EXT
  61 80 f0 0e 96 2d 00 08  35d+12:17:44.033  WRITE FPDMA QUEUED
  61 80 e8 8e 95 2d 00 08  35d+12:17:44.033  WRITE FPDMA QUEUED
  61 80 e0 0e 95 2d 00 08  35d+12:17:44.033  WRITE FPDMA QUEUED
  61 80 d8 8e 94 2d 00 08  35d+12:17:44.033  WRITE FPDMA QUEUED

这一切对我来说毫无意义:如果磁盘确实有故障,那么为什么我每次都能成功读取和写入 RAID 重新同步失败的扇区?为什么磁盘在确实检测到错误时不首先尝试重新分配损坏的扇区?

答案1

这个问题询问如何恢复 RAID 已丢失的驱动器,并询问当扇区问题不存在时驱动器如何定期从 RAID 中丢失。要开始了解可能发生的事情,认识到以下情况可能会有所帮助:驱动器进入长期错误恢复或校准功能,并在足够长的时间内无响应,以至于 RAID 控制器将使驱动器失效,即使驱动器没有介质错误,这也是完全合理的。

如果硬盘不是为 RAID 设计的,定期进行自检操作就足以导致硬盘故障。本段提到了此问题:

https://en.wikipedia.org/wiki/RAID#Integrity

这个 49 天的 bug 链接描述了由 TLER 引发的 RAID 故障的一个著名实例。

专为 RAID 设计的驱动器限制了驱动器离线执行维护/恢复操作的时间长度。

购买用于 RAID 的驱动器时,为了避免此类问题,寻找时间限制的错误恢复 (局部淋巴细胞) 在驱动器规范中。

TLER 问题并不能解释重建阵列的困难,但是,请考虑这样一种情况:驱动器发生扇区故障,驱动器固件将故障扇区重新映射到备用扇区,以便驱动器继续看起来“完美”。人们可能想知道 18297870 扇区是否被重新映射到备用扇区,并且出于某种原因访问备用扇区需要太长时间。这确实看起来有点牵强,但了解磁盘访问时间延迟可能会对 RAID 造成严重破坏可能是弄清发生了什么的关键。

检查制造商是否为驱动器发布了固件更新。消费级驱动器通常没有固件更新,但服务器级驱动器通常会获得固件更新,以修复固件错误,即使没有发生硬件故障,这些错误也会导致操作问题。在网上搜索术语“驱动器固件错误 RAID 丢失”会产生很多相关结果。一些结果识别出特定的驱动器品牌和型号。

此链接记录了导致 RAID 故障的固件缺陷的一个实例。虽然它与上面记录的问题并不完全相同,但本文显示了固件作为 RAID 问题致病因素的相关性。另请参阅希捷梭子鱼维基百科页面包含许多有关导致性能问题的驱动器固件错误的参考资料。

相关内容