1 CentOS6系统启动过程
1.硬件启动流程
a.打开电源
b.BIOS自检
1)POST自检:初始化硬件设备,检测系统外围设备(CPU、内存、硬盘、IO设备等)
2)BIOS检测:根据BIOS设置的启动顺序逐一排查。如果是硬盘启动,读取硬盘的MBR的BootLoader。
c.读取MBR信息
1)MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。
它由三部分组成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。注:硬盘默认一个扇区大小为512字节。
第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。
第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记录在其中。
第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。
2)BootLoader主引导程序。Linux一般使用的是grub(也叫grub legacy)和grub2。
CentOS6一般使用的是grub。GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。
2.GRUB启动引导阶段
GRUB程序加载执行并引导kernel(内核)程序,其中有三个阶段。grub引导阶段的文件都在/boot/grub/目录下。
a.Stage1阶段:执行系统安装时预先写入到MBR的Bootloader程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,
2扇区的内容(/boot/grub/stage1)并执行。
b.Stage1.5阶段:Stage1阶段和Stage2阶段的桥梁,具有识别分区文件系统的能力,此后grub程序便有能力去访问/boot/grub/stage2,
并将其读取到内存执行。
c.Stage2阶段:解析grub的配置文件/boot/grub/grub.cnf,根据配置文件加载内核镜像到内存中,通过initrd
程序建立虚拟根文件系统,最后转交内核。
3.内核引导阶段
通过内存中的虚拟根文件系统,加载驱动,然后切换到真正的根文件系统,并执行/sbin/init程序。
a.调用虚拟文件系统init程序
b.加载驱动模块初始化设备并做相关配置,包括CPU、磁盘、IO设备等,是内核能够识别并加载到/的桥梁。
c.加载并切换到真正的文件系统(grub.conf中的root=所指定的)。
d.协助内核调用/sbin/init程序。
4.系统初始化阶段(init初始化阶段)
/sbin/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行
级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,
指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local)用户自定义服务。
a./sbin/init程序读取/etc/inittab文件
b.执行系统初始化脚本/etc/rc.sysinit
c.加载服务
1)根据运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(文件其实都是软链接,
指向的都是/etc/rc.d/init.d/目录下的文件)主要设置主机名、开机自启动ssh服务、自动挂载、IP地址、定时任务、邮件服务等。
2)加载用户自定义服务/etc/rc.local
5.启动终端
默认情况下执行/sbin/mingetty打开6个纯文本终端,验证并登录。如果是5,则加载图形界面。
a.验证登录
1./etc/nologin用户在该文件中则不允许登录
2./etc/usertty对文件做出访问限制
3./etc/securetty登记的终端才能登陆
4./etc/passwd & /etc/shadow验证密码以及设置用户主目录、使用何种shell
b.登陆成功
1.屏幕输出
/var/log/lastlog输出最近一次登录信息
/var/spoon/mail检查用户是否有新邮件
2.加载环境变量
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
~/.bash_login
简化版:
1.开机BIOS自检
2.MBR引导
3.GRUB引导菜单
4.加载内核
5.运行/sbin/init进程
6.读取/etc/inittab配置文件,执行/etc/rc.d/rc.sysinit、/etc/rc.d/rc脚本
7.执行/etc/rc.d/rc3.d脚本服务
8.执行/etc/rc.local用户自定义服务
9.启动mingetty 进程
2 CentOS7系统启动过程
1.硬件启动该流程
说明:和CentOS6硬件启动流程差不多。
a.Power On
b.BIOS检测
1.POST检测
2.查找启动介质:CDROM、USB、HDD
查找硬盘启动的0柱面,0磁道,1扇区,也就是BootLoader,定位后MBR 即被装载到RAM(内存空间)中,BIOS将控制权转交MBR。
c.读取MBR
1.第一部分:446Bytes,BootLoader,其实是安装grub2的boot.img
2.第二部分:64Bytes,Partition Table
3.第三部分:2Bytes,硬盘有效标志
2.GRUB2引导阶段
显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub/grub.cfg,
根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。
a.Boot.img:系统启动时装载Core.img
b.Core.img:grub2核心映像文件
c.*.mod:动态加载的模块
d.解析grub.cfg配置文件
3.内核引导阶段
CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成/usr/lib/systemd/systemd
a./boot/vmlinuz*
Linux内核映像及内核参数传递
b./boot/initramfs*
1.在RAM中释放供内核使用的根文件系统boot/initramfs
2.挂载真正的文件系统并执行/usr/lib/systemd/systemd
c.内核初始化
4.系统初始化阶段/systemd初始化阶段
启动/usr/lib/systemd/systemd进程。
a.systemd执行默认target配置文件/etc/systemd/system/default.target
b.systemd执行sysinit.target来初始化系统和basic.target来准备操作系统
c.systemd启动multi-user.target下的本机与服务器服务
d.systemd执行multi-user.target下的/etc/rc.d/rc.local用户自定义脚本
e.Systemd执行multi-user.target下的getty.target及登录服务
5.启动终端
如果有图形化界面,systemd执行graphical需要的服务。
简化版(6-10并行执行):
1.开机BIOS自检
2.MBR引导
3.GRUB引导菜单
4.加载内核
5.运行/usr/lib/systemd/systemd进程
6.systemd执行默认target配置文件/etc/systemd/system/default.target
7.systemd执行sysinit.target来初始化系统和basic.target来准备操作系统
8.systemd启动multi-user.target下的本机与服务器服务
9.systemd执行multi-user.target下的/etc/rc.d/rc.local用户自定义脚本
10.Systemd执行multi-user.target下的getty.target及登录服务
3 参考博客
Linux系统启动流程