Linux是一个多用户、多任务‘支持多线程和多CPU的操作系统,可以想象到它的启动会有多么复杂。
1.Linux的启动流程及涉及的程序或者模块
- 在你打开计算机的电源之后,计算机的硬件会启动BIOS或者UEFI来加载并检查设备,比如CPU、内存、风扇速度等。
- 检查完毕之后,如果没有问题,会稽内引导加载程序(boot leader).多数Linux的发行版本使用加载程序的软件是GRUB2。
- 接下来会根据引导加载程序设置载入内核,内核会检测硬件信息并加载驱动程序让主机开始运行。
- 硬件驱动加载成功后,内核会主动调用systemed程序。
- 之后会启动各种服务程序,然后出现登录界面,根据提示输入用户名和密码就可以登录系统了。
2.名词解释
- BIOS(Basic Input/Output System 基本输入/输出系统)是固化到计算机主板中一个叫ROM(Read Only Memory,只读存储器)的芯片上面的程序。BIOS启动之后首先加电自检,然后根据检测到的设备优先读取第一模块(Master Boot Record,主引导记录)中的引导加载程序。MBR可以安装引导加载程序。
- UEFL(Unified Extensible Firmware Interface,统一可扩展接口)是一种PC系统的规格,用来定义OS系统与系统固件之间的软件界面。如果你看到EFI,说的也是UFEI,它们是一个意思。UEFL可以作为BIOS的替代方案。与BIOS不同的是,UEFI会跟据NVRAM(Non-Volatile Random Access Memory,非易失性随机访问存储器)中设置的优先启动磁盘EFI分区中存储的引导加载程序。
- UEFI的一个选项Secure Boot(安全启动)可以被设置为开机或者关闭。Linux引导加载程序GRUB2有内置的数字证书,支持安全引导。如果用户·使用常规的LInux,可以在UEFI设置中禁用安全引导。开机后,用户可以在BIOS或者UEFI设置界面里面设置设备的优先级或者UEFI中引导加载器的优先级。
- GRUB2,它负责将内核加载到内存中然后启动内核。GRBU2的主程序可以直接在文件系统中查找内核文件,它支持BIOS和·UEFI的环境。GRUB(Grand Unified Bootloader,多重操作系统启动管理器)可以使用多种文件系统开机,它有一个命令界面可以在开机提示符下输入GRUB命令。
- 看到这个界面之后,按下E键可以编辑grub.cfg文件,按下C键可以进入GRUB的命令行界面。不过对于刚接触Linux不久的人来说,有关GRUB2的设置不要轻易操作,以免损坏系统。
3.主要目录以及部分配置文件
刚开始对Linux不熟悉的时候,确实不太容易理解GRUB2的设置。不过GRUB2的主要目录和配置文件还是比较好,而且CentOS和Ubuntu中有关GRUB2的目录是一样的。CentOS中的GRUB2的目录是/boot/grub2,而Ubuntu中的的GRUB2的目录是boot/grub.
主要目录和配置文件 | 说明 |
/boot/grub2/ | 配置文件和模块所在目录 |
/boot/grub2/grub.cfg | 配置文件 |
/boot/efi/EFI/entos/ | 配置文件和引导加载程序所在目录 |
/boot/efi/EFI/centos/grub.cfg | 配置文件 |
/etc/grub.d | 生成配置文件grub,cfg的执行脚本所在的目录 |
/etc/default/grub | 生成配置文件grub.cfg时,在etc/grub.d/下设置从脚本引用变量值 |
文件grub.cfg的设置需要用到GRUB2命令,所以主要在GRUB2命令需要知道一下。
GRUB2命令 | 说明 |
insmod | 动态加载模块 |
set | 设定定量 |
linux16 | 以16位模式启动内核,此后内核进入保护模式(CentOS存在) |
initrd16 | 使用linux16的命令启动内核时,指定内核使用的initramfs(CentOS中存在) |
linuxefi | 将uefi引导参数传递到内核并启动内核(CentOS中存在) |
initrdefi | 使用linuxfi启动内核时,指定内核使用的initramfs文件(Centos中存在) |
linux | 启动内核(Ubuntu中存在) |
initrd | 指定内核使用的initramfs文件(Ubuntu中存在) |
grub2-mkconfig | 生成CentOS中配置文件grub,cfg的命令 |
grub-mkconfig | 生成Ubuntu中配置文件grub.cfg的命令 |
initramfs文件可以通过引导加载程序加载到内存中,加载完成之后,它会帮助内核重新调用systemd程序来开始之后的启动流程。下面在Ubuntu中生成配置文件的操作结果如下图所示:
首先命令介绍:cd /boot/grub表示进入grub.cfg所在的目录中;cp grub.cfg grub.cfg.back表示负值一份grub.cfg的文件(保留当前文件的备份,以防万一);>(是重定向符号),创建grub.cfg命令需要使用重定向符号;grub-mkconfig>grub.cfg表示创建grub.cfg文件。