mkinitrd - 建立要载入 ramdisk 的映像文件命令详解命令简介
mkinitrd 命令用于创建初始 RAM 磁盘initrd映像文件。该映像文件是一个临时的根文件系统在 Linux 内核启动过程中被加载到内存中。它的主要作用是在挂载真正的根文件系统之前为内核提供必要的驱动程序尤其是存储控制器驱动如 SCSI、RAID、LVM 等和工具以便内核能够识别和访问包含根文件系统的存储设备。在系统启动流程中引导加载程序如 GRUB会加载内核和这个 initrd 映像。内核将其解压到内存中的一个 RAM 磁盘中并以其作为临时根文件系统执行其中的初始化脚本通常是 /init该脚本负责加载实际根文件系统所需的模块然后切换pivot_root到真正的根文件系统。典型应用场景更新内核后为新的内核版本生成对应的 initrd 映像。在系统配置发生变化后例如在 /etc/fstab 中添加了新的存储设备或文件系统类型重新生成 initrd 以确保启动时能正确识别。将自定义的内核模块如第三方硬件驱动打包进 initrd。注意在许多现代 Linux 发行版如 Fedora, RHEL 8, CentOS 8中mkinitrd 命令已被功能更强大的 dracut 工具取代。dracut 是新一代的 initramfs 创建工具。如果你的系统使用的是 dracut相关命令为 dracut。语法格式bash运行mkinitrd [选项] 映像文件 内核版本格式说明[选项]用于控制 mkinitrd 命令行为的可选参数。映像文件必需参数。指定要生成的 initrd 映像文件的路径和名称通常以 .img 结尾例如 /boot/initramfs-$(uname -r).img。内核版本必需参数。指定为哪个内核版本创建 initrd。通常使用 $(uname -r) 来获取当前运行的内核版本。常用选项及说明表格选项说明-f 或 --force如果指定的映像文件已经存在则强制覆盖它而不进行提示。-v 或 --verbose启用详细输出模式显示命令执行过程中的详细信息有助于调试。--preload模块名预加载指定的内核模块到 initrd 中。可以多次使用此选项来指定多个模块。--with模块名指定一个内核模块mkinitrd 会分析此模块的依赖关系并将其依赖的所有模块一同打包进 initrd。可以多次使用。--omit-scsi-modules在生成的 initrd 中省略所有 SCSI 相关的驱动程序模块。--version显示 mkinitrd 命令本身的版本信息并退出。--help显示命令的帮助信息摘要。示例用法示例 1为当前运行的内核创建 initrd基本用法这是最常用的命令为当前正在运行的内核版本创建或更新 initrd 映像文件。bash运行mkinitrd /boot/initrd-$(uname -r).img $(uname -r)$(uname -r) 会自动替换为当前内核版本如 3.10.0-1160.el7.x86_64。生成的映像文件通常位于 /boot 目录下。示例 2强制覆盖已存在的 initrd 文件如果 /boot 目录下已存在同名文件使用 -f 选项强制覆盖。bash运行mkinitrd -f /boot/initramfs-$(uname -r).img $(uname -r)示例 3创建 initrd 并显示详细过程使用 -v 选项查看创建过程中的详细信息例如加载了哪些模块。bash运行mkinitrd -v -f /boot/initrd-$(uname -r).img $(uname -r)示例 4将特定模块及其依赖打包进 initrd假设系统使用了 dm_multipath多路径模块需要确保它在 initrd 中可用。bash运行mkinitrd --withdm_multipath -f /boot/initrd-$(uname -r).img $(uname -r)示例 5预加载多个自定义模块如果安装了第三方存储控制器驱动如 mpt3sas需要预加载。bash运行mkinitrd --preloadmpt3sas --preloadsd_mod -f /boot/initrd-custom.img 3.10.0-1160.el7.x86_64示例 6检查生成的 initrd 文件内容initrd 文件通常是经过 gzip 压缩的 cpio 归档文件。可以使用以下命令检查其内容bash运行# 1. 复制一份文件并解压避免破坏原文件 cp /boot/initrd-$(uname -r).img /tmp/initrd.img.gz cd /tmp # 2. 解压 gzip gzip -d initrd.img.gz # 3. 解包 cpio 归档 mkdir initrd-root cd initrd-root cpio -idm ../initrd.img # 4. 现在可以查看 initrd-root 目录下的文件结构了 ls -la initrd-root/注意事项权限要求创建 initrd 映像通常需要 root 权限因为它需要读取 /lib/modules/ 下的内核模块和 /boot 目录。bash运行sudo mkinitrd ...内核版本匹配确保 内核版本 参数与 /lib/modules/ 目录下存在的内核版本目录名完全一致。使用 uname -r 是最安全的方式。dracut 的替代如前所述在新版系统中使用 systemd 和 initramfs应优先使用 dracut 命令。其基本用法类似bash运行dracut -f /boot/initramfs-$(uname -r).img $(uname -r)生成后更新引导配置在大多数情况下更新 initrd 后建议检查引导加载程序如 GRUB的配置确保其指向新生成的映像文件尤其是在手动指定文件名时。

相关新闻