Suse linux硬盘故障修复方法

现有一台Suse 12 sp2 linux服务器,两块硬盘做的raid1,其中一块硬盘告警,导致文件系统只读,此时无法写入数据,但是可以做查询,业务只涉及到查询,业务未中断。

更好硬盘,并且同步完成后,文件系统还是只读,做好相关数据备份后,重启服务器希望重新挂载分区。

但是重启后,未能从阵列卡引导操作系统,进入阵列卡发现硬盘及raid状态都正常。

使用suse linux12 sp2镜像制作U盘启动盘,u盘引导系统,选择Rescue System救援模式启动,出现大量random: init: uninitialized urandom read报错,底部停留在Starting udev…,重启服务器,在Rescue System下Boot Options输入random.trust_cpu=on systemd.random.seed=/dev/null udev.children-max=1回车启动,稍等片刻出现Starting udev…ok,但是再次卡住,再次重启服务器,增加参数nomodeset关闭显卡图形驱动,即在Rescue System救援模式下Boot Options输入random.trust_cpu=on systemd.random.seed=/dev/null udev.children-max=1 nomodeset回车,可以进入救援模式了。

进入救援模式下,尝试挂载/dev/sda2,使用命令mount /dev/sda2 /mnt,但是报错mount.bin wrong fs type,bad option,bad superblock on /dev/sda2,执行文件系统检测修复,命令e2fsck -f /dev/sda2,会自动修复文件系统损坏项,需要手动全部按y,会一直出现inode损坏的提示,需要一直按y至全部修复结束。

修复完成后可以使用mount /dev/sda2 /mnt挂载根分区到/mnt,继续绑定系统虚拟目录:
mount –bind /dev /mnt/dev
mount –bind /proc /mnt/proc
mount –bind /sys /mnt/sys
mount –bind /run /mnt/run

使用chroot进入原系统环境:
chroot /mnt

查看内核文件ls /boot/vmlinuz* /boot/initrd*,如果不存在则需要安装默认内核,恢复/boot下的vmlinuz、initrd,安装命令zypper install –force kernel-default,如果存在,则不用安装。

将grub写入整块硬盘MBR,注意是写入/dev/sda,不是/dev/sda2:
grub2-install /dev/sda

重新生成完整引导菜单,恢复正常启动:
grub2-mkconfig -o /boot/grub2/grub.cfg

至此,修复大概完成,使用exit退出chroot。

逐层卸载挂载目录:
umount -l /mnt/run
umount -l /mnt/sys
umount -l /mnt/proc
umount -l /mnt/dev
umount /mnt

使用reboot重启,拔掉U盘从硬盘启动,可正常进入suse linux系统,但是发现部分文件损坏无法使用,但是操作系统已经进去,省的重装系统,重新部署相关应用即可。