news 2026/7/10 22:18:59

mkinitrd - 建立要载入 ramdisk 的映像文件命令详解命令简介

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 --with=dm_multipath -f /boot/initrd-$(uname -r).img $(uname -r)

示例 5:预加载多个自定义模块

如果安装了第三方存储控制器驱动(如 mpt3sas),需要预加载。

bash

运行

mkinitrd --preload=mpt3sas --preload=sd_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)的配置,确保其指向新生成的映像文件,尤其是在手动指定文件名时。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 22:16:36

UE4SS终极指南:如何为UE4/UE5游戏注入脚本系统和开发完整Mod

UE4SS终极指南&#xff1a;如何为UE4/UE5游戏注入脚本系统和开发完整Mod 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-U…

作者头像 李华
网站建设 2026/7/10 22:16:28

5分钟打造专属笔记空间:Blue Topaz主题让你的Obsidian焕然一新

5分钟打造专属笔记空间&#xff1a;Blue Topaz主题让你的Obsidian焕然一新 【免费下载链接】Blue-Topaz_Obsidian-css A blue theme for Obsidian. 项目地址: https://gitcode.com/gh_mirrors/bl/Blue-Topaz_Obsidian-css 厌倦了Obsidian默认的灰白界面&#xff1f;每天…

作者头像 李华
网站建设 2026/7/10 22:15:26

【Python 列表推导式进阶用法】

文章目录Python 列表推导式进阶用法 ✨1. 基础回顾 &#x1f504;2. 带条件的列表推导式 ⚡2.1 简单条件筛选2.2 条件表达式&#xff08;三元操作符&#xff09;3. 嵌套循环 &#x1f501;3.1 基本嵌套循环3.2 嵌套循环与条件结合4. 处理嵌套数据结构 &#x1f9e9;4.1 扁平化二…

作者头像 李华
网站建设 2026/7/10 22:15:08

主流售后服务软件盘点:企业数字化售后选型指南

在产业数字化深度落地的当下&#xff0c;售后服务已成为企业留存客户、塑造品牌口碑、挖掘二次营收的核心环节&#xff0c;而售后服务软件作为售后数字化转型的核心载体&#xff0c;已然成为各行业企业的刚需工具。当前国内售后服务软件市场品类繁杂&#xff0c;涵盖轻量化SaaS…

作者头像 李华
网站建设 2026/7/10 22:14:31

Linux 命令:ssh-copy-id —— 快速部署 SSH 公钥实现免密登录

1. 命令简介 ssh-copy-id 是一个用于自动化安装 SSH 公钥到远程主机的便捷工具。它可以将本地用户的 SSH 公钥(通常是 ~/.ssh/id_rsa.pub 或 ~/.ssh/id_ed25519.pub)复制到远程主机的指定用户账户下,并自动将其添加到远程主机的 ~/.ssh/authorized_keys 文件中。 同时,该…

作者头像 李华
网站建设 2026/7/10 22:13:35

Linux 命令:w —— 显示目前登入系统的用户信息

1. 命令简介 w 命令用于显示当前已登录系统的用户列表及其活动信息。该命令会输出系统运行时间、登录用户数、系统负载等摘要信息,并详细列出每个登录用户的用户名、终端、来源主机、登录时间、空闲时间、累计 CPU 时间以及当前正在运行的进程。它是一个快速了解系统用户活动…

作者头像 李华