Linux控制启动过程
启动过程
1.计算机接通电源,系统固件(UEFI或BIOS)运行开机自检(POST),初始化部分硬件;
使用系统BIOS或UEFI配置屏幕(F2键进行配置)
2.系统固件搜索可启动设备;
使用系统BIOS或UEFI配置屏幕(F2键进行配置)
3.系统固件从磁盘读取启动加载器,将系统控制权交给启动加载器;
使用grub2-install命令进行配置,将会安装GRUB2作为磁盘的启动加载器
4.GRUB2从/boot/grub2/grub.cfg文件加载配置并显示一个菜单,可以选择要启动的内核;
使用/etc/grub.d/目录、/etc/default/grub文件和grub2-mkconfig命令进行配置以生成/boot/grub2/grub.cfg文件
5.选择内核或超时到期后,启动加载器从磁盘中加载内核和initramfs,并放入内存;
使用/etc/dracut.conf.d/目录、dracut命令和lsinitrd命令进行配置以检查initramfs文件
6.启动加载器将控制权交给内核,传递启动加载器的内核命令中指定的选项和initramfs在内核中的配置;
使用/etc/grub.d/目录、/etc/default/grub文件和grub2-mkconfig目录进行配置以生成/boot/grub2/grub.cfg文件
7.对内核可在initramfs中找到驱动程序的所有硬件初始化,作为PID1从initramfs执行/sbin/init,红帽Linux8中/sbin/init是一个指向systemd的连接;
使用内核init=命令行参数进行配置
8.initramfs中的systemd实例执行initrd.target目标的所有单元,包括将磁盘上的root文件系统挂载于/sysroot目录;
使用/etc/fstab进行配置
9.内核将root文件系统从initramfs回转为/sysroot中的root文件系统,systemd使用磁盘安装的systemd副本自行重新执行;
10.systemd查找从内核命令行传递或系统中配置的默认目标,然后启动(或停止)单元以符合目标的配置,解决单元间的依赖关系。
使用/etc/systemd/system/default.target和/etc/systemd/system进行配置
重新启动和关闭
systemctl poweroff 停止所有运行的服务,卸载所有文件系统,然后关闭系统。
systemctl reboot 停止所有运行的服务,卸载所有文件系统,然后重启系统。