跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 引导 Linux 系统 / 引导过程简介
适用范围 SUSE Linux Enterprise Server 15

10 引导过程简介

引导 Linux 系统涉及不同组件和任务。BIOS 或 UEFI 会初始化硬件本身,并通过引导加载程序启动内核。在此之后,引导进程完全由操作系统控制,并由 systemd 处理。systemd 会提供一组目标,用于引导与日常使用、维护或紧急情况相关的设置。

10.1 Linux 引导进程

Linux 引导进程包括多个阶段,每个阶段由一个不同组件来代表。下面的列表简要总结了引导过程并介绍了所涉及的所有主要组件:

  1. BIOS/UEFI.  在打开计算机之后,BIOS 或 UEFI 将初始化屏幕和键盘并测试主内存。直到这一阶段,计算机不访问任何大容量储存媒体。随后,将从 CMOS 值装载有关当前日期、时间和最重要的外设的信息。当识别出第一块硬盘及其几何属性之后,系统控制将从 BIOS 传递到引导加载程序。如果 BIOS 支持网络引导,则也可以配置提供引导加载程序的引导服务器。在 AMD64/Intel 64 系统上需要进行 PXE 引导。其他体系结构通常使用 BOOTP 协议获得引导加载程序。有关 UEFI 的详细信息,请参见第 11 章 “UEFI(统一可扩展固件接口)

  2. 引导加载程序.  第一块硬盘的前 512 个字节的物理数据扇区将被装载到主储存器中,位于此扇区开始位置的引导加载程序将接管系统控制。引导加载程序执行的命令决定了引导进程剩余的部分。因此,第一块硬盘的前 512 个字节称为主引导记录 (MBR)。引导加载程序随后将控制传递到实际的操作系统(在本例中即 Linux 内核)。 有关 Linux 引导加载程序 GRUB 2 的详细信息,请参见第 12 章 “引导加载程序 GRUB 2。对于网络引导,BIOS 充当了引导加载程序。它会从引导服务器获取引导映像,然后启动系统。这完全不依赖本地硬盘。

    如果根文件系统无法从引导环境中装入,则必须先对其进行检查和修复,才能继续引导。如果文件系统为 Ext3 和 Ext4,文件系统检查程序将会自动启动。如果是 XFS 和 Btrfs 文件系统,则不会自动开始修复过程,而是向用户显示有关可用于修复文件系统的选项的信息。成功修复文件系统后,退出引导环境将会使系统重试装入根文件系统。如果装入成功,将正常继续引导。

  3. 内核和 initramfs 为了转交系统控制权,引导加载程序会将内核和基于 RAM 的初始文件系统 (initramfs) 两者都装载到内存中。内核可以直接使用 initramfs 的内容。initramfs 包含一个小的可执行文件 init,它可以处理真实根文件系统的装入。如果需要特殊硬盘驱动程序才能访问大容量储存,则这些程序必须在 initramfs 中。有关 initramfs 的详细信息,请参见第 10.2 节 “initramfs。如果系统没有本地硬盘,则 initramfs 必须为内核提供根文件系统。这可以使用网络块设备(如 iSCSI 或 SAN)进行,但也可以使用 NFS 作为根设备。

    注意
    注意:init 进程命名

    有两个不同的程序通常命名为init

    1. 用于装入根文件系统的 initramfs 进程

    2. 用于设置系统的操作系统进程

    在本章中,我们将它们分别称为initramfs 上的 initsystemd

  4. initramfs 中的 init 此程序执行装入正确根文件系统所需的全部操作。它为所需的文件系统提供内核功能,并为使用 udev 的大量储存控制器提供设备驱动程序。找到 root 文件系统后,对其进行错误检查并装入。如果装入成功,系统会清理 initramfs 并执行根文件系统上的 systemd 守护程序。有关 initramfs 上的 init 的更多信息,请参见第 10.3 节 “initramfs 中的 init”。有关 udev 的详细信息,请参见第 22 章 “使用 udev 进行动态内核设备管理

  5. systemd systemd 通过启动服务并装入文件系统来处理实际的系统引导。第 13 章 “systemd 守护程序中介绍了 systemd

10.2 initramfs

initramfs 是一个小型 cpio 存档,可由内核装载到 RAM 磁盘中。它提供了一个最小的 Linux 环境,可在装入实际 root 文件系统之前执行程序。这个最小的 Linux 环境由 BIOS 或 UEFI 例程载入内存,而且除了需要足够的内存外没有特定的硬件要求。initramfs 存档必须始终提供一个名为 init 的可执行文件,该文件执行根文件系统上的 systemd 守护程序,使引导进程得以继续。

在能够装入 root 文件系统并启动操作系统之前,内核需要相应的驱动程序来访问 root 文件系统所在的设备。 这些驱动程序可能包括用于特定类型硬盘的特殊驱动程序,甚至还可能包括访问网络文件系统所需的网络驱动程序。root 文件系统所需的模块可以由 initramfs 上的 init 来装载。装载模块后,udev 将为 initramfs 提供所需的设备。在引导过程的后面,更改 root 文件系统之后需要重新生成设备。将 systemd 单元 udev.serviceudevtrigger 命令结合使用可以实现此目的。

