centos6系统的启动流程
centos6系统启动流程
启动概要
关于centos6的系统启动流程,我们从通电开始大致探讨
首先我们按下电源键,然后计算机硬件会读取bios来加载硬件设备信息进行对计算机硬件的检测这一过程就是计算机启动的第一步,称为计算机的加电自检(post),然后bios列出所有可以启动的装置供用户进行选择,一般情况下默认是硬盘启动,选择硬盘启动后第一步加载mbr并启动boot loader来识别并加载系统的核心文件,我们系统的内核就是在这一步加载完成的,最后启动init来准备软件运行环境,其中包括网络配置,文件系统格式等其他服务,至此,我们的系统基本启动完毕。接下来我们来按照顺序分为四大步来更深入一步的探讨centos6系统
一.加电自检
按下电源键后计算机的CMOS芯片开始通电,然后其上的BIOS程序根据CMOS上的配置信息读取其他硬件设备的信息并检测是否能正常运行,检测完毕后将这些硬件初始化
二.选择启动装置,加载MBR
在硬件初始化后BIOS会根据启动顺序的设定,依次扫描各引导设备(可能是光盘,硬盘,网络等等),然后默认选则第一个具有引导程序的设备进行启动不过我们可以在开机的加载界面(如下图所示)按F2来进入BIOS选则我们想要启动的引导设备
这也是BIOS除了检测硬件外的第二个功能,选则我们要启动的设备。在我们选则设备后BIOS会读取该设备上的MBR(存储设备的前512字节,其中446位启动信息,64位分区表和2位结束字符),为下一步加载Boot Loader做准备
三.Boot Loader
Boot Loader的主要功能就是去识别加载操作系统中的核心文件并提交到内存中运行,进而启动操作系统。Boot Loader有很多种,而我们的centos6中使用的是grub。grub分为三个阶段,其中第1阶段的数据存在MBR的前446字节中,第1.5阶段的数据位于/boot的磁盘分区中,第2阶段的数据位于/boot/grub/grub.conf.
以下是/boot/grub/grub.conf文件的内容
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-696.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=20d4ab9c-8374-4862-a3c3-ed650a224307 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img
-
第1阶段
第1阶段BIOS读取MBR,获取grub的第一部分数据,这一阶段用来引导后续的grub,并在这一阶段依据当前磁盘的文件系统来判断后续启动过程中应为什么文件系统。
-
第1.5阶段
第1.5阶段根据第1阶段判断的文件系统类型来加载对应文件系统的驱动,为第2阶段加载核心文件做铺垫。其中第1.5阶段的驱动文件存与/boot/grub目录下,每个以“1_5”结尾的都是各类型文件系统对应的驱动,也因此称为1.5阶段
-
第2阶段
由于在这个阶段为止,计算机仅有文件系统的驱动程序,没有磁盘的驱动,所以没有办法挂载,也就没有办法进一步的读取磁盘中的数据,而我们的许多配置文件,驱动都在磁盘上,因此计算机无法启动。而计算机的解决方法是通过int 13 中断来启用一个临时的根文件系统。所以第2阶段的第一步就是读取配置文件/boot/grub/grub.conf,并依据该文件加载内核文件以及一个临时的根文件系统。在这个阶段计算机首先将内核文件解压并读入内存,再将一个临时的根文件系统解压并读入内存这样我们在内存中就有了一个临时的根文件系统,这样我们就可以继而加载磁盘等驱动程序。在加载完这些必要的文件后,内存释放这个临时的根文件系统,并以只读的方式挂载我们真正的根。到此为止,grub的工作结束。
四.启动init
在挂载完根后执行/sbin/init文件,这个文件是所有进程的父进程,它会从grub接管系统的控制权,然后读取/etc/inittab,/etc/init/*.conf,这些是它的配置文件,其中/etc/inittab告诉计算机要以哪一个级别启动系统(以下是系统运行的七个级别)
0-halt 关机
1-single user mode 单用户维护模式
2-multi-user,without NFS 无网络功能的文本模式
3-full-muliti-user mode 完整的文本模式
4-unused 系统保留,未使用
5-X11 启动图形界面
6-reboot 重启
装有图形界面时一般默认级别为5,未装图形界面默认为3
之后读取并执行/etc/rc.d/rc.sysinit来将系统初始化其中包括主机名,网络配置,文件系统等,当/etc/rc.d/rc.sysinit执行完后计算机系统基本启动完毕。