【经验分享】Ubuntu 服务器突然断电后出现 Kernel Panic:使用旧内核启动并修复 initramfs
【经验分享】Ubuntu 服务器突然断电后出现 Kernel Panic:使用旧内核启动并修复 initramfs
关键词:Ubuntu、Kernel Panic、GRUB、initramfs、unknown-block(0,0)、断电恢复、旧内核启动
一、问题背景
服务器突然断电后,再次开机时无法正常进入 Ubuntu,屏幕显示如下错误:
KERNEL PANIC!
Please reboot your computer.
VFS: Unable to mount root fs on unknown-block(0,0)

这类错误表示 Linux 内核在启动过程中无法找到或挂载根文件系统。
常见原因包括:
- 当前内核对应的
initramfs文件损坏或生成不完整; /boot分区空间不足;- GRUB 启动参数中的根分区 UUID 错误;
- 系统盘没有被 BIOS 或磁盘控制器识别;
- 突然断电导致文件系统或软件 RAID 状态异常;
- 新安装的内核本身存在启动问题。
本次故障中,旧版本内核可以正常启动,因此最终判断为:最新内核对应的 initramfs 很可能在断电后出现异常,而系统盘和根文件系统本身没有严重损坏。
二、进入 GRUB 启动菜单
开机时需要进入 GRUB 菜单。
如果一直按 Esc 进入了 BIOS,说明按键时间过早。可以退出 BIOS,等待主板 Logo 出现或刚消失时,再快速连续按几次 Esc。
进入 GRUB 后,选择:
Advanced options for Ubuntu
系统中显示了以下内核:
Ubuntu, with Linux 7.0.0-28-generic
Ubuntu, with Linux 7.0.0-28-generic (recovery mode)
Ubuntu, with Linux 6.17.0-40-generic
Ubuntu, with Linux 6.17.0-40-generic (recovery mode)