如果需要更换硬件(例如硬盘),并且引导时此硬件需要内核中的不同驱动程序,则您必须更新 initramfs 文件。通过调用 dracut -f(选项 -f 会覆盖现有 initramfs 文件)执行此操作。要添加适用于新硬件的驱动程序,请编辑 /etc/dracut.conf.d/01-dist.conf,添加下面一行。如果该文件不存在,请予以创建。

force_drivers+="DRIVER1"

用驱动程序的模块名称替换 DRIVER1。如果您需要添加多个驱动程序,请将其全部列出并以空格分隔 (DRIVER1 DRIVER2)。

重要
重要:更新 initramfsinit

引导加载程序装载 initramfsinit 的方式与内核相同。更新 initramfsinit 后无需重新安装 GRUB 2,因为 GRUB 2 会在引导时从该目录中搜索正确的文件。

提示
提示:更改内核变量

如果您在 sysctl 界面中通过编辑相关文件(/etc/sysctl.conf/etc/sysctl.d/*.conf)更改了内核变量的值,系统下次重引导时,这项更改将会丢失。即使您在运行时使用 sysctl --system 装载这些值,更改也不会保存到 initramfs 文件中。您需要调用 dracut -f(选项 -f 会重写现有 initramfs 文件)来更新该文件。

10.3 initramfs 中的 init

initramfs 上的 init 的主要用途是准备真实 root 文件系统的装入和访问。根据您的系统配置的不同,initramfs 上的 init 负责以下任务。

装载内核模块

根据硬件配置的不同,可能需要一些特殊的驱动程序来访问计算机的硬件组件(最重要的组件是硬盘)。要访问最终的 root 文件系统,内核需要装载适当的文件系统驱动程序。

提供块特殊文件

内核对每个装载的模块生成设备事件。udev 会处理这些事件并在 RAM 文件系统的 /dev 中生成所需的特殊块文件。没有这些特殊文件,文件系统和其他设备将不可访问。

管理 RAID 和 LVM 设置

如果将系统配置为在 RAID 或 LVM 下保存根文件文件系统,则 initramfs 上的 init 将设置 LVM 或 RAID 以支持以后对根文件系统的访问。

要在不使用 YaST 的情况下直接更改 /usrswap 分区,则需要执行另外的操作。如未执行这些步骤,您的系统将会以紧急模式启动。为避免以紧急模式启动系统,请执行以下步骤:

过程 10.1︰ 在切换到逻辑卷时更新 Init RAM 磁盘
  1. 编辑 /etc/fstab 中的相应项,并将先前的分区替换为逻辑卷。

  2. 执行以下命令:

    root # mount -a
    root # swapon -a
  3. 使用 mkinitrddracut 重新生成初始 RAM 磁盘 (initramfs)。

  4. 如果是 IBM Z,另外还需运行 grub2-install

有关 RAID 和 LVM 的详细信息,请参见第 10 章 “专家分区程序

管理网络配置

如果将系统配置为使用通过网络装入的根文件系统(通过 NFS 装入),则 initramfs 上的 init 必须确保装载了正确的网络驱动程序,并确保将其设置为支持访问根文件系统。

如果文件系统驻留在一个联网的块设备(如 iSCSI 或 SAN)上,则与储存服务器的连接也由 initramfs 上的 init 设置。SUSE Linux Enterprise Server 支持在主要目标不可用的情况下从次要 iSCSI 目标引导。有关 iSCSI 引导目标配置的更多细节,请参见第 14.3.1 节 “使用 YaST 执行 iSCSI 发起端配置”

如果在安装过程的初始引导阶段调用 initramfs 上的 init,它要执行的任务将与上述任务不同:

查找安装媒体

当您启动安装进程时,计算机会装载一个安装内核以及一个包含 YaST 安装程序的特殊 init。YaST 安装程序正在 RAM 文件系统中运行,它需要知道安装媒体的位置,才能访问安装媒体以安装操作系统。

启动硬件识别并装载适当的内核模块

第 10.2 节 “initramfs 中所述,引导进程从可用于大多数硬件配置的一组最小的驱动程序开始。init 将启动初始硬件扫描进程,以确定适合您的硬件配置的一组驱动程序。这些驱动程序用于生成引导系统所需的自定义 initramfs。如果引导时不需要这些模块,但冷插拔时需要,您可以使用 systemd 装载这些模块。有关详细信息,请参见第 13.6.4 节 “装载内核模块”

装载安装系统

系统在正确识别硬件后会装载相应的驱动程序。udev 程序会建立特殊的设备文件,init 将使用 YaST 安装程序启动安装系统。

启动 YaST

最后,init 将启动 YaST,由后者启动包安装和系统配置。