您的位置:

Linux系统启动流程分析

一、BIOS/UEFI启动

BIOS/UEFI是计算机的基本输入输出系统,负责硬件的初始化和系统的引导。

当计算机启动时,首先会运行BIOS/UEFI程序。此时,BIOS/UEFI程序将会从指定的存储设备(例如硬盘、U盘、光盘等)的引导扇区读取启动代码(bootloader)到内存,并跳转到该代码开始执行。在Linux系统中通常使用GRUB2作为bootloader。

二、GRUB2启动

当BIOS/UEFI加载了GRUB2之后,GRUB2会读取到Linux系统的内核文件vmlinuz及initramfs(初始根文件系统)文件。GRUB2成功加载内核文件后,会将控制权转交给内核。

# GRUB2配置文件
menuentry 'CentOS 7' {
  search --no-floppy --fs-uuid --set=root xxxx-xxxx-xxxx-xxxx-xxxx
  linux /vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
  initrd /initramfs-3.10.0-693.el7.x86_64.img
}

三、内核启动

内核作为系统的核心,负责管理系统所有资源,包括内存、硬盘、CPU等,在完成硬件初始化后,会根据/boot/grub2/grub.cfg配置文件中的参数,启动root文件系统。root文件系统是系统的根目录,包含了系统启动所需的所有文件及目录。

当内核启动时,会在用户空间运行第一个进程systemd,进而完成整个系统的启动,并挂载文件系统。

四、systemd启动

在Linux系统中,systemd已经取代了传统的system V init进程。systemd通过控制cgroups(控制group)进程组,来管理系统中的所有进程。

systemd会扫描所有unit文件,以确定需要启动的服务。根据需求,将按照指定的顺序,依次将每个服务启动、停止或重启。systemd会保留系统日志,并通过journalctl命令展示。

五、总结

以上便是Linux系统启动的主要流程。从BIOS/UEFI启动开始,到GRUB2加载内核及初始根文件系统,再到内核启动并挂载文件系统,最终交由systemd进程启动及管理服务进程。

对于Linux系统运维工程师而言,深入了解Linux系统的启动流程,可以更好地理解系统的运行机制,有效地识别和排除系统的启动故障。