下面我们来模拟RAID发生故障时的处理。
◆从RAID中移除设备
正在使用的设备是不允许移除的,要想移除,必须先将其标记为fail。如果你的RAID中有某个设备发生故障,要移除的话,也需要先将其标记为fail。
1.移除单个RAID物理卷
假设sda1分区发生异常,我们需要将其移除。
下面我们将物理卷sda1从RAID中移除:
$ sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
mdadm: hot removed /dev/sda1
如果你打算将移除的设备清空,以便做其他用途,那么你必须将超级块清除掉,否则系统会认为该设备仍然属于某个RAID阵列:
$ sudo mdadm --zero-superblock /dev/sda1
2.移除整个硬盘
要从RAID中移除整个硬盘,需要先将该硬盘上所有的RAID物理卷都移除。
比如,我们要将第一块硬盘sda整个移除,就需要将sda1、sda2、sda3全部标记为fail,然后将其全部移除:
图片1
mdadm: set /dev/sda3 faulty in /dev/md2
mdadm: hot removed /dev/sda3
现在,如果在支持热插拔的服务器上,你就可以将该硬盘拔出了
◆添加已有RAID物理卷
向RAID中添加设备,使用--add指令即可。
如果要添加的设备上已经创建好RAID物理卷,比如我们刚才移除的sda1、sda2、sda3设备,添加过程很简单:
$ sudo mdadm /dev/md0 --add /dev/sda1
mdadm: re-added /dev/sda1
$ sudo mdadm /dev/md1 --add /dev/sda2
mdadm: re-added /dev/sda1
$ sudo mdadm /dev/md2 --add /dev/sda3
mdadm: re-added /dev/sda1
◆更换全新硬盘
1.移除坏硬盘
假设整个sda已经无法使用,我们需要用全新的硬盘将其替换掉。首先,将sda的所有分区从RAID中移除:
$ sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1
$ sudo mdadm /dev/md1 --fail /dev/sda2 --remove /dev/sda2
$ sudo mdadm /dev/md2 --fail /dev/sda3 --remove /dev/sda3
移除后,查看一下RAID状态,看看是不是真的移除了:
图片1
我们可以看到,sda的设备已经不在RAID中了,RAID10的状态变成了3个Up设备:[_UUU]。
现在,如果是在支持热插拔的服务器上,你就可以将硬盘拔出了。
2.插入硬盘
虽然第一块硬盘从RAID中移除了,现在系统仍然可以启动。这是因为sdb变成了第一块硬盘,现在grub配置中的hd0实际上就是sdb。所以,即使第一块硬盘坏掉,在不需要更改grub配置的情况下,系统仍然能够启动。
如果你是在真实的服务器上做实验,而且服务器支持硬盘的热插拔,不需要重新启动服务器,直接将“坏”硬盘拔出,换上新硬盘即可。
由于我们是在VMware中做实验,不支持热插拔,所以要添加新硬盘的话必须关机:
$ sudo halt
关机后,在VMware中,先加入一块新硬盘,再删除原先的第一块“坏”硬盘。请注意,如果你先删除旧硬盘再加入新硬盘,VMware会把新硬盘作为SCSI0:0加入,对Linux来说也就是sda;由于这是一块全新的硬盘,上面还没有grub,所以如果作为sda的话,会导致系统无法启动。
新硬盘加好后,开机。
是的,在缺少第一块硬盘、只剩下3块好硬盘的情况下,系统的确还能够正常启动。现在,你体会到我们这个方案的优越性了吧!
系统启动后,我们来看一下现有硬盘的情况:
$ sudo fdisk -l
你应该看到,原有的3块硬盘,位置都往前移动了,原先的sdb成了现在的sda,新加入的硬盘成了sdd。(如果你是在真实服务器上,没有重新启动服务器,而使用热插拔加入新硬盘,那么新硬盘仍然是sda。)
3.新硬盘分区
为了方便,我们直接将现有硬盘的分区信息,复制到新硬盘上:
$ sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdd