第 8 章 引导和配置 Linux 系统

目录

8.1. Linux 引导进程
8.2. init 进程
8.3. 通过 /etc/sysconfig 配置系统

摘要

引导 Linux 系统包括多个不同组件。本章概述了基本原理并重点描述了所涉及的组件。本章还将讨论运行级别的概念和通过 sysconfig 执行的 SUSE 系统配置。


8.1. Linux 引导进程

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

  1. BIOS.  在打开计算机后,BIOS 将初始化屏幕和键盘并测试主存储器。直到这一阶段,计算机不访问任何大容量储存媒体。随后,将从 CMOS 值装载有关当前日期、时间和最重要的外设的信息。当识别出第一块硬盘及其空间之后,系统控制将从 BIOS 传递到引导装载程序。

  2. 引导装载程序.  第一块硬盘的前 512 个字节的物理数据扇区将被装载到主存储器中,位于此扇区开始位置的引导装载程序将接管系统控制。引导装载程序执行的命令决定了引导进程剩余的部分。因此,第一块硬盘的前 512 个字节被称为主引导记录 (MBR)。引导装载程序随后将控制传递到实际的操作系统(在本例中即 Linux 内核)。有关 Linux 引导装载程序 GRUB 的详细信息,请参见 第 9 章 引导装载程序

  3. 内核和 initramfs.  为了传递系统控制,引导装载程序将内核和基于 RAM 的初始文件系统 (initramfs) 装载到内存中。基于 RAM 的初始文件系统的内容可以直接供内核使用。基于 RAM 的初始文件系统包含一个叫做“init”的小型可执行文件,用来处理真实根文件系统的装入。在 SUSE Linux 以前的版本中,这些任务由 initrd 和 linuxrc 分别处理。有关 initramfs 的详细信息,请参见第 8.1.1 节 “initramfs”

  4. initramfs 中的 init.  这个程序执行装入正确的根文件系统所需的所有操作,如为所需的文件系统提供内核功能以及为带有 udev 的大容量储存控制器提供设备驱动程序。找到根文件系统后,对其进行错误检查并装入。如果该操作成功,将清除 initramfs 并执行根文件系统上的 init 程序。有关 init 的详细信息,请参见第 8.1.2 节 “initramfs 中的 init”。有关 udev 的更多信息,请参见第 12 章 使用 udev 进行动态内核设备管理

  5. init.  init 通过提供不同功能的多个不同的级别来处理系统的实际引导。有关 init 的介绍,请参见 第 8.2 节 “init 进程”

8.1.1. initramfs

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

在能够装入实际的根文件系统并启动实际的操作系统之前,内核需要相应的驱动程序来访问根文件系统所在的设备。这些驱动程序可能包括用于特定类型硬盘的特殊驱动程序,甚至还可能包括访问网络文件系统所需的网络驱动程序。可使用 initramfs 上的 init 装载根目录文件系统所需的模块。装载模块后,udev 将向 initramfs 提供需要设备。initramfs 在整个引导进程期间是可用的。这使其可以处理引导过程中生成的所有设备事件。

如果需要在已安装的系统中更改硬件(硬盘),并且该硬件要求在引导时内核中有不同的驱动程序,则必须更新 initramfs。其操作方法和 initramfs 的前身 initrd 一样,即调用 mkinitrd。调用 mkinitrd 无需任何参数便可创建 initramfs。调用 mkinitrd -R 创建 initrd。在 SUSE Linux 中,要装载的模块由 /etc/sysconfig/kernel 中的变量INITRD_MODULES 指定。 安装后,该变量自动被设置为正确的值。将严格按照这些模块在 INITRD_MODULES 中出现的顺序来装载它们。这一点在使用多个 SCSI 驱动程序时尤为重要,因为如果不这样,硬盘的名称将更改。严格地讲,仅装载访问根文件系统所需的那些驱动程序就足够了。但是,会通过 initramfs 或 initrd 装载安装所需的所有 SCSI 驱动程序,因为稍后装载可能会出现问题。

[Important]更新 initramfs 或 initrd

引导装载程序装载 initramfs 或 initrd 的方式与内核相同。在更新 initramfs 或 initrd 后无需重安装 GRUB,因为 GRUB 会在引导时搜索目录以获得正确的文件。

8.1.2. initramfs 中的 init

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

装载内核模块

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

提供特殊阻塞文件

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

管理 RAID 和 LVM 设置

如果将系统配置为在 RAID 或 LVM 下保存根文件系统,则 init 将设置 LVM 或 RAID 以支持稍后对根文件系统的访问。有关 RAID 的信息,请参见 第 2.2 节 “软 RAID 配置”。有关 LVM 的信息,请参见 第 2.1 节 “LVM 配置”

管理网络配置

如果对系统进行配置以使用通过网络装入的根文件系统(通过 NFS 装入),则 init 必须确保装载了适当的网络驱动器,并确保对其进行设置以允许对根文件系统的访问。

在初始引导期间调用 init 时(安装进程一部分),要执行的任务将与前面提到的任务不同:

查找安装媒体

启动安装进程时,计算机将通过安装媒体中的 YaST 安装程序装载一个安装内核和一个特殊的 initrd。YaST 安装程序在 RAM 文件系统中运行,它需要有关安装媒体实际位置的信息以访问安装媒体并安装操作系统。

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

第 8.1.1 节 “initramfs” 中所述,引导进程从可用于大多数硬件配置的一组最小的驱动程序启动。init 将启动初始硬件扫描进程,以确定适合您的硬件配置的一组驱动程序。这些值稍后会写入 /etc/sysconfig/kernelINITRD_MODULES 中(这样所有后续引导进程可使用自定义 initrd),或写入到 /etc/sysconfig/hardware/hwconfig-* 文件中(如果在引导期间不需要设备)。在安装进程中,init 将装载这组模块。

装载安装系统或应急系统

一旦正确地识别出硬件并装载了适当的驱动程序并且 udev 创建了设备特殊文件后,init 就会启动安装系统,其中包含实际的 YaST 安装程序或应急系统。

启动 YaST

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