在CentOS/RHEL 5 中如何重建初始 Ramdisk 镜像

向系统添加新硬件时,或者更改可能在引导过程中较早使用的配置文件后,或者更改内核模块上的选项时,可能需要重建初始 ramdisk(也称为 initrd 或者 initramfs)包含正确的内核模块、文件和配置指令。
在下面的示例中,我们将看到 $(uname -r) 的用法,这是一种无需实际键入即可将当前内核版本传递到命令中的方法。

欢迎来到之路教程(on itroad-com)

使用备份

如前所述,建议我们备份之前的 initrd,以防新的 initrd 出现问题。
如果需要,可以在 /boot/grub/grub.conf 中为备份初始 ramdisk 镜像创建一个单独的条目,以便在启动时方便地选择旧版本而无需恢复备份。
此示例配置允许从 grub 菜单中选择新的或者旧的初始 ramdisk 镜像:

title Red Hat Enterprise Linux 5 (2.6.32-200.13.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.32-200.13.1.el5 ro root=LABEL=/ 
initrd /initrd-2.6.32-200.13.1.el5.img
title Red Hat Enterprise Linux 5 w/ old initrd (2.6.32-200.13.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.32-200.13.1.el5 ro root=LABEL=/ 
initrd /initrd-2.6.32-200.13.1.el5.img.bak

或者,如果我们需要选择旧的 initrd 并且在重新启动前没有在 grub.conf 中单独创建一个条目,我们可以在 grub 中进入编辑模式。
这样做:

如果 grub 使用密码保护,请按 p 并输入密码
使用箭头键突出显示要引导的内核的条目
按 e 进行编辑
突出显示 initrd 行并再次按 e
将initrd的路径更改为我们制作的备份副本(例如/initrd-2.6.32-200.13.1.el5.img.bak)
按 Enter 临时保存我们所做的更改
按 b 开机

注意:此过程实际上不会进行任何持久更改。
下次启动时,系统将继续使用原来的 grub.conf 配置,除非它被更新。

程序

  1. 首先让我们备份一下原来的Initial Ramdisk:
# cp /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.bak
  1. 创建一个新的初始 Ramdisk(在内核 2.4 的 /etc/modprobe.conf 或者 /etc/modules.conf 中添加新模块之后):
# mkinitrd -f /boot/initrd-`uname -r`-new.img `uname -r`

可以看到 /boot 目录下已经创建了一个新的初始 ramdisk 文件 initrd-[kernel-version]-new.img。
mkinitrd 参数(请参阅 man mkinitrd 了解更多详细信息):

# mkinitrd --help
usage: mkinitrd [--version] [--help] [-v] [-f] [--preload [module]]
       [--force-ide-probe] [--force-scsi-probe | --omit-scsi-modules]
       [--image-version] [--force-raid-probe | --omit-raid-modules]
       [--with=[module]] [--force-lvm-probe | --omit-lvm-modules]
       [--builtin=module] [--omit-dmraid] [--net-dev=interface]
       [--fstab=fstab] [--nocompress] [initrd-image] [kernel-version]

最常用的参数是:

-f 允许 mkinitrd 覆盖现有的镜像文件。
-preload=module - 在初始 ramdisk 镜像中加载模块模块。
该模块在 /etc/modprobe.conf 中指定的任何 SCSI 模块之前加载。
此选项可以根据需要多次使用。
-with=module - 在初始 ramdisk 镜像中加载模块模块。
该模块在 /etc/modprobe.conf 中指定的任何 SCSI 模块之后加载。
此选项可根据需要多次使用。

如果我们为初始 Ramdisk 文件选择了新名称,则必须在 /etc/grub.conf 中添加一个新条目才能使用它:

title Red Hat Enterprise Linux 5 (2.6.32-200.13.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.32-200.13.1.el5 ro root=LABEL=/ 
initrd /initrd-2.6.32-200.13.1.el5.img

之后,我们将能够在启动时在 Grub 菜单中选择条目“New initrd”。

日期:2020-09-17 00:12:36 来源:oir作者:oir