破坏centos6上的引导程序导致开机异常后的恢复实验

先简单了解下centos6的启动过程:

1. post,开机加电自检

2. grub,三个阶段引导系统启动

  • mbr 446 ,第一块硬盘的前446字节,stage1
  • stage1.5 ,存放在mbr后面的27 sectors(磁盘分区)中
  • /boot/grub,stage2,在这里存放grub.conf

3. /boot/vmlinuz,找到内核

4. /boot/initramfs,提供系统启动的必要驱动文件

  • /boot/initramfs-2.6.32-754.el6.x86_64.img提供启动Linux内核时加载系统必要的一些驱动文件;复制一份到其他目录做实验,加.gz后缀,gunzip解包;cpio -idv <解压缩,里面有各种文件系统的驱动文件
  • ramdisk伪根系统提供操作系统必要的各种文件,在操作系统启动的时候,它要通过grub找到vmlinux内核文件,内核要加载到内存中,进而挂载整个操作系统的根分区,但是文件系统的文件放在根目录下,为了解决这个问题,用到了initramfs-2.6.32-754.el6.x86_64.img
  • 在操作系统启动的时候,initramfs-2.6.32-754.el6.x86_64.img(centos6)可以进入/boot下找到vmlinux文件,同时它也可以找到各种文件系统的驱动文件,进而识别,实现挂根;注意在centos5上它叫/boot/initrd-uname.img(rd:ramdisk)
  • ramfs和ramrd都是模拟成伪文件系统,一个模拟成分区,一个是硬盘,访问硬盘效率低(因为还要访问文件系统),所以6上直接模拟成文件系统
  • 所以initramfs如果破坏,会导致根无法挂载,系统无法启动

5. mount /,挂载系统根目录

6. /sbin /init/etc/inittab N,选择系统运行模式

7. /etc/rc.d/rc.sysinit(初始化脚本:初始化主机名、swap分区、逻辑卷等等)

8. /etc/rcN.d/K*,/etc/rcN.d/S*,根据运行模式来K关闭/S开启服务

9. /etc/rc.local,最后启动的服务,,扫尾服务,可以把想启动的自定义服务放在这里

10.mingetty login,登录界面

11.windows,有图形界面且运行模式是图形模式的话,会进入图形窗口

破坏性试验,毁前先快照,省的再重装


  • 关闭防火墙 systemctl disable firewall(centos7)
  • chkconfig iptables off(centos6)
  • 关闭SELinux策略vim /etc/sysconfig/selinux
    • SELINUX=disabled 

1. 破坏grub第一阶段

  • 先备份,dd if=/dev/sda of=/root/grubstage1 bs=1 count=446
    • 破坏mbr,dd if=/dev/zero of=/dev/sda bs=1 count=446,重启发现系统在寻找其它可用设备来启动系统,没有其它可用设备的我们还是光盘救援模式吧
    • 救援模式下,dd if=/mnt/sysimage/root/grubstage1 of=/dev/sda
    • reboot
  • 没有备份,进入救援模式
    • 使用grub-install工具,该工具恢复的是所有grub
    • 切根,chroot /mnt/sysimage,之后 grub-install /dev/sda
    • reboot
  • 无备份,进入救援模式使用grub命令恢复,
    • grub
    • root (hd0,0),括号里的代表root的根,即root所在分区(不是操作系统的根),sda1,是第一个硬盘的第一个分区
    • setup (hd0)
    • quit
    • sync,多按几下,将还在内存中的内容写到硬盘上,记得这个操作,要不等以后因为没敲这个命令导致某些库库文件损坏就很麻烦
    • sync
    • sync
    • exit
    • reboot
  • 无备份,不用救援,直接在命令行输入,不过要保证/boot/grub中有备份文件
    • grub
    • root (hd0,0),括号里的代表root的根,即root所在分区(不是操作系统的根),sda1,是第一个硬盘的第一个分区
    • setup (hd0)
    • quit
    • reboot

2. 破坏1.5阶段,与破坏1阶段不同,1.5被破坏后不会寻找其他可用设备

  • 先破坏,dd if=/dev/zero of=/dev/sda bs=1 count=12020 seek=512,这里跳过目标文件的前512字节防止破坏mbr是为了清晰展示单破坏1.5阶段
  • 救援模式
  • chroot /mnt/sysimage
  • grub-install /dev/sda
  • exit
  • reboot

3. grub2阶段破坏修复

  • 删除/boot/grub/grub.conf
    • 重启敲命令,kernel /vmlinuz。。。 root=/dev/sda2,省略号部分可以Tab补全
    • initrd /initramfs-.。。。.img
    • boot
    • 不过这种方法只能保证本次能进入,要想永久有效,还是要重写grub.conf文件,重写内容在下面
  • 删除/boot/grub/目录,error15,修复,救援模式
    • chroot /mnt/sysimage
    • grub-install /dev/sda
    • 手写/boot/grub/grub.conf
      • vim /boot/grub/grub.conf
      • default 0,可选
      • timeout 5,可选
      • title huanglinux,起名
      • root (hd0,0),第一块硬盘第一个分区
      • kernel /vmlinuz。。。 root=/dev/sda2
      • initrfd /initramfs-。。。.img(PS:!/boot/vmlinuz /boot/initramfs操作可以自动填写这两项,自己再排列一下格式就行)
      • 保存,退出,sync,sync,sync,重启
  • 删除/boot目录,恢复,此时没有了vm内核文件和initramfs文件,error15,恢复
    • 救援模式,先恢复内核文件和initramfs文件,再恢复grub.conf文件
    • chroot切根
    • 恢复内核文件vmlinuz
      • 挂光盘,把光盘中的/isolinux/vmlinuz拷贝到 /boot中
    • 恢复initramfs,重新创建
      • mkinitrd /boot/initramfs.img `unmae -r`,英文输入法反向单引号
    • 恢复/boot/grub
      • grub-install /dev/sda
      • 重写/boot/grub/grub.conf
        • default 0
        • timeout 5
        • title huanglinux
        • root (hd0,0)
        • kernerl /vmlinuz root=/dev/sda2
        • initrd /initramfs.img
    • 保存重启

4. 学会使用1运行模式

忘记root密码

  • 在开机菜单界面按任意键,看到菜单
  • 按a,输入s|S|1|single,输入一个选项即可
  • 进入后修改密码即可

系统一直重启,可能是运行模式此时是6模式

  • 同上使用1模式进入系统
  • 修改/etc/inittab中id后的数字为3字符模式或5图形模式
  • 保存退出重启

猜你喜欢

转载自blog.csdn.net/qq_39155877/article/details/82560025