故障描述:同事在给一台服务器做drbd时,使用dd命令,手抖了下结果将/dev/sda1清掉了!然后系统就奔溃了…
解决思路:由于boot分区被破坏导致MBR以及grub均被损坏,所以需要重新格式化该分区,并且重新安装grub以及kernel(使用rescue模式修复)
故障模拟:
a.破坏/boot分区(危险!谨慎操作!):
dd if=/dev/zero of=/dev/sda1 bs=100M count=1
b.使用系统光盘进入rescue模式
一路回车
c.切换到原来的系统分区:
chroot /mnt/sysp_w_picpath
d.格式化boot分区并修改fstab
由于boot分区已被破坏,所以文件系统也出现了问题,需要重新格式化:
mkfs.ext4 /dev/sda1
由于系统默认使用uuid挂载,重新格式化后uuid会变化,所以需要改为使用分区挂载
vi /etc/fstab
/dev/sda1 /boot ext4 defaults 1 2
记录下根分区的标识,然后挂载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)
exit
reboot #重启,使用本地硬盘启动,进入grub>模式
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 #启动
由于selinux原因,以上步骤可能要再执行一遍
h.使用备份恢复grub.conf文件或者手动编辑/boot/grub/grub.conf
问题小结:
其实很多系统故障都是由于操作不当引起的,作为系统管理者,执行命令前一定要再三确认(尤其是使用root账号操作时),因为Linux下操作基本不可逆的,一旦操作不当,后果将不堪设想。即使能够修复,那也使得该服务器下线,甚至可能严重影响到公司业务! 除了操作方面需要注意外,也可以考虑自动化部署,尽量减少人为操作。
转载于:https://blog.51cto.com/jackzhu/1282763