引导Linux系统涉及不同的组件和任务。在固件和硬件初始化过程(取决于机器的架构)之后,内核通过引导加载程序GRUB2启动。此后,引导过程完全由操作系统控制并由systemd处理。systemd提供了一组“target”,用于为日常使用、维护或紧急情况启动配置。
1 术语
init
有两种不同的进程会被命名为init:
- 挂载到根文件系统的initramfs进程
- 从真正的根文件系统开始执行的所有其他进程的操作系统进程
在这两种情况下,systemd程序都会处理这个任务。它首先从initramfs执行以挂载根文件系统。一旦成功,它将作为初始进程从根文件系统重新执行。为了避免混淆这两个systemd进程,我们在initramfs上将第一个进程称为init,将第二个进程称为systemd。
initrd/initramfs
initrd(初始RAM磁盘)是一个映像文件,其中包含由内核加载并从/dev/ram作为临时根文件系统挂载的根文件系统映像。挂载此文件系统需要文件系统驱动程序。
从内核2.6.13开始,initrd已被initramfs(初始RAM文件系统)取代,它不需要挂载文件系统驱动程序。openSUSELeap专门使用initramfs。但是,由于initramfs被保存为/boot/initrd,因此通常称为“initrd”。
2 系统启动过程
2.1 初始化和引导加载程序阶段
在初始化阶段,设置机器的硬件并准备好设备。 此过程在硬件架构之间存在显着差异。
openSUSE Leap在所有架构上都使用引导加载程序GRUB2。根据架构和固件,启动GRUB2引导加载程序可能是一个多步骤过程。引导加载程序的目的是加载内核和基于RAM的初始文件系统(initramfs)。
AArch64和AMD64/Intel64上的初始化和引导加载程序阶段
电脑启动后,BIOS和UEFI会初始化屏幕和键盘,并测试内存,但是不会访问大容量存储(硬盘)。随后加载CMOS中的日期,时间和外设。识别到启动介质后,系统控制权将会从BIOS/UEFI过度到boot loader。
在具有传统BIOS的机器上,只能加载来自引导盘的第一个物理512字节扇区(主引导记录,MBR)的代码,只有最小的GEUB2适合MBR,它的主要目的是从MBR和第一个分区(MBR分区表)之