从损坏的驱动器恢复 Raid1 阵列

从损坏的驱动器恢复 Raid1 阵列

有人让我检查一台装有 Raid 1 阵列的计算机,直到 12 个月前其中一个驱动器发生故障而无人修复,现在已经被更换,但另一个驱动器也出现了问题,并且有许多损坏的扇区。

理想情况下,我希望将新驱动器集成到阵列中,然后停用损坏的驱动器并更换它。但是当这样做时,mdadm 会抛出类似以下内容:

May 29 12:55:46 jackbarberlimited xinetd[21512]: START: smtps pid=28049     from=::ffff:2.102.62.201
May 29 12:55:46  kernel: ata2.00: status: { DRDY ERR }
May 29 12:55:46  kernel: ata2.00: error: { UNC }
May 29 12:55:46  kernel: ata2.00: configured for UDMA/133
May 29 12:55:46  kernel: sd 1:0:0:0: SCSI error: return code = 0x08000002
May 29 12:55:46  kernel: sdb: Current [descriptor]: sense key: Medium Error
May 29 12:55:46  kernel:     Add. Sense: Unrecovered read error - auto reallocate failed
May 29 12:55:46  kernel: 
May 29 12:55:46  kernel: Descriptor sense data with sense descriptors (in hex):
May 29 12:55:46  kernel:         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
May 29 12:55:46  kernel:         3a d9 d5 58 
May 29 12:55:46  kernel: end_request: I/O error, dev sdb, sector 987354456
May 29 12:55:46  kernel: raid1: sdb: unrecoverable I/O read error for block 982615168
May 29 12:55:46  kernel: ata2: EH complete
May 29 12:55:46  kernel: SCSI device sdb: 1465149168 512-byte hdwr sectors (750156 MB)
May 29 12:55:46  kernel: sdb: Write Protect is off
May 29 12:55:46  kernel: SCSI device sdb: drive cache: write back
May 29 12:55:46  kernel: md: md2: sync done.

显然,将损坏的驱动器复制到新驱动器有点令人沮丧,有没有办法强制执行此操作,还是我必须将内容复制到恢复磁盘或类似的东西上?

答案1

我建议关闭阵列并使用 dd 将驱动器克隆到新驱动器。然后进行完整的 fsck 以确保一切正常,然后尝试使用另一个新驱动器再次重建 RAID。

您应该使用 dd 选项“conv=noerror,sync”来忽略坏扇区。

答案2

md 不会复制返回此类错误的驱动器。您应该改为:

  • 启动到救援环境
  • 使用 dd 或 ddrescue 之类的工具将坏驱动器复制到新驱动器
  • 把坏的驱动器拿出来
  • 从新驱动器启动
  • 安装另一个空驱动器并让 md 将数据镜像到该驱动器上

相关内容