这部分将了解Centos6和Centos7开机启动后的流程。
Centos6启动简要流程
1 开机BIOS自检
开机,首先加载BIOS(主板上的一块芯片)自检,检查硬件状态是否正常,对CPU、设备启动顺序、硬盘信息、内存信息、时钟信息等进行自检。当检查完毕没有问题就会根据BIOS里的设置,去读取对应的启动系统的硬盘。
2 读取MBR引导
MBR(Master Boot Record),读取启动硬盘上0柱面0磁道1扇区上的前446字节,读取引导程序。一个扇区大小是512字节,剩余的66字节用于记录磁盘的分区信息。引导程序读取后,将其加载到内存中执行,这个动作就是引导程序加载即Boot Loader,对应于Linux系统就是加载Grub信息。
3 加载GRUB菜单
加载GRUB菜单,选择启动操作系统,如下是grub.conf里的详细信息,具体参数解释如下。
(1)default=0 代表启动grub菜单中的第一个选项对应的系统,本次装的Centos6只有一个,默认启动第一个。
(2)timeout=5 代表菜单停留时间5s后自动启动,留个人员选择的时间。
(3)splashimage=(hd0,0)/grub/splash.xpm.gz grub菜单的画面对应的图片,保存在第一个硬盘的第一个分区。
(4)hiddenmenu 启动系统时不显示启动菜单选项,按照默认设置启动系统,除非用户按esc
(5)title CentOS 6 (2.6.32-696.el6.x86_64) 系统启动对应的项目名称
(6)root (hd0,0) 启动分区boot,里面包含内核文件和内核所需要的驱动文件,(hd0,0)代表第一个硬盘的第一个分区,查看就是sda1。
(7)kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=0a10496f-f76e-4a2e-9572-edf8e5d1066f rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 位于boot分区上的内核文件和一堆可选内核参数。vmlinuz-2.6.32-696.el6.x86_64为内核文件,UUID可以通过命令来查看对应设备/dev/sda2。
(8)initrd /initramfs-2.6.32-696.el6.x86_64.img 内核文件驱动文件,也在boot分区。
grub菜单也可以设置网卡名字,如果前面安装忘记改了,这里可以从eth33修改为eth0。
4 加载内核kernel和驱动程序
加载Linux内核就是根据上面grub.conf文件的设置,读取内核并进行解压缩操作,完成解压缩后屏幕输出'OK, booting the kernel'。另外还需要加载驱动程序文件,也是在grub.conf文件中设置的。
5 运行INIT进程
加载完后运行Linux的第一个进程,为INIT,如下图所示为运行的第一个程序 /sbin/init,进程号为1显示为第一个进程。
(1)读取/etc/inittab文件,设定系统运行级别(默认级别为3),后面根据运行级别来启动对应级别下的系统。
(2)读取/etc/init/rcS.conf文件,执行对应脚本 /etc/rc.d/rc.sysinit ,设置主机名,文件系统挂载,加载函数模块,欢迎信息展示等,以前是通过读取/etc/inittab文件来加载 /etc/rc.d/rc.sysinit脚本,现在修改为读取/etc/init/rcS.conf文件后加载。如下所示是脚本信息,这个特别的长以后学习Shell后可以查看下,不过可以基本看到一些操作,如设置主机名,挂载硬盘等。
启动系统后一堆的OK就是执行这个脚本后输出的结果。
(3)init进程加载内核模块
在Centos6下加载/etc/sysconfig/modules/下面的内核模块,上面Loading OpenIB kernel modules就是加载结果OK。查看我自己安装的发现暂时没有东西。
(4)读取/etc/init/rc.conf文件,执行对应的脚本 /etc/rc.d/rc 3
去/etc/rc.d/目录下查看,可以看到level0~level6的启动脚本。
查看运行级别3,可以看到开机需要启动的脚本。
(5)读取/etc/rc.local文件,设定开机自启动程序。
系统初始化后,可以把需要跟随计算机启动的命令设置在这里面。
(6)读取/etc/init/tty.conf文件,启动mingetty 3进程,显示登陆界面。
Centos7启动简要流程
前面四个跟Centos6一样,也是相继完成开机BIOS自检、读取MBR引导、加载Grub菜单和加载内核kernel。接下来的流程与Centos6不一样。
运行systemd进程
与Centos6不一样,systemd进程为第一个进程。
(1)加载initrd.target文件,里面包含挂载fstab文件系统
(2)读取default.target文件,设置target模式及脚本
查看default.target,发现指向了multi-user.target。
可以看出multi-user.target对应就是运行级别3,在Centos7中用target模式来代替运行级别,跟Centos6有对应关系。
(3)读取sysinit.target文件,初始化系统及加载basic.target
加载完multi-user.target后,开始读取sysinit.target文件,初始化系统。
(4)systemd启动multi-user.target下的服务程序,即对应target模式下的程序,程序目录为/etc/systemd/system和/usr/lib/systemd/system,这个类似Centos6的读取etc/rc.d然后执行对应的运行级别下的程序。
(5)读取/etc/rc.local文件,设定开机自启动程序
(6)读取getty.target文件,启动mingtty进程
以上为Centos6和Centos7开机的流程简单了解。