进Q群11372462领取专属报名福利!
#说在前面
从我2009年开始学习研究Linux系统开始,Linux系统管理进程及启动过程已经过2次变化,特别是在2016年云计算、大数据等到来,Linux系统要在数据容量上、文件系统上、进程管理上要贴合于这些改变IT行业变革的产物,势必要做出相应改变。那么Linux系统从老版本如RHEL&Centos 4.x | 5.x | 6.x的基于Sysv的init进程这种有些老迈的管理方式演变到从Linux7.x开始基于Systemd方式管理。今天我们重点再讨论下基于Systemd方式管理的Linux系统启动过程全揭晓,Let’s go !
#说明Linux8启动过程
- 主机上电后,经过BIOS或者UEFI的方式开始主机自检(也叫POST),开始初始化部分硬件;
- 根据BIOS或者UEFI配置的顺序,搜索磁盘的主引导记录信息(MBR);
- 接下来从磁盘中读取启动加载器,之后将系统控制权交给启动加载器;在Linux8系统中,该启动加载器叫做GRUB,版本v2(以下简称GRUB2);通过grub2-install命令配置;
- GRUB2会从/boot/grub2/grub.cfg这个文件中加载配置并显示对应的菜单,从中选择要启动的内容,通过grub2-mkconfig命令进行配置并生成grub.cfg文件;对于Linux8.x系统内核文件,放在了Linu系统中/boot目录下有个对应内核版本的vmlinuz-4.18.0-193.el8.x86_64文件,具体如下:
那么,当我们从重新启动Linux8系统引导选择界面的时候,如下图,之所以能够看到有如下选择,是因为在/boot/loader/entries目录下有三个conf配置文件,表明GRUB引导界面的选择,具体如下: - 接下来,选择内核后,从磁盘加载内核和initramfs文件并放到内存中;其中,内核文件我们已经知道了,就是/boot/vmlinuz-4.18.0-193.el8.x86_64,那么,initramfs文件又是啥呢,initramfs文件是一个存档,包括启动时所必须的硬件的内核模块、初始化脚本等;对于Linux8.x系统内核文件,放在了Linu系统中/boot目录下有个initramfs-4.18.0-193.el8.x86_64.img,具体如下:
我们可以用lsinitrd命令查看下内核里都包含什么样的文件,具体如下: - 接下来,内核在Initramfs中找到驱动的硬件,初始化硬件并作为进程ID(PID)为1,从initramfs执行/sbin/init,指向Systemd进程;
- 下一步,initramfs中的Systemd实例会执行initrd.target目录的单元,这其中就会包括磁盘上的root文件系统,以只读的方式挂载到/sysroot目录;
- 此时,内核将root文件系统从initramfs进行切换到/sysroot,作为root根文件系统;
- 最后,systemd根据默认的目标,启动符合该目标的配置,自动解决一些依赖关系,最终,进入交互式登录界面,我们就看到了一个Linux系统图形。
#说在最后
相信小伙伴们已经Get到了Linux系统的启动过程,只有当我们理解了启动过程,对于一些平时运维遇到的问题会从容的进行troubleshoot排错,例如恢复用户口令、因为fstab配置文件导致正常的磁盘分区或者卷无法正常启动的解决办法。
进Q群11372462领取专属报名福利!
|