在 Linux 下使用 RAID(八):当软件 RAID 故障时如(2)

#mdadm--manage /dev/md0 --add /dev/sdd1

幸运的是,该系统会使用我们刚才添加的磁盘自动重建阵列。我们可以通过标记 /dev/sdb1 为 faulty 来进行测试,从阵列中取出后,并确认 tecmint.txt 文件仍然在 /mnt/raid1 是可访问的:

#mdadm--detail /dev/md0

#mount|grep raid1

#ls-l /mnt/raid1 |grep tecmint

#cat/mnt/raid1/tecmint.txt

Confirm Rebuilding RAID Array

确认 RAID 重建

上面图片清楚的显示,添加 /dev/sdd1 到阵列中来替代 /dev/sdc1,数据的重建是系统自动完成的,不需要干预。

虽然要求不是很严格,有一个备用设备是个好主意,这样更换故障的设备就可以在瞬间完成了。要做到这一点,先让我们重新添加 /dev/sdb1 和 /dev/sdc1:

#mdadm--manage /dev/md0 --add /dev/sdb1

#mdadm--manage /dev/md0 --add /dev/sdc1

Replace Failed Raid Device

取代��障的 Raid 设备

从冗余丢失中恢复数据

如前所述,当一个磁盘发生故障时, mdadm 将自动重建数据。但是,如果阵列中的2个磁盘都故障时会发生什么?让我们来模拟这种情况,通过标记 /dev/sdb1 和 /dev/sdd1 为 faulty:

#umount/mnt/raid1

#mdadm--manage --set-faulty /dev/md0 /dev/sdb1

#mdadm--stop /dev/md0

#mdadm--manage --set-faulty /dev/md0 /dev/sdd1

此时尝试以同样的方式重新创建阵列就(或使用 --assume-clean 选项)可能会导致数据丢失,因此不到万不得已不要使用。

让我们试着从 /dev/sdb1 恢复数据,例如,在一个类似的磁盘分区(/dev/sde1 - 注意,这需要你执行前在/dev/sde 上创建一个 fd 类型的分区)上使用 ddrescue:

# ddrescue -r 2/dev/sdb1 /dev/sde1

Recovering Raid Array

恢复 Raid 阵列

请注意,到现在为止,我们还没有触及 /dev/sdb 和 /dev/sdd,它们的分区是 RAID 阵列的一部分。

现在,让我们使用 /dev/sde1 和 /dev/sdf1 来重建阵列:

#mdadm--create /dev/md0 --level=mirror --raid-devices=2/dev/sd[e-f]1

请注意,在真实的情况下,你需要使用与原来的阵列中相同的设备名称,即设备失效后替换的磁盘的名称应该是 /dev/sdb1 和 /dev/sdc1。

在本文中,我选择了使用额外的设备来重新创建全新的磁盘阵列,是为了避免与原来的故障磁盘混淆。

当被问及是否继续写入阵列时,键入 Y,然后按 Enter。阵列被启动,你也可以查看它的进展:

#watch-n 1cat/proc/mdstat

当这个过程完成后,你就应该能够访问 RAID 的数据:

Confirm Raid Content

确认 Raid 数据

总结

在本文中,我们回顾了从 RAID 故障和冗余丢失中恢复数据。但是,你要记住,这种技术是一种存储解决方案,不能取代备份。

本文中介绍的方法适用于所有 RAID 中,其中的概念我将在本系列的最后一篇(RAID 管理)中涵盖它。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15816.html