Ubuntu 24.04 系统启动故障修复记录

Ubuntu 24.04 系统启动故障修复记录

记录时间:2026-07-31
环境:Ubuntu 24.04.2 LTS(内核 6.8.0-134-generic),虚拟机

一、问题现象

客户的虚拟机因为装修拉闸断电好几次,里面的 Ubuntu 24.04.2 LTS 起不来了。开机直接掉进 initramfs 那个 (initramfs) 急救 shell,提示找不到根文件系统、挂不上盘,根本进不去系统。折腾了半天,最后靠 LiveCD + chroot 进去把内核模块和 grub 整个重装了一遍才救回来。

二、排查过程

2.1 确认故障范围

系统掉进 initramfs shell 后,先确认磁盘设备是否还能识别:

# 在 initramfs shell 中查看可用磁盘和分区
(initramfs) blkid
(initramfs) cat /proc/partitions

磁盘设备还在,但根分区挂载失败,初步判断 initramfs 缺少磁盘驱动模块,导致内核加载不到文件系统驱动。

2.2 外部工具判断与验证

切换到”chroot 内网络不通,没法下载 linux-image 修复内核,只能走治标路线”。这结论如果成立,就等于只能用 LiveCD 手动从 ISO 里提取模块文件,没法 apt 重装,修复会很受限。

我进 LiveCD 环境 chroot 之后实测了一下:

# 手动写 DNS (默认 resolv.conf 是空的)如果ping xxx能通,下面这个自定义dns可忽略
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 114.114.114.114" >> /etc/resolv.conf

# 验证网络
ping mirrors.aliyun.com

网络是通的。只要 DNS 配上,chroot 环境里 apt 能正常用,不需要走手动提取模块的弯路。

2.3 尝试重建 initramfs(无效)

网络通了之后,先试了最直接的办法——重建 initramfs:

update-initramfs -u

结果疯狂报 cannot find module 一堆缺失警告。检查 /lib/modules/6.8.0-134-generic/,发现里面的内核模块文件本身已经损坏、缺失了。

这说明问题不在 initramfs 打包环节,而是源头——内核模块文件被断电搞坏了。update-initramfs 只是把当前模块重新打包成 initrd,补不回丢失的驱动文件。必须先把完整的模块文件装回来。

三、根因分析

内核 /lib/modules/6.8.0-134-generic 下的驱动模块文件因多次异常断电导致损坏、缺失,initrd.img 启动镜像不完整。开机时内核加载不到磁盘/文件系统驱动,根分区挂不上,于是掉进 initramfs 救援界面。

四、解决方案

4.1 修复前置环境(LiveCD 引导)

  1. 找一个 Ubuntu 24.04 的 ISO,挂到虚拟机光驱上;
  2. 改启动顺序,让光驱优先
  3. 从 ISO 启动,选 Try Ubuntu(不要选安装),进 Live 桌面环境,开终端。

4.2 检查磁盘文件系统完整性

动手修复前先扫一下根分区有没有文件系统损坏(非必须,但保险):

# 检查文件系统(根据实际分区调整,未挂载状态下执行)
sudo e2fsck -f /dev/sda2
sudo e2fsck -f /dev/sda3

4.3 挂载系统分区并 chroot

下面 /dev/sda2/dev/sda3我这台机器的分区号,你的环境不一定一样。动手前先用 lsblkfdisk -l 看清楚自己的根分区、EFI 分区分别是哪几个,别照抄分区号。

# 挂载系统根分区(我这台是 /dev/sda3)
sudo mount /dev/sda3 /mnt

# 如果你的是 EFI 引导,记得把 EFI 分区也挂上,否则后面 grub-install 会失败
# sudo mount /dev/sda1 /mnt/boot/efi

# 绑定系统运行所需的虚拟文件系统(必须执行,chroot 后命令才跑得动)
sudo mount --bind /dev  /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys  /mnt/sys
sudo mount --bind /run  /mnt/run

# 切换进硬盘上的系统环境
sudo chroot /mnt

提示符变成 root@ubuntu:/# 就说明 chroot 成功了。

4.4 配置 chroot 内网络

# 手动写 DNS,让 chroot 环境能联网(默认 resolv.conf 是空的)
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 114.114.114.114" >> /etc/resolv.conf

# 验证网络通不通
ping mirrors.aliyun.com

配通网络是后面所有重装操作的前提,别跳过。

4.5 重装损坏的内核模块和 GRUB

apt update

# 重装 GRUB EFI 相关包
apt install --reinstall grub-efi-amd64
apt install --reinstall grub-efi-amd64 grub-efi-amd64-bin

# 重装损坏的内核镜像和 headers(模块文件就是从这里补回来的)
apt install --reinstall linux-image-6.8.0-134-generic linux-headers-6.8.0-134-generic

为什么要重装,而不是只跑 update-initramfs?
这就是这次遇到的核心问题。update-initramfs 只是把当前模块重新打包成 initrd,而 /lib/modules 里的模块文件本身已经坏了。打包源头就是残缺的,生成的镜像自然也是残的。直接 apt reinstall 把整个 linux-image + linux-headers 重装回来,模块文件才是完整的,之后再跑 update-initramfs 才有意义。

4.6 重建 initramfs 并更新 GRUB

# 重建内核启动镜像 initramfs(补全磁盘驱动,关键步骤)
update-initramfs -u

# 重新安装 grub 引导(我这台写 /dev/sda;EFI 系统若前面挂了 /boot/efi,grub-install 会自动识别走 EFI)
grub-install /dev/sda

# 更新 grub 启动菜单,生成 /boot/grub/grub.cfg
update-grub

两条命令的区别:
update-grub:只更新开机启动菜单(/boot/grub/grub.cfg);
update-initramfs -u:重建内核启动镜像(/boot/initrd.img-xxx),磁盘驱动就藏在这个文件里。

二者缺一不可,只更新 grub 不重建 initramfs,照样起不来。

4.7 退出 chroot 并清理挂载

# 退出 chroot
exit

# 递归卸载所有挂载目录
sudo umount -R /mnt

然后虚拟机关机,摘掉 ISO 镜像,把启动顺序改回硬盘优先

五、验证

重启后没再进 initramfs 救援模式,正常进到了 Ubuntu 24.04.2 LTS tty1 字符终端登录界面。输账号密码能正常登录,系统内核、磁盘挂载、进程调度全部正常。内核/磁盘故障彻底解决,系统救活了。

六、注意事项

6.1 update-grub ≠ 修系统

update-grub 只负责生成开机菜单(/boot/grub/grub.cfg),跟内核能不能起来没关系。很多人习惯跑完修复就跑 update-grub,但这只更新了菜单,内核镜像本身没变。

6.2 update-initramfs -u 才是关键,但有前提

磁盘驱动靠 update-initramfs -u 打包进 initrd,缺了开机就挂。但如果 /lib/modules 里的模块文件本身已损坏,必须先 apt reinstall 重装内核镜像,把模块文件补回来,再跑 update-initramfs 才有意义。

6.3 内核模块丢失是掉进 initramfs 的常见诱因

看到 (initramfs) shell,第一反应就该查 /lib/modules。不要上来就重装系统。

6.4 chroot 里能不能联网很关键

配上 DNS 后能 apt,就能走重装内核这条路;别因为网络不通就放弃,退回到手动提取模块的办法。

6.5 LiveCD + chroot 是通用离线修复方案

记住固定流程:挂载分区 → 绑定虚拟文件系统 → chroot → 修复 → umount。这套流程适用于大部分 Linux 系统起不来的场景。

七、参考资料

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