启动流程
POST:
Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、 串并行接口、键盘、 CD-ROM光驱等硬件情况的检测。
ROM: BIOS, Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、 开机加电自检程序和系统启动自举程序等。
RAM: CMOS互补金属氧化物半导体,保存各项参数的设定
按次序查找引导设备,第一个有引导程序的设备为本次启动设备
bootloader: 引导加载器,引导程序(因系统而异)
windows: ntloader,仅是启动OS
Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把
系统控制权移交给内核
LILO: LInux LOader
GRUB: GRand Unified Bootloader(centos5之后)
GRUB 0.X: GRUB Legacy, GRUB2
磁盘:
MBR:
446: bootloader(446字节可寻找到bootloader所在位置), 64: 分区表, 2: 55AA
GRUB:
primary boot loader : 1st stage(加载bootloader,磁盘第1个512字节中), 1.5 stage(boot文件系统,磁盘中第2个512字节中)
secondary boot loader : 2nd stage,分区文件
kernel:
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序(可能借助于ramdisk加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序: /sbin/init
init程序的类型:
SysV: init, CentOS 5之前(全部按顺序启动)
配置文件: /etc/inittab(定义需要加载的驱动,脚本)
Upstart: init,CentOS 6(无依赖同时启动,有依赖按顺序启动)
配置文件: /etc/inittab(定义默认的启动模式常用的位字符界面或者图像界面), /etc/init/*.conf(定义需要加载的驱动,脚本)
Systemd: systemd, CentOS 7(全部同时启动,当用户使用服务时才检查依赖的文件有没有启动)
配置文件: /usr/lib/systemd/system(定义需要加载的驱动,脚本)
/etc/systemd/system(定义需要加载的驱动,脚本)
ramdisk:
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
ramdisk –> ramfs 提高速度
CentOS 5: initrd(内存模拟磁盘设备), 工具程序: mkinitrd
CentOS 6: initramfs(内存模拟的文件系统), 工具程序: mkinitrd, dracut
系统初始化:
POST –> BootSequence (BIOS) –>
Bootloader(MBR) –> kernel(ramdisk(加载根)) –> rootfs(只读) —
> init( systemd)
/sbin/init CentOS6 之前
运行级别:为系统运行或维护等目的而设定; 0-6: 7个级别
0:关机
1:单用户模式(root自动登录), single, 维护模式
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
默认级别: 3, 5
切换级别: init #
查看级别: runlevel ; who -r
init初始化
init读取其初始化文件: /etc/inittab
初始运行级别(RUN LEVEL)
系统初始化脚本
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
在运行级别5初始化X
CentOS 5的inittab文件
配置文件: /etc/inittab
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait: 切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别; process省略
sysinit:设定系统初始化方式,此处一般为指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1…
l6:6:wait:/etc/rc.d/rc 6
CentOS 6 /etc/inittab和相关文件
/etc/inittab
设置系统默认的运行级别
id:3:initdefault:
centos5的是时候,一下配置是放在/etc/inittab文件中定义的,但是从centos6开始,就单独放在一下路径的配置文件中
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
上图为redhat5
上图为centos6
/etc/rc.d/rc.sysinit: 系统初始化脚本
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
/etc/rc.d/rcN.d/ 文件说明
说明: rc N –> 意味着读取/etc/rc.d/rcN.d/
K*: K##*: ##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*: S##*: ##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
详细可看/etc/rc.d/rc 文件
for srv in /etc/rc.d/rcN.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
总结:
Linux的启动过程个文件程序间环环相扣,缺一不可。以centos6为例,假设没有了boot文件夹里的其中一个文件,就无法正常启动,视损坏程度,有可能在启动过程中手动添加配置信息,或者要进入光盘的救援模式进行修复。
原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/46121