最近现场遇到这样的情况反馈

除了通过cat /proc/mdstat 命令查看硬盘同步情况之外 ,是否还有其他的方法可以检查下同步完成之后的 sdb 硬盘是否有系统启动信息,是否有boot等启动文件,可以保证通过sdb盘可以启动系统,
操作系统经常出现更换过系统盘之后 虽然 /proc/mdstat 显示同步成功了 ,但是实际sdb系统盘根本没有同步成功启动系统需要的相关文件,导致下次如果
同一台机器的另外一个sda 硬盘坏了之后,系统直接就挂了,只能重装系统的现象。


虽然我个人是反对操作系统做软raid的,但是既然以前的系统安装了软raid,而且现在出现了问题,那我们还是来解决下,上述问题 意思大概就是  两块系统盘做了软 raid1(镜像卷,互为备份),当其中一块坏掉,把这块坏掉 的硬盘拔出,插入一块容量一样大小的硬盘进去修复软raid,待系统修复完成,观察一切现象正常的时候,此时我们再把原先正常的一块盘把出来,留下刚才新插入的一块硬盘,重启操作系统,发现系统已经无法启动,那么我们第一件事就是模拟出这样的现象出来(模拟事故现象也是一项很重要的能力),才能解决问题

1、先看下正常情况下软raid1的情况


记一次软raid1的修复过程_第1张图片


记一次软raid1的修复过程_第2张图片


2、模拟硬盘出现故障,第二块硬盘sdb坏了

记一次软raid1的修复过程_第3张图片


记一次软raid1的修复过程_第4张图片

记一次软raid1的修复过程_第5张图片


记一次软raid1的修复过程_第6张图片


记一次软raid1的修复过程_第7张图片


移除第二块硬盘,剩下一块硬盘,启动系统,观察软raid状态,状态整体和上面差不多

说明系统自身raid没有问题,挂掉任意一块盘都可以正常启动操作系统



3、  此时我们增加一块新的硬盘,启动系统做相关测试

记一次软raid1的修复过程_第8张图片


记一次软raid1的修复过程_第9张图片


记一次软raid1的修复过程_第10张图片

sfdisk-d /dev/sda | sfdisk -f /dev/sdb     执行这条命令   sda代表第一块盘(正常的硬盘) sdb代表第二块盘   (重新更换的硬盘以实际识别出来的盘符为准)


记一次软raid1的修复过程_第11张图片


记一次软raid1的修复过程_第12张图片

[root@example ~]# partprobe /dev/sdb     让内核重载分区表

[root@example~]# mdadm /dev/md0  -a /dev/sdb2  把第二块盘加入raid1


记一次软raid1的修复过程_第13张图片


wKioL1eXBBORv1JgAACAHRSk6gs054.png-wh_50


可以看到数据已经在开始重构,等待系统修复完成,拔掉第一块好的硬盘,只留下第二块新插入的硬盘重新引导操作系统,看系统是否能正常启动


记一次软raid1的修复过程_第14张图片


记一次软raid1的修复过程_第15张图片


记一次软raid1的修复过程_第16张图片


可以看到该系统无法正常启动,而是出现了安装的界面


记一次软raid1的修复过程_第17张图片




可以看到这里的分区是从1开始,而我们操作系统的引导信息,引导就是0-1这个磁道里的(前512字节),因此只要将第一块硬盘的前512字节信息复制到第二块硬盘即可

执行如下命令

[root@example~]# dd if=/dev/sda of=/dev/sdb bs=512 count=1  

wKiom1eXBM3BgqreAAB8KlPT8zQ339.png-wh_50


我们再次观察操作系统的启动(同样第一块盘还是移除的状态),看是否能正常启动

记一次软raid1的修复过程_第18张图片

可以看到已经可以正常启动了


总结:软raid1修复步骤(这里指的是坏了一块硬盘,新插入一块硬盘的情况)


1、sfdisk-d /dev/sda | sfdisk -f /dev/sdb   拷贝正常的那块硬盘分区信息到新的硬盘

2、partprobe /dev/sdb     让内核重载分区表

3、mdadm /dev/md0  -a /dev/sdb2  把第二块盘加入raid1

4、dd if=/dev/sda of=/dev/sdb bs=512 count=1 复制操作系统的前512字节的引导程序到新的硬盘