标签:CentOS 5和6启动流程 CentOS 7启动流程
一、CenOS 5和6启动流程:CentOS启动流程总体来说有以下步骤:
POST --> BootSequence(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs(只读)
--> switchroot --> init(CentOS 7为systemd) --> /etc/inittab --> 读取默认运行级别 -->
运行系统初始化脚本, 完成系统初始化 --> 关闭对应级别下需要关闭的服务, 启动需要启动的服务 --> 设置登录终端
系统启动的第一个步骤, 打开电源, 这时候主板上的BIOS芯片中的CMOS就会对整个硬件进行自检, 如果自检通过就会进入到下一个步骤, 引导加载次序.
这一步还是跟BIOS有关, 自检通过, BIOS按次序查找各引导设备, 第一个有引导程序的设备即为本次启动用到的设备.
bootloader是一个程序, 其作用是提供一个菜单, 允许用户选择要启动的系统或者不同版本的内核, 然后把用户选定的内核或者系统装载到内存特定的空间中, 解压、展开后将系统的控制权移交给内核.
目前常用的bootloader:
MBR(主引导记录), 存放在硬盘的0扇区, 总共有512 Bytes, 其中446 Bytes装的是bootloader, 64 Bytes为分区表, 最后2 Bytes为MBR的有效性标识(55AA)
这一步中, 主要由以下几个步骤:
内核要识别硬盘上的分区, 必须要有硬盘的驱动才行, 可是Linux的内核为了保持足够轻便, 硬件驱动并没有装载至内核中, 而是通过modules的形式插入内核中的, 所以这时候需要调用ramdisk文件. ramdisk中会存有装系统时当前主机的硬盘驱动, 通过ramdisk文件将硬盘驱动装载上, 使得内核可以加载各分区, 从而加载到各个硬件驱动, 然后在将控制权交回给内核.
init启动后会从其配置文件中读取运行级别, 总共有七个级别, 如下所示:
init - 用户切换级别
用法: init \<\0~\6\>
命令1: runlevel
命令2: who -r
chkconfig - 查看服务在所有级别的启动或关闭设定情形
查看: chkconfig [--list] [name]
添加: chkconfig --add name
删除: chkconfig --del name
修改指定级别的链接类型: chkconfig [--level levels] name \<\on|off|reset\>
# --level levels: 指定要设定的级别, 省略表示2345
NOTE: 正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,只是指向了/etc/rc.d/rc.local脚本,因此,不便或不需要写为服务的脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可以直接放置于/etc/rc.d/rc.local文件中
CentOS 5和6中的系统初始化脚本位于/etc/rc.d/rc.sysinit, 其主要执行以下工作:
此目录下定义的是对应级别下的各种服务脚本, 通过ls查看, 内如如下:
[root@localhost ~]# ls /etc/rc.d/rc3.d/
K10saslauthd K50netconsole K89rdisc S08ip6tables S10network S12rsyslog S25netfs S55sshd S90crond
K15svnserve K87restorecond S02lvm2-monitor S08iptables S11auditd S25blk-availability S26udev-post S80postfix S99local
其中S代表开机要启动的服务, K开头的是关机要执行的服务. rc#.d的#代表运行级别.
这一步就是执行/bin/login程序, 等待用户登录了.
CentOS 7启动流程与CentOS 5和6差不多, 只不过init程序改为了systemd, 下面详细解释下Systemd后的启动流程.
这一步主要是挂载/etc/fstab中的文件系统, 挂载完成后切换到根目录.
CentOS 7没有以前版本的运行级别概念, 但是为了向下兼容, 它对每个运行级别都有一个对应的软件界指向, 如下所示:
level 0 ==> runlevel0.target, poweroff.target
level 1 ==> runlevel1.target, rescue.target
level 2 ==> runlevel2.target, multi-user.target
level 3 ==> runlevel3.target, multi-user.target
level 4 ==> runlevel4.target, multi-user.target
level 5 ==> runlevel5.target, graphical.target
level 6 ==> runlevel6.target, reboot.target
默认启动级别由/etc/systemd/system/default.target文件指定, 这是一个软连接文件, 这个连接指向的文件即为启动时的默认级别.
[root@zabbix bin]# ls -l /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37 Jul 5 2017 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
初始化系统及basic.target准备操作系统, 在CentOS6上为rc.sysinit程序.
最后启动相关服务, 并设置登录终端.
标签:CentOS 5和6启动流程 CentOS 7启动流程
原文地址:http://blog.51cto.com/13501622/2072644