开机流程
1、Linux的开机流程分析
系统开机的经过可以汇整成底下的流程:
加载BIOS或UEFI BIOS的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置;
读取并执行第一个开机装置内MBR的boot loader(亦即是grub2、spfdisk等程序);
依据boot loader的设定加载Kernel,Kernel会开始侦测硬件与加载驱动程序;
在硬件驱动成功后,Kernel会主动呼叫systemd程序,并以default.target流程开机;
systemd 执行 sysinit.target 初始化系统及 basic.target 准备操作系统;
systemd 启动 multi-user.target 下的本机与服务器服务;
systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local 文件;
systemd 执行 multi-user.target 下的 getty.target 及登入服务;
systemd 执行 graphical 需要的服务
2、BIOS,boot loader 与 Kernel 载入
先给用到的专有名词做个解释:
BIOS:不论是 传统BIOS 还是 UEFI BIOS 都会被简称为BIOS;
MBR:虽然分区表有传统的MBR以及新的GPT,不过GPT也有保留一块兼容MBR的区块。总之,MBR就代表磁盘前边可安装boot loader的那个分区。
2.1、BIOS,开机自我测试与MBR/GPT
BIOS会指定开机设备让我们去读取磁盘中的操作系统核心文件。但由于不同的操作系统他的文件系统格式不相同,因此我们必须要以一个开机管理程序来处理核心文件加载(load)问题,因此这个文件管理程序就被称为Boot loader了。那这个Boot loader程序安装在哪呢?就在开机装置的第一个扇区内,也就是我们一直说的MBR(主要启动记录区)。
我们知道每颗磁盘最前面区块都含有MBR和GPT分区表的提供loader的区块,那么如果我的主机上面有多个磁盘的话,系统会去哪个磁盘最前面的区块读取boot loader呢?这个要看BIOS的设定!
2.2、Boot loader的功能
每个操作系统默认是会安装一套boot loader到他自己的文件系统中,而在Linux系统安装时,你可以选择将boot loader安装到MBR去,也可以选择不安装。如果选择安装到MBR,那理论上你在MBR与boot loader都会有一份boot loader程序。至于Windows安装时,它会预设主动地将MBR与boot loader都装上一份boot loader!你会发现安装多重系统时,你的MBR常常会被不同的操作系统的boot loader覆盖!
boot loader的主要功能:
- 提供菜单:用户可以选择不同的开机项目,这也是多重引导的重要功能!
- 载入内核文件:直接指向可开机的程序区段来开始操作系统;
- 转交其他loader:将开机管理功能转交给其他loader负责。
Windows的loader预设不具备控制权转交的功能,因此你不能使用Windows的loader来加载Linux的loader。