5.5. 验证初始 RAM 文件系统镜像


初始 RAM 文件系统映像的作用是预加载块设备模块,如 IDE、SCSI 或 RAID,以便可以访问和挂载这些模块通常所在的根文件系统。在红帽企业 Linux 7 系统上,每当使用 YumPackageKitRPM 软件包管理器安装新内核时,安装脚本始终会调用 Dracut 实用程序来创建 initramfs (初始 RAM 文件系统映像)。

如果您通过修改 /etc/sysctl.conf 文件或其他 sysctl 配置文件更改内核属性,如果在引导过程早期使用了更改的设置,则可能需要运行 dracut -f 命令来重建初始 RAM 文件系统镜像。例如,如果您已对联网进行了更改,并且从网络连接存储引导。

在 IBM eServer System i 以外的所有构架中(请参阅 “在 IBM eServer System i 上验证初始 RAM 文件系统镜像和内核”一节),您可以通过运行 dracut 命令创建 initramfs。但是,您通常不需要手动创建 initramfs :如果从红帽分发的 RPM 软件包安装或升级了内核及其相关软件包,则会自动执行这一步。

您可以按照以下步骤验证与当前内核版本对应的 initramfs 是否存在,并在 grub.cfg 配置文件中正确指定:

验证初始 RAM 文件系统镜像

  1. root 身份列出 /boot 目录中的内容,并使用最新(最新的)版本号查找内核(vmlinuz -kernel_version)和 initramfs- kernel_version

    例 5.1. 确保内核和 initramfs 版本匹配

    # ls /boot
    config-3.10.0-67.el7.x86_64
    config-3.10.0-78.el7.x86_64
    efi
    grub
    grub2
    initramfs-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c.img
    initramfs-3.10.0-67.el7.x86_64.img
    initramfs-3.10.0-67.el7.x86_64kdump.img
    initramfs-3.10.0-78.el7.x86_64.img
    initramfs-3.10.0-78.el7.x86_64kdump.img
    initrd-plymouth.img
    symvers-3.10.0-67.el7.x86_64.gz
    symvers-3.10.0-78.el7.x86_64.gz
    System.map-3.10.0-67.el7.x86_64
    System.map-3.10.0-78.el7.x86_64
    vmlinuz-0-rescue-07f43f20a54c4ce8ada8b70d33fd001c
    vmlinuz-3.10.0-67.el7.x86_64
    vmlinuz-3.10.0-78.el7.x86_64

    例 5.1 “确保内核和 initramfs 版本匹配” 显示:

    • 我们已安装三个内核(或者 /boot 目录中存在三个内核文件)
    • 最新的内核是 vmlinuz-3.10.0-78.el7.x86_64,并且
    • 与内核版本 initramfs -3.10.0-78.el7.x86_64kdump.img 相匹配的 initramfs 文件也存在。

      重要

      /boot 目录中,您可能找到几个 initramfs-kernel_versionkdump.img 文件。这些是由 Kdump 机制创建的特殊文件用于内核调试目的,不用于引导系统,可以安全地忽略。有关 kdump 的详情请参考 Red Hat Enterprise Linux 7 内核崩溃指南

  2. 如果您的 initramfs-kernel_version 文件与 /boot 目录中的最新内核版本不匹配,或者在某些情况下,您可能需要使用 Dracut 实用程序生成 initramfs 文件。简单地在不使用选项的情况下以 root 身份调用 dracut 会导致它在 /boot 中为该目录中存在的最新内核生成 initramfs 文件:

    # dracut

    如果您希望 dracut 覆盖现有的 initramfs,则必须使用 -f,--force 选项(例如,如果您的 initramfs 已损坏)。Other therdracut 拒绝覆盖现有的 initramfs 文件:

    # dracut
              Does not override existing initramfs (/boot/initramfs-3.10.0-78.el7.x86_64.img) without --force

    您可以通过调用 dracut initramfs _namekernel_version在当前目录中创建 initramfs 

    # dracut "initramfs-$(uname -r).img" $(uname -r)

    如果您需要指定预加载的特定内核模块,请在 add_dracut . conf 配置文件的括号中添加这些模块的名称(减去任何文件名后缀  如.ko )。您可以使用 lsinitrd initramfs _file 命令列出 dracut 创建的 initramfs 镜像 文件的文件内容:

    # lsinitrd /boot/initramfs-3.10.0-78.el7.x86_64.img
    Image: /boot/initramfs-3.10.0-78.el7.x86_64.img: 11M
    ========================================================================
    dracut-033-68.el7
    ========================================================================
    
    drwxr-xr-x  12 root     root            0 Feb  5 06:35 .
    drwxr-xr-x   2 root     root            0 Feb  5 06:35 proc
    lrwxrwxrwx   1 root     root           24 Feb  5 06:35 init -> /usr/lib/systemd/systemd
    drwxr-xr-x  10 root     root            0 Feb  5 06:35 etc
    drwxr-xr-x   2 root     root            0 Feb  5 06:35 usr/lib/modprobe.d
    [output truncated]

    有关选项和用法的更多信息 ,请参阅 man dracut 和 man dracut.conf

  3. 检查 /boot/grub2/grub.cfg 配置文件,以确保您正在引导的内核版本存在 initramfs-kernel_version.img 文件。例如:

    # grep initramfs /boot/grub2/grub.cfg
    initrd16 /initramfs-3.10.0-123.el7.x86_64.img
    initrd16 /initramfs-0-rescue-6d547dbfd01c46f6a4c1baa8c4743f57.img

    如需更多信息,请参阅 第 5.6 节 “验证引导装载程序”

