先简单了解下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`,英文输入法反向单引号
- mkinitrd /boot/initramfs.img
- 恢复/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图形模式
- 保存退出重启