由于最新的 7.0.0-28-generic 无法启动,因此选择旧内核:
Ubuntu, with Linux 6.17.0-40-generic
先选择普通启动项,不选择 recovery mode。
旧内核成功进入系统,说明:
- BIOS 可以识别系统盘;
- GRUB 基本正常;
- 根分区大概率没有严重损坏;
- 问题主要集中在新内核或其 initramfs 文件。
三、确认当前运行的内核
进入系统后执行:
uname -r
输出如下:
6.17.0-40-generic
说明当前确实是通过旧内核启动的。
四、检查 /boot 分区空间
在修复 initramfs 之前,先检查 /boot 是否还有足够空间:
df -h /boot
同时查看现有的内核和 initramfs 文件:
ls -lh /boot/vmlinuz-* /boot/initrd.img-*
如果 /boot 已经达到 100%,需要先清理旧内核,否则新的 initramfs 可能无法正常生成。
本次恢复过程中 /boot 空间正常,因此可以直接重建新内核的 initramfs。
五、重建新内核的 initramfs
切换到 root 用户:
sudo -i
针对无法启动的内核重新生成 initramfs:
update-initramfs -u -k 7.0.0-28-generic
然后重新生成 GRUB 配置:
update-grub
正常情况下会看到类似输出:
Found linux image: /boot/vmlinuz-7.0.0-28-generic
Found initrd image: /boot/initrd.img-7.0.0-28-generic
Found linux image: /boot/vmlinuz-6.17.0-40-generic
Found initrd image: /boot/initrd.img-6.17.0-40-generic
这说明 GRUB 已经重新识别到对应的内核和 initramfs 文件。
完成后重启服务器:
reboot
本次重启不再手动选择旧内核,而是让 GRUB 默认启动最新的:
Ubuntu, with Linux 7.0.0-28-generic
系统成功进入 Ubuntu,故障恢复。
六、验证修复结果
系统启动后再次检查当前内核:
uname -r
如果输出:
7.0.0-28-generic
说明新内核已经恢复正常。
进一步验证 initramfs 是否可以被正常解析:
sudo lsinitramfs /boot/initrd.img-7.0.0-28-generic >/dev/null \
&& echo "initramfs 检查通过"
如果看到:
initramfs 检查通过
说明生成的 initramfs 文件结构基本正常。
七、检查断电是否留下其他问题
虽然服务器已经能够启动,但突然断电还可能导致软件包、文件系统、RAID 或磁盘状态异常,因此建议继续完成以下检查。
1. 检查软件包状态
sudo dpkg --configure -a
sudo apt -f install
sudo dpkg --audit
如果 dpkg --audit 没有输出,通常表示没有处于异常状态的软件包。
更新软件源索引:
sudo apt update
2. 检查分区空间和 inode
df -hT / /boot /boot/efi 2>/dev/null
df -i / /boot 2>/dev/null
重点确认:
- 根分区没有达到
100%; /boot分区没有达到100%;- inode 使用率没有达到
100%。
3. 检查启动错误日志
查看本次启动中的严重错误:
sudo journalctl -b -p err..alert --no-pager
筛选磁盘、NVMe 和文件系统错误:
sudo journalctl -k -b --no-pager | \
grep -Ei 'I/O error|Buffer I/O|EXT4-fs error|XFS.*corrupt|nvme.*(error|timeout|reset)|blk_update_request'
如果第二条命令没有输出,通常是好现象。
如果出现以下关键词,则需要进一步排查:
I/O error
EXT4-fs error
Buffer I/O error
nvme timeout
controller reset
filesystem corruption
需要注意:不要在根分区处于挂载状态时直接运行 fsck。
八、检查软件 RAID 状态
如果服务器使用了 Linux 软件 RAID,例如 /dev/md0,断电后应检查阵列是否降级或正在同步:
cat /proc/mdstat
正常阵列可能显示:
[UUUU]
如果显示:
[UU_U]
说明有一块成员盘缺失。
如果输出中出现:
recovery
resync
reshape
check
说明阵列正在恢复或同步。此时应保持服务器持续供电,不要频繁重启。
查看详细状态:
sudo mdadm --detail /dev/md0
正常情况下可以看到:
State : clean
如果正在同步,则可能显示:
State : clean, resyncing
九、检查 NVMe 硬盘健康状态
先查看磁盘设备名:
lsblk -o NAME,SIZE,MODEL,FSTYPE,MOUNTPOINTS
安装检查工具:
sudo apt install nvme-cli smartmontools
查看 NVMe 列表:
sudo nvme list
假设系统盘是 /dev/nvme0,检查 SMART 信息:
sudo nvme smart-log /dev/nvme0
重点关注:
critical_warning
media_errors
num_err_log_entries
percentage_used
比较理想的状态是:
critical_warning : 0
media_errors : 0
也可以使用:
sudo smartctl -a /dev/nvme0
实际设备名应以 nvme list 或 lsblk 的输出为准。
十、不要立即删除旧内核
虽然最新内核已经恢复,但暂时不要删除能够正常启动的:
6.17.0-40-generic
它可以作为备用内核。
建议至少满足以下条件后,再考虑清理旧版本:
- 最新内核能够正常启动;
- 连续重启两次均无异常;
- 日志中没有磁盘或文件系统错误;
- 软件 RAID 没有降级;
- NVMe SMART 状态正常。
恢复后暂时不要急着执行:
sudo apt autoremove --purge
避免系统自动删除已验证可用的备用内核。
十一、最终恢复流程总结
本次故障的核心恢复流程如下:
服务器突然断电
↓
新内核启动时出现 Kernel Panic
↓
进入 GRUB 的 Advanced options for Ubuntu
↓
选择旧内核 6.17.0-40-generic
↓
成功进入系统
↓
重建 7.0.0-28-generic 的 initramfs
↓
更新 GRUB
↓
重新启动
↓
新内核恢复正常
对应的核心命令只有几条:
uname -r
sudo -i
df -h /boot
update-initramfs -u -k 7.0.0-28-generic
update-grub
reboot
更多推荐

所有评论(0)