熟悉系统启动流程对于我们学习Linux系统是非常有帮助的,虽然基础,但能帮助我们更加理解Linux系统的工作机制,以下以CentOS6启动流程介绍:
- 1、加载BIOS的硬件信息,获取第一个启动设备
- 2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息
- 3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 动所有的硬件设备
- 4、核心执行init程序,并获取默认的运行信息
- 5、init程序执行/etc/rc.d/rc.sysinit文件
- 6、启动核心的外挂模块
- 7、init执行运行的各个批处理文件(scripts)
- 8、init执行/etc/rc.d/rc.local
- 9、执行/bin/login程序,等待用户登录
- 10、登录之后开始以Shell控制主机
MBR(Master Boot Record)引导
MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节,BIOS找到并读取MBR到内存中。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。
GRUB(GRand Unified Bootloader)
就是MBR中的前446个字节,它的作用是要选择要启动的内核。
stage1:存放于MBR的前446Bytes,用于加载stage1.5阶段,目的是为了识别并驱动stage2(或者/boot)所在分区的文件系统;
stage1.5:存放于MBR之后的扇区,加载stage2所在分区的文件系统驱动,让stage1中的bootloader能识别stage2所在分区的文件系统;
stage2:存放于磁盘分区之上,具体存放于/boot/grub目录之下,主要用于加载内核文件(vmlinuz-VERSION-RELEASE)以及ramdisk这个临时根文件系统(initrd-VERSION-RELEASE.img或initramfs-VERSION-RELEASE.img)。
加载内核,初始化进程
通过grub加载到内核后,就在内存中解压并展开就可完成后续操作即内核自身初始化。
(1)探测可识别到的所有硬件设备
(2)加载硬件驱动程序(借助于ramdisk加载驱动)
(3)以只读方式挂载根文件系统
(4)运行用户空间的第一个应用程序:/sbin/init
设置默认运行级别:为系统运行或维护等目的而设定;0-6:7个级别
d
0:关机
1:单用户模式(root自动登录), single, 维护模式
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
默认级别: 3, 5
切换级别:init #
查看级别:runlevel ; who -r
模拟启动问题处理实验
1阶段
1阶段出问题症状:不会进入GRUB菜单,如果没有挂光盘,就直接黑屏,挂上光盘后,会直接进入安装菜单(因为GRUB主程序被破坏,检测以为系统没有安装)
我们可以用dd if=/dev/zero of=/dev/sda bs=1 count=446
去破坏MBR中的GRUB,模拟出1阶段错误
恢复步骤:
- 开机按ESC键,选择第三项进入救援模式
- 切根
- 重新生成grub
- exit;exit;然后reboot重启
1.5阶段
1.5阶段模拟破环条件:用dd if=/dev/zero of=/dev/sda bs=1 count=3000 skip=512 seek=512
来将MBR之后的扇区内容删除一些
恢复步骤同1阶段处理流程
2阶段
2.1模拟把boot目录清空: rm -rf /boot/*
首先光盘模式启动进入linux rescue救援模式。
切根、安装kernel内核
chroot /mnt/sysimage
mount /dev/sr0 /media
rpm -ivh /media/Packages/kernel-2.6.32-71.el6.i686.rpm --force
安装grub
grub-install /dev/sda
此命令可以修复1阶段、1.5阶段和2阶段
sync手动添加/boot/grub/grub.conf配置文件,如下
修复完成后,保存,退出救援模式,重启。
sync
exit
reboot
2.2模拟把grub.conf配置文件删除
2.3模拟删除/etc/fstab文件 和清空/boot目录
rm -rf /etc/fstab
rm -rf /boot/*
修复步骤:
一:开机进入救援模式
找到根对应在哪个分区(这里默认为/dev/sda2)
mount /dev/sda2 /mnt/tmp
vi /mnt/tmp/fstab
编辑完后,退出重启进入救援模式,