在 IBM eServer System i 上验证初始 RAM 文件系统镜像和内核

在 IBM eServer System i 机器上,初始 RAM 文件系统和内核文件合并到一个文件中,该文件通过 addRamDisk 命令创建。如果从红帽分发的 RPM 软件包安装或升级了内核及其相关软件包,则会自动执行此步骤,因此不需要手动执行该步骤。要验证它是否已创建,请以 root 用户身份 运行以下命令,确保 /boot/vmlinitrd-kernel_version 文件已存在:

# ls -l /boot/

kernel_version 需要与刚才安装的内核版本匹配。

取消对初始 RAM 文件系统镜像所做的更改

例如,在某些情形中,如果您错误配置系统且不再引导,则需要按照以下步骤撤销对初始 RAM 文件系统镜像所做的更改:

撤销对初始 RAM 文件系统镜像的更改

  1. 在 GRUB 菜单中选择救援内核重新引导系统。
  2. 更改导致 initramfs 出现故障的错误设置。
  3. 以 root 用户身份运行以下命令,使用正确的设置重新创建 initramfs

    # dracut --kver kernel_version --force

例如,当您在 sysctl.conf 文件中错误设置了 vm.nr_hugepages 时,上述步骤可能很有用。由于 sysctl.conf 文件包含在 initramfs 中,新的 vm.nr_hugepages 设置会应用到 initramfs 中,并导致重新构建 initramfs。但是,由于设置不正确,因此新的 initramfs 会中断,且新构建的内核不会引导,因此需要使用上述步骤更正设置。

列出初始 RAM 文件系统镜像的内容

要列出 initramfs 中包含的文件,以 root 用户身份运行以下命令:

# lsinitrd

要只列出 /etc 目录中的文件,请使用以下命令:

# lsinitrd | grep etc/

要输出存储在 initramfs 中为当前内核保存的特定文件的内容,请使用 -f 选项:

# lsinitrd -f filename

例如,要输出 sysctl.conf 的内容,请使用以下命令:

# lsinitrd -f /etc/sysctl.conf

要指定内核版本,请使用 --kver 选项:

# lsinitrd --kver kernel_version -f /etc/sysctl.conf

例如,要列出有关内核版本 3.10.0-327.10.1.el7.x86_64 的信息,请使用以下命令:

# lsinitrd --kver 3.10.0-327.10.1.el7.x86_64 -f /etc/sysctl.conf
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.