1. 二、修复linux系统
思路:恢复fstab文件找到分区à修复引导里的内核文件à修复grub–>还原init相关文件
· 1.进入修复模式
通过RHEL5光盘引导进入安装会话,输入linux rescue或按F5键进入rescue修复模式。
进入修复模式之后,系统会提示选择语言Language和键盘类型Keyboard,直接回车就行了。
系统会再次询问是否配置网络,选择No,因为修复系统不需要用到网络。。然后会提示如下:
Rescue程序将查找当前硬盘上是否有已安装的linux系统,如果找到了的话,就自动挂载到/mnt/sysp_w_picpath下。选择”Continue”继续,rescue程序会搜索硬盘是否存在已安装过的linux和硬盘分区,最终结果如下图:
搜索结果显示,找不到Linux分区,因为/etc/fstab文件被删除了,所以导致系统无法读取Linux分区,但是如果找到了,就将它挂到/mnt/sysp_w_picpath里面,可以读写。选择”OK”确定之后,系统会进入到修复模式的shell下。
· 2.还原fstab文件
根据上面步骤得知,rescue程序无法找到硬盘分区,所以现在要做的事情就是恢复linux分区——也就是fstab文件(这个fstab文件在删除之前,有做过备份/etc/fstab.bak)。
#fdisk -l 查看磁盘分区
根据fdisk –l输出,得到系统分区有两个/dev/sda1和/dev/sda2。可使用e2label命令查看这两个分区的卷标,
由上图可得知/dev/sda1是/boot分区,而/dev/sda2无法查看,因为sda2是LVM分区。
使用命令激活LVM分区#lvm vgchange-ay 这个命令的作用就是告诉系统建立相关的device-mapper,这样就可以看到/dev下建立了/dev/mapper/VGname-LVname和/dev/VGname/LVname的设备文件和链接文件.
使用ls /dev/mapper命令可以看到VolGroup00-LogVol00(就是/根分区)和VolGroup00-LogVol01(就是swap分区)
接下来,要挂载/根分区,并恢复fstab文件。
#mkdir test ---建立一个空目录用于挂载分区
#mount -t ext3 /dev/VolGroup00/LogVol00 /test ---挂载包含根分区的LVM分区到test目录下
将系统原来的/根分区挂载到/test目录之后,就可以还原fstab.bak到fstab了!
#cp /test/etc/fstab.bak/test/etc/fstab ----还原fstab文件
#reboot ----重启系统
· 3.修复内核和grub
重启之后,按ESC键选择CDROM引导,输入linux rescue再次进入到修复模式。
此时再次进入到修复模式时,rescue程序将会找到fstab文件,也就是会找到linux分区!并且把损坏的原linux系统挂载到/mnt/sysp_w_picpath下。并且rescue程序会提示你,可以使用#chroot(changeroot修改根目录)修改根目录,进入到原系统中。如下图所示:
选择OK之后,系统已经全部挂载到了/mnt/sysp_w_picpath,如果想进去,敲入#chroot/mnt/sysp_w_picpath,修改根目录为/mnt/sysp_w_picpath,使用ls命令可以查看原系统里的文件和目录。使用exit可以退回rescue程序下,再次使用ls命令可以比较一下区别。
一般把处于resuce模式的系统称为伪系统,把#chroot/mnt/sysp_w_picpath后看到的称为真正的系统。
接下来要修复内核文件:
#exit ---退回到resecu模式下
#mount /dev/hdc /mnt/source ---挂载光驱cdrom到/mnt/source目录
#rpm -ivh/mnt/source/Server/kernel-2.6.18-164.e15.i686.rpm--root=/mnt/sysp_w_picpath/ --force
(需要修复的三个内核文件在系统盘server目录下kernel-2.6.18.rpm软件包里,所以要挂载光盘之后并安装kernel软件包)
此时,内核已修复完成!再继续修复grub程序。。。
#chroot /mnt/sysp_w_picpath 进入到已损坏的linux系统中
#grub-install /dev/sda 安装grub程序到/dev/sda
#ls /boot/grub 查看grub目录下是否存在grub.conf文件。如果没有就手动编辑一个。
#vim /boot/grub/grub.conf
手动编辑grub.conf配置文件内容如下:
保存退出。。。grub修复完成!
4、修复/etc/inittab等文件
#rpm -qf/etc/inittab 查询包含inittab文件的软件包
#rpm -qf /etc/rc.d/rc.sysinit 查询包含rc.sysinit文件的软件包
#rpm -qf /etc/rc.d/rc.local 查询包含rc.local文件的软件包
经过rpm –qf查询命令可得知,要修复的文件都包含在initscripts-8.45.rpm这个软件包里面。
下一步,要把文件从这个RPM里面分离出来,并还原到/etc目录下.
#exit
#cp/mnt/source/Server/initscripts-8.45.30-2.el5.i386.rpm /mnt/sysp_w_picpath/tmp
#chroot /mnt/sysp_w_picpath
#cd tmp/
#ls
#rpm2cpio initscripts-8.45.30-2.el5.i386.rpm |cpio-imd 解压软件包到当前目录
#ls 两个ls命令注意比较区别
#cd etc/
#ls
#cp inittab /etc/
#cp rc.sysinit /etc/rc.d/
#cp rc.local /etc/rc.d/
最后只需要reboot就可以正常进入到linux系统了!!!! OVER!
总结:
linux grub恢复步骤:
1、先确认MBR分区正常:如果启动系统后能出现"grub>"说明MBR 分区正常。及grub第一阶段正常
2、在grub提示符下操作:
grub> root (hd0,0) ##指定内核所在的分区是那一个,一般为(hd0,0)
grub> kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/volGroup-lv_root
## 指定系统的内核文件vmlinuz-2.3.654.x86_64,以及主机的根分区root=/dev/sda3,一般按TAB键可以补全,这里特别注意的是主机的根分区。一般系统在分区的时候一定是先分boot分区、home等 最后再分一个 / 分区,因此这里一定要注意此分区的写法,如果无法无法确定此分区,可以通过放入系统光盘,进入拯救模式下:
bash-4.1# fdisk -l
bash-4.1# e2label /dev/sda1 查看卷标,如果分区为lvm则如下
bash-4.1# lvs /vgchange -ay 加载lvm
bash-4.1# ls /dev/mepper/ 得到系统的根分区
bash-4.1# blkid /dev/sda1 查看sda1分区的uuid,因为6以后的系统都是通过UUID来挂载分区的
grub> initrd /initramfs--2.6.32-642.el6.x86_64.img 指定ramdis文件
grub> boot启动
正常清况下就可以启来。但是大部份是不正常情况因此主要操作如下
重点:
3、进入光盘的拯救模式:
bash-4.1# fdisk -l
bash-4.1# e2label /dev/sda1--3
bash-4.1# ls /dev/mepper
bash-4.1# lvs /vgchage -ay
bash-4.1# blkid /dev/sda1
##以上几个操作主机是获取分区信息,UUID信息
4、修复 /etc/fstab文件;通过上面几步获取到的根分区信息将其挂载
bash-4.1# mount -t ext4 /dev/mapper/VolGroup-lv_root /mnt/test
bash-4.1# cd /mnt/test ##这个test目录就是你问题主机的根分区,所有内容尽收眼底。此时你就有了两个操作系统目录。一个为当前光盘系统的目录,一个为真实系统的目录。操作理念为缺什么就从光盘里copy一份,但要注意位置要对应
bash-4.1# vi /mnt/test/etc/fstab ##同样要根据上面步骤获取信息
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=74rsd-654e-782b-euff /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_home /home ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
5、修复/boot/grub/grub.conf
bash-4.1# vi /mnt/test/boot/grub.conf
default=0
timeout=15
title CentOS 6 release
root hd0,0
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/volGroup-lv_root
initrd /initramfs-2.6.32.642.el6.x86_64
6、copy内核文件以及ramdisk文件
bash-4.1# \cp -rfP /boot/grub/mlinuz-2.6.32-642.el6.x86_64 initramfs-2.6.32.642.el6.x86_64 /mnt/test/boot/
或者:
bash-4.1# grub-install --root-directory=/mnt/sysp_w_picpaths /dev/sda3
6、使用chroot来测试以上操作是否正确
bash-4.1# umount /mnt/test
bash-4.1# chroot /mnt/sysp_w_picpath
#如果不成功,先重启系统,并再一次进入光盘拯救模式,执行chroot /mnt/sysp_w_picpath 还不行,则根据提示缺少什么文件就将光盘中的对应的文件copy到持载目录 “mount /dev/mapper/VolGroup-lv_root /mnt/test”下对应的目录中。例如“no file /bin/sh"这样的提示时可以通过:ldd /bin/sh 这个命令查看这个文件所依赖的库文件在什么地方,将光盘中的库文件copy到对应的/mnt/test/下对应的目录即可。
7、修复/etc/inittab等文件
#rpm -qf /etc/inittab 查询包含inittab文件的软件包
#rpm -qf /etc/rc.d/rc.sysinit 查询包含rc.sysinit文件的软件包
#rpm -qf /etc/rc.d/rc.local 查询包含rc.local文件的软件包
经过rpm –qf查询命令可得知,要修复的文件都包含在initscripts-8.45.rpm这个软件包里面。
下一步,要把文件从这个RPM里面分离出来,并还原到/etc目录下.
#exit
#cp /mnt/source/Server/initscripts-8.45.30-2.el5.i386.rpm /mnt/sysp_w_picpath/tmp
#chroot /mnt/sysp_w_picpath
#rpm2cpio initscripts-8.45.30-2.el5.i386.rpm |cpio -imd 解压软件包到当前目录
#cd etc/
#ls
#cp inittab /etc/
#cp rc.sysinit /etc/rc.d/
#cp rc.local /etc/rc.d/
这样90%就可以恢复问题主机系统了。
转载于:https://blog.51cto.com/allen03301/1881061