向系统添加新硬件时,或者更改可能在引导过程中较早使用的配置文件后,或者更改内核模块上的选项时,可能需要重建初始 ramdisk(也称为 initrd 或者 initramfs)包含正确的内核模块、文件和配置指令。
在下面的示例中,我们将看到 $(uname -r) 的用法,这是一种无需实际键入即可将当前内核版本传递到命令中的方法。
使用备份
如前所述,建议我们备份之前的 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 配置,除非它被更新。
程序
- 首先让我们备份一下原来的Initial Ramdisk:
# cp /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.bak
- 创建一个新的初始 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”。