0

0

内核升级后 dracut "Don‘t know how to handle ’root='" 的模块缺失补救

舞夢輝影

舞夢輝影

发布时间:2026-01-25 08:42:09

|

270人浏览过

|

来源于php中文网

原创

根本原因是initramfs未打包处理root=参数所需的模块,因内核升级后dracut默认裁剪了NVMe/RAID/LVM/DM等驱动,需显式指定--modules重生成并验证parse-root.sh存在。

内核升级后 dracut \

dracut 报错 “Don't know how to handle 'root='" 的根本原因

这个错误不是 grub 配置写错了,而是 initramfs 里压根没打包处理 root= 参数所需的模块。内核升级后,dracut 默认生成的 initramfs 可能跳过了某些关键驱动或解析逻辑——尤其当新内核启用了 CONFIG_BLK_DEV_NVMECONFIG_MD_RAID* 或 LVM/DM 加密子系统,但 dracut 没被明确告知要包含对应模块时。

典型触发场景包括:从老内核(如 5.15)升到新内核(如 6.8+),且 root 分区在 NVMe 设备、RAID 阵列或 LUKS 容器中;或者系统启用了 rd.lvm=0rd.md=0 这类禁用标志,导致 dracut 主动裁剪了相关模块。

补救:强制重生成 initramfs 并显式启用必需模块

别直接跑 dracut -f——它会沿用旧的配置缓存和裁剪策略。必须显式声明 root 设备类型和依赖模块:

  • 先确认 root 所在设备类型:findmnt / | awk '{print $2}' 看是否为 /dev/nvme0n1p2/dev/md0/dev/mapper/vg0-root
  • 根据设备类型加参数重生成:
    – NVMe root:dracut -f --regenerate-all --force --kver $(uname -r) --modules "nvme base"
    – LVM root:dracut -f --regenerate-all --force --kver $(uname -r) --modules "lvm base"
    – RAID root:dracut -f --regenerate-all --force --kver $(uname -r) --modules "mdraid base"
    – LUKS root:dracut -f --regenerate-all --force --kver $(uname -r) --modules "crypt lvm base"
  • 确保 /etc/dracut.conf.d/ 下没有冲突配置(比如某文件写了 omit_drivers+="nvme"

验证 initramfs 是否真包含了 root 解析能力

光看 dracut 输出“Done”不保险。得进 initramfs 里查实际内容:

图星人
图星人

好用的AI生图工具,百万免费商用图库

下载
  • 解包当前 initramfs:mkdir /tmp/initramfs && cd /tmp/initramfs && zcat /boot/initramfs-$(uname -r).img | cpio -id
  • 检查关键文件是否存在:
    ls usr/lib/dracut/modules.d/ | grep -E "(nvme|lvm|mdraid|crypt)"(应有对应目录)
    grep -r "root=" usr/lib/dracut/modules.d/*/parse-root.sh 2>/dev/null(必须有至少一个匹配)
  • 若缺失 parse-root.sh,说明模块未正确加载——此时需检查内核 config 中对应功能是否编译为 m(模块)而非 y(内置),因为 dracut 只打包 m 类型的驱动

GRUB 启动参数与 dracut 模块的协同要求

dracut 模块只是“能处理”,但能否真正识别 root,还取决于 GRUB 传参格式和内核支持是否对齐:

  • root=UUID=xxx 是最稳妥的写法;避免用 root=/dev/sda2(设备名在 initramfs 中可能未就绪)
  • 若用 LVM,必须同时加 rd.lvm.vg=vg0(否则 dracut 不主动扫描该卷组)
  • 若用 LUKS,rd.luks.uuid=xxx 必须与 cryptdevice 参数一致,且 rd.luks.options=allow-discards 等额外选项不能拼错
  • 新内核(6.6+)默认启用 init_on_alloc=1,可能导致某些老旧 dracut 版本(init_on_alloc=0

最易被忽略的是:内核升级后,/lib/modules/$(uname -r) 下的 modules.builtinmodules.order 文件可能不全,导致 dracut 无法推导依赖链。遇到反复失败,先运行 depmod -a $(uname -r) 再重试 dracut。

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

99

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

132

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

15

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号