故障描述:同事在给一台服务器做drbd时,使用dd命令,手抖了下结果将/dev/sda1清掉了!然后系统就奔溃了…


解决思路:由于boot分区被破坏导致MBR以及grub均被损坏,所以需要重新格式化该分区,并且重新安装grub以及kernel(使用rescue模式修复)


故障模拟:

a.破坏/boot分区(危险!谨慎操作!):

dd if=/dev/zero of=/dev/sda1 bs=100M count=1

Linux引导分区修复_第1张图片

b.使用系统光盘进入rescue模式

Linux引导分区修复_第2张图片

一路回车

Linux引导分区修复_第3张图片

Linux引导分区修复_第4张图片

c.切换到原来的系统分区:

chroot /mnt/sysp_w_picpath

Linux引导分区修复_第5张图片

d.格式化boot分区并修改fstab

由于boot分区已被破坏,所以文件系统也出现了问题,需要重新格式化:

mkfs.ext4 /dev/sda1

由于系统默认使用uuid挂载,重新格式化后uuid会变化,所以需要改为使用分区挂载

vi /etc/fstab

/dev/sda1     /boot      ext4    defaults    1  2

Linux引导分区修复_第6张图片

记录下根分区的标识,然后挂载boot分区:

mount -a

e.挂载系统光盘(原来系统版本)

mount /dev/cdrom /mnt

f.安装grub和kernel

cd /mnt/Packages

rpm -ivh --root=/ --force kernel-2.6* #指定强制安装到当前根目录,由于已经使用chroot切换到原来系统,所以此处相当于安装到原来系统根目录

rpm -ivh --root=/ --force grub-*  

grub-install /dev/sda  #将grub引导安装到sda(MBR)

Linux引导分区修复_第7张图片

exit  

reboot #重启,使用本地硬盘启动,进入grub>模式

Linux引导分区修复_第8张图片

g.执行三板斧:(支持tab补齐)

root (hd0,0)  #root表示grub设置的根路径(和系统根路径不一样),hd0表示grub识别到的第一个硬盘,最后一个0表示该硬盘的第一个分区,即/boot

kernel /vmxxxxxx  root=/dev/mapper/vg_test2-lv_root #指定内核和系统根分区

initrd /inxxxxxxx.img  #加载initrd驱动

boot #启动

Linux引导分区修复_第9张图片

由于selinux原因,以上步骤可能要再执行一遍

Linux引导分区修复_第10张图片

Linux引导分区修复_第11张图片

h.使用备份恢复grub.conf文件或者手动编辑/boot/grub/grub.conf

Linux引导分区修复_第12张图片


问题小结:

其实很多系统故障都是由于操作不当引起的,作为系统管理者,执行命令前一定要再三确认(尤其是使用root账号操作时),因为Linux下操作基本不可逆的,一旦操作不当,后果将不堪设想。即使能够修复,那也使得该服务器下线,甚至可能严重影响到公司业务! 除了操作方面需要注意外,也可以考虑自动化部署,尽量减少人为操作。