You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu从20.04升级到22.04后出现Initramfs解压失败及内核panic问题(LUKS+LVM环境)

Ubuntu从20.04升级到22.04后出现Initramfs解压失败及内核panic问题(LUKS+LVM环境)

看起来你在升级Ubuntu后碰到了挺头疼的启动故障:Initramfs解压失败直接触发内核panic,而且你已经试过常规的initramfs和grub更新操作却没解决问题。我来帮你梳理下可能的原因,以及几个针对性的排查修复步骤。

首先先明确你遇到的错误日志:

[    0.187279] Initramfs unpacking failed: invalid magic at start of compressed archive
[    0.373537] Kernel panic - not syncing: UFS: Unable to mount root fs on unknown-block(0,0)
[    0.373601] CPU: 0 PID: 1 Comm: swapper/0 Tainted: 5.4.0-146-generic #163-Ubuntu
[    0.373661] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./AB350 Pro4, BIOS P5.80 06/14/2019
[    0.373724] Call Trace:
[    0.373777]  dump_stack+0x6d/0x8b
[    0.373829]  panic+0x101/0x2e3
[    0.373880]  mount_block_root+0x23f/0x2e8
[    0.373933]  mount_root+0x38/0x3a
[    0.373984]  prepare_namespace+0x13f/0x194
[    0.374036]  kernel_init_freeable+0x265/0x289
[    0.374090]  ? rest_init+0xb0/0xb0
[    0.374141]  kernel_init+0xe/0x110
[    0.374192]  ret_from_fork+0x35/0x100
[    0.374263] Kernel Offset: 0x31200000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[    0.374334] ---[ end Kernel panic - not syncing: UFS: Unable to mount root fs on unknown-block(0,0) ]---

你已经完成的修复操作整理如下:

# 从Live CD打开LUKS加密分区
sudo cryptsetup luksOpen /dev/sdc5 sda5_crypt
# 挂载LVM根分区到/mnt
sudo mount /dev/mapper/ubuntu--vg-root /mnt
# 绑定必要的系统目录,保证chroot环境正常
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# 挂载boot分区
sudo mount /dev/sdc1 /mnt/boot
# 进入chroot环境
sudo chroot /mnt
# 更新所有内核的initramfs
update-initramfs -u -k all
# 重新生成grub配置
update-grub

接下来可以试试这些额外的排查修复步骤:

  • 检查Initramfs文件的完整性与压缩格式
    在chroot环境下,先查看出问题的initramfs文件类型:

    file /boot/initrd.img-5.4.0-146-generic
    

    正常情况下应该显示类似gzip compressed data或者xz compressed data的结果,如果显示异常(比如文件损坏、未知格式),说明生成过程中出了问题。可以尝试指定压缩格式重新生成:

    update-initramfs -u -k 5.4.0-146-generic -o gzip
    

    有时候升级后默认的压缩格式可能和内核不兼容,指定gzip这种兼容性好的格式可能解决问题。

  • 验证LUKS与LVM的配置正确性
    升级过程中可能会导致设备路径或UUID变化,先检查/etc/crypttab和/etc/fstab的配置:

    • 运行blkid查看/dev/sdc5的UUID,对比/etc/crypttab里对应的UUID是否一致;
    • 检查/etc/fstab里根分区的UUID或设备路径是否和/dev/mapper/ubuntu--vg-root匹配。
      如果配置有误,修改后记得重新生成initramfs和grub。
  • 确认Initramfs包含必要的内核模块
    LUKS和LVM的内核模块必须包含在initramfs里才能正常解密挂载分区,运行以下命令检查:

    lsinitramfs /boot/initrd.img-5.4.0-146-generic | grep -E '(crypt|lvm)'
    

    如果看不到dm-crypt、lvm2相关的模块,需要手动添加到/etc/initramfs-tools/modules文件中,然后重新执行update-initramfs -u -k 5.4.0-146-generic。

  • 尝试降级到旧内核启动
    从你的grub日志来看,系统里还保留着5.4.0-144-generic内核,重启后在GRUB菜单的「Advanced options for Ubuntu」里选择这个旧内核启动。如果能正常进入系统,说明问题出在新内核的initramfs生成上,可以先使用旧内核,再逐步排查新内核的问题(比如清理旧内核、重新安装新内核包)。

  • 检查boot分区的空间与文件权限

    • 运行df -h /boot查看boot分区剩余空间,如果空间不足,会导致initramfs生成不完整,可以用apt autoremove --purge清理无用的旧内核文件;
    • 检查boot目录下的内核和initramfs文件权限:
      ls -l /boot/vmlinuz-* /boot/initrd.img-*
      
      正常权限应该是-rw-r--r--,所有者是root:root,如果权限不对,用chmod 644 /boot/vmlinuz-* /boot/initrd.img-*修正。

备注:内容来源于stack exchange,提问作者viiprogrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:59:36