无论什么机器,在开机后都要进行通电自检(硬件),如果硬件有问题,则无法继续下去。
(例如当内存条松动时或者损坏,就会发出嘀嘀嘀警报声)。接着开始加载BIOS(Basic Input Output System
BIOS是一个写入到主板上的一个软件程序。BIOS会去分析计算机里面有哪些存储设备,
从默认的第一启动项开始启动。
接下来BIOS将程序启动的下一步交给了MBR,他会去读取第一个扇区的MBR位置。
由于不同的操作系统的文件系统格式不相同,因此我们必须要一个引导装载程序来处理文件加载的问题,
也就是BootLoader,而这个BootLoader就安装在启动设备的第一个扇区,也就是MBR(主引导分区)
boot loader 有如下功能:
提供菜单:用户可以选择不同的启动选项
加载内核文件:直接指向可启动的程序区段来开始操作系统
转交其他loader:将引导装载功能转交给其他loader负责
boot loader程序 有多个版本
在linux中有 早期的LILO 和现在使用较多的 grub
在windows中有 ntloader
/dev/sda1 通常是开机后的/boot 操作系统起来之后作用很小 可能我们很少注意到这个分区
但其实这个分区是开机时的根目录 里面存放着很多重要的开机所需要的文件 grub vmlinuz 内核等
根目录会在开机之后再次挂载 也就是开机之后我们能看到的/dev/sda2分区
这个分区有一个比较有意思的情况 这时我们没有加载文件系统加载模块 也就是不能够挂载 那么我们为什么能够访问到 /boot分区呢
hexdump -C -n 5120 /dev/sda 这条命令可以看到里面有grub信息 表明了他的挂载载不需要模块的帮助
(ps:这里说挂载不太准确 ,说成 可以直接访问更贴切)
包含有各种可执行程序和驱动程序,这些驱动程序中包括 即将加载的真正的文件系统的存储介质的驱动
到了这一步 有了ext4模块就可以加载文件系统了
/boot下有一个grub. conf配置文件
default 0 表示默认启动第一个选项 也就是可以有多个内核可供选择
timeout 表示等待多长时间以后系统自动选择默认选项启动
splashiamge 是定义了一个开机启动时的背景图 可以自定义
title 分隔开了每一个内核:
root (hd0,0) 表示当前根为 第一个磁盘的第一个分区
kernel 表示当前内核 rhgb表示系统默认启动以图形化界面开启 quiet 只显示重要信息 安静模式
initrd 表示启动系统映像文件名称
这里还有一个执行顺序问题需要注意:
是先执行initrd 有了文件系统加载模块 再去交给kernel的 因为你可以看到在配置文件里有了
/dev的产生 如果没有文件系统的加载 是无法挂载和有这个名称的
关于 initrd 和 initramfs 的区别
关于kernel我了解的较少 ,只是知道他的作用就是加载一些硬件驱动程序,最终释放虚拟文件系统
,并挂载实际的目录文件系统,从而开始后续的正常启动流程。
init程序的类型:
SysV:init CentOS5 之前
配置文件:/etc/inittab
Upstart:init, CentOS6
配置文件:/etc/inittab /etc/init/*.conf
Systemd: systemd CentOS 7
配置文件:/usr/lib/systemd/system
/etc/systemd/system
以CentOS 5为例:
/etc/initab
每一行的定义方式:
id:runlevel:action:process
action :
wait :切换至次级别运行一次
respawn:此进程终止 就重新启动
initdefault:设定默认运行级别
sysinit:设定系统初始化方式
切换到对应的运行等级时如果为K开头的进程 就关闭掉对应的服务 如果为S开头的 就开启对应的服务
step1:加载BIOS的硬件信息和自检 根据设置启动所选设备
step2:读取并执行所选设备内MBR里的boot loader
step3:根据boot loader加载kernel kernel 检测硬件预加载驱动程序
step4:kernel调用init init会取得run-level信息
step5:执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境
step6:执行run-lebvel的各个服务启动
step7:执行/etc/rc.d/rc.local文件
step8:执行终端机模拟程序来启动login进程 最后等待用户登录
原文:http://blog.51cto.com/13572413/2090594