启动流程
CentOS 6中:
1. post 加电自检,硬件信息
2. grub stage1 ,读取默认启动设备MBR 前446 字节
3. grub stage1.5,加载分区文件系统
4. grub stage2,加载核心文件,以及驱动模块设备
5. 执行init程序,并且根据/etc/inittab获取默认信息
6. 执行/etc/rc.d/rc.sysinit初始化脚本
7. 根据使用的运行模式,运行/etc/rc(n).d/S、K开头的服务
8. 执行/etc/rc.d/rc.local脚本,里面包含自主设定的一些内容
9. Login 用户登录
启动服务脚本介绍
1./etc/init.d/ 目录下放置的是服务脚本,服务脚本的格式为:
#!/bin/bash
# chkconfig:***(哪种运行模式下开启)**(S号)**(K号)
# description:描述信息
COMMAND(执行的命令)
2.chkconfig命令
chkconfig --list 可查看所有服务在0-6运行模式下的on/off状态
chkconfig --add Server_SCRIPT 可将其加入到/etc/rc(n).d/下
chkconfig --del Server_SCRIPT 可将其从/etc/rc(n).d/下删除
chkconfig Server_SCRIPT on/off 开机时服务开启或关闭(默认对2,3,4,5模式)
chkconfig --level LEVEL Server_SCRIPT on/off
系统启动相关文件
/boot/vmlinuz-3.10.0-862.el7.x86_64(内核核心文件)
/boot/initramfs-3.10.0-862.el7.x86_64.img(与启动相关的辅助驱动模块的打包文件)
/lib/modules/3.10.0-862.el7.x86_64(与启动有关的模块)
grub引导加载程序分为三部分
1阶段:MBR的前446字节,告诉系统2阶段使用的文件系统驱动存放在何处
1.5阶段:MBR512字节后的27个扇区,找2阶段驱动所对应的需要的文件系统驱动进行加载
2阶段:加载内核需要的驱动
CentOS 6 引导程序在/boot/grub/目录下,CentOS 7 引导程序在/boot/grub2/目录下
以下的系统启动相关实验是基于CentOS 6,内核版本根据实际情况变化
实验1:/boot/initramfs-3.10.0-862.el7.x86_64.img的丢失后的恢复
rm -f /boot/initramfs-3.10.0-862.el7.x86_64.img
不重启下修复
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`(第二个`uname -r`是该条命令参数,指明当前系统版本)
若是没修复重启,则会出现如下画面:
此时需要执行如下操作:
1.进入救援模式
2.切换到真根下:
chroot /mnt/sysimage/
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
sync(同步,确保修改信息写入磁盘)
3.退出真根,重启即可恢复
实验2:/boot/vmlinuz-3.10.0-862.el7.x86_64的删除与修复
rm -f /boot/vmlinuz-3.10.0-862.el7.x86_64
此时重启系统,出现如下界面:
修复操作:
1.进入救援模式
2.看光盘是否挂载,若无怎手动挂载
3.拷贝光盘中的vmlinuz
cp /光盘挂载目录/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
sync(同步,确保修改信息写入磁盘)
4.重启即可恢复
实验3:bootloader程序grub的第1阶段(MBR的前446字节)的破坏、修复实验
情况一:在已经备份的情况下
试验前可先对MBR做备份
dd if=/dev/sda of=/app/mbr bs=1 count=512(/dev/sda表示的是引导启动的第一个设备)
破坏第1阶段
dd if=/dev/zero of=/dev/sda bs=1 count=446
重启后故障状态如下界面:(会直接进入光盘安装系统界面)
修复操作:
1.进入救援模式
2.将备份数据还原
dd if=/mnt/sysimage/app/mbr of=/dev/sda bs=1 count=446
利用如下命令可确认是否恢复:
hexdump -C /dev/sda -n 512 -v
sync(同步,确保修改信息写入磁盘)
3.重启
情况二:没有备份
破坏第1阶段
dd if=/dev/zero of=/dev/sda bs=1 count=446
若机器没重启情况下:
方法一:
grub-install /dev/sda(可修复grub的所有阶段)
方法二:
使用grub交互式命令
grub
grub> root (hd0,0) (root代表的是vmlinuz所在目录也就是boot,hd0,0表示其分区位置)
grub> setup (hd0)
grub> quit
(注意:此方法依赖于/boot/grub/目录下除了grub.conf外其他的部分文件)
若误操作重启了机器:
方法一:
进入救援模式
chroot /mnt/sysimage/
grub-install /dev/sda
sync(同步,确保修改信息写入磁盘)
退出真根,重启
方法二:
进入救援模式
grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
sync
重启
实验4:grub的1.5阶段破坏与修复
破坏第1.5阶段
dd if=/dev/zero of=/dev/sda bs=1 count=10000 skip=512 seek=512
重启后故障状态如下界面:
修复方法和破坏grub1阶段的修复方法一样
注意:在使用过grub交互式命令修复过grub1和1.5阶段后,若/boot/grub/目录下除了grub.conf其他的部分文件没有了,则会影响下一次的重新启动,会出现如下的界面:
只能使用如下方法修复:
进入救援模式
chroot /mnt/sysimage/
grub-install /dev/sda
sync(同步,确保修改信息写入磁盘)
退出真根,重启
实验5:grub的2阶段的破坏修复试验
grub的2阶段依赖于配置文件/boot/grub/grub.conf
若是启动出现如下界面:
因为/boot/grub/grub.conf配置文件中kernel行被放在了initrd行后
将/boot/grub/grub.conf删除后,重新启动,会出现如下界面:
修复操作,直接在此界面键入如下命令:
grub> kernel /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/sda2 (注意root的挂载分区,根据实际情况指定)
grub> initrd /initramfs-3.10.0-862.el7.x86_64.img
grub> boot
实验6:删除/boot/目录下所有数据,然后进行修复
rm -rf /boot/
此时重启后故障状态如下:
修复操作:
1.进入救援模式
2.chroot /mnt/sysimage/
3.挂载光盘
4.cp /光盘挂载目录/isolinux/vmlinuz /boot/
5.mkinitrd /boot/initramfs.img `uname -r`
(注意:4和5两个步骤还可以通过如下命令进行恢复:不切换根的状态下
rpm -ivh /光盘挂载目录/Packages/kernel-版本号.rpm --root=/mnt/sysimage/ --force
然后在第7步中,也添加上对应的版本号信息即可)
6.grub-install /dev/sda
7.创建grub.conf文件
cd /boot/grub/
vim grub.conf(最基本的几个信息建立即可)
default=0
timeout=5
title centos-6
kernel /vmlinuz root=/dev/sda2(注意此处根据实际分区情况填写)
initrd /initramfs.img
8.退出,进入到图形界面,选择重启即可
(需要注意的是grub.conf文件中kernel和initrd后的 / 表示的boot目录所在分区,不是系统root根)
实验:当挂载信息文件/etc/fstab被删除,以及/boot/目录下数据也被删除,如何修复
rm -f /etc/fstab
rm -rf /boot/
重启后出现如下故障图:
修复操作如下:
1.进入救援模式,但是此时救援模式会出现如下图所示信息:
点击continue后会出现找不到分区信息的提示图:
2.继续下一步,进入shell命令行
3.利用fdisk查看分区信息,blkid查看文件系统
4.建立一个新文件夹,使用mount命令,依次挂载,通过列出内容,找到根分区
5.查出根分区后,挂载,创建fstab文件,示例如下:
mount /dev/sda2 /mnt/testroot
vim /mnt/testroot/etc/fstab
/dev/sda2 / ext4 defaults 0 0
/dev/sda1 /boot ext4 defaults 0 0
/dev/sda5 swap swap defaults 0 0
6.退出,重新启动
7.接下来在执行“实验:删除/boot/目录下所有数据,然后进行修复”的所有步骤即可恢复
Centos 7的启动修复与CentOS 6 修复一样,除/boot/grub2/grub.cfg配置文件外:
可用命令grub2-mkconfig > ( 或-o)/boot/grub2/grub.cfg直接生成