initramfs 重建是做什么的
initramfs 是内核启动后、真正文件系统挂载之前加载的临时根文件系统,里面放着急需的驱动与脚本。当存储控制器变化、更换磁盘阵列、增加自定义驱动,或内核参数调整后需要新驱动参与引导时,就要重建它。RPM 系(麒麟、UOS 服务器、openEuler)用 dracut,deb 系用 update-initramfs;重建本身很快,但覆盖失败会直接导致系统无法启动,因此必须先备份原文件。
基本信息
| RPM 系命令 | dracut -f 目标文件 内核版本 |
|---|---|
| deb 系命令 | update-initramfs -u -k all |
| 输出位置 | /boot 目录下的 initramfs 或 initrd 文件 |
| 查看内容 | lsinitrd 列出镜像内文件 |
| 适用场景 | 存储驱动变更、启动早期报错、模块黑名单调整 |
典型使用场景
- 更换存储控制器或调整阵列模式后,启动早期找不到根设备,需要把新驱动打进镜像
- 给系统禁用某些内核模块(如不必要文件系统),需要重建以让策略在引导阶段生效
- 升级内核后确认 initramfs 与内核版本匹配,避免版本错配导致启动失败
- 调整内核引导参数后重建,使早期引导阶段生效
- 排查启动早期报错:列出镜像内容确认所需驱动与模块是否齐全
- 交付前的标准化操作:把自定义驱动纳入 dracut 配置并固化重建流程
重建与验证
重建与验证
# RPM 系(Kylin/UOS 服务器、openEuler)
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak # 先备份
dracut -f /boot/initramfs-$(uname -r).img $(uname -r) # 显式指定输出文件与内核版本
ls -lh /boot/initramfs-$(uname -r).img # 确认文件已更新
lsinitrd /boot/initramfs-$(uname -r).img | head -20 # 列出镜像内容
lsinitrd /boot/initramfs-$(uname -r).img | grep -i <驱动名> # 确认驱动已打入
# deb 系:update-initramfs -u -k all
# 完成后安排一次重启验证,确认系统能正常进入dracut 关键点
| 项 | 说明 | 注意 |
|---|---|---|
| 内核版本参数 | 决定为哪个内核生成镜像 | 写错版本会生成无对应内核的文件 |
| -f 覆盖 | 强制覆盖已有文件 | 必须先备份原镜像 |
| add_drivers | 在配置中声明需要打入的驱动 | 自定义驱动不声明会丢失 |
| hostonly 模式 | 只包含本机硬件所需模块 | 换机还原场景需评估影响 |
| lsinitrd | 查看镜像内容验证 | 重建后应实际核对而不是想当然 |
重建后用 lsinitrd 核对关键驱动是否真的打进镜像,比直接重启验证更安全:确认到位再重启,能把风险控制在可回滚范围内。
重建前必须备份原 initramfs 文件;如果重建失败且已经覆盖原文件,系统可能完全无法引导,只能借助救援介质处理。