解决:Ubuntu 升级 22.04.2 后重启报错“Initramfs unpacking failed”
- Published on
问题描述:
将 Ubuntu 从 20.04 升级到 22.04 后重启系统黑屏开不了机,报错:Initramfs unpacking failed: invalid magic at start of compressed archive;关机再重启会进入 Grub,如下图所示,如果选最上方的 *Ubuntu
会再次以正常的模式重启然后失败报错;点击 *Advanced options for Ubuntu
* 会进入 恢复模式(recovery mode)。
(我没有拍照,图片来自网络)
我的系统里装有 5.4 和 5.8 两个内核,因为问题就出在 5.8 内核的配置上,所以只有选择更低级的 5.4 内核且在恢复模式下才能进入系统。如下图所示,恢复模式 下可以有这些辅助解决问题的操作:
(图片同样来自网络)
如果选择第一项 resume
是可以开机的,但是进去后鼠标、触摸板、网络、蓝牙全都不能用,而且按上图提示文件系统也是只读状态,所以基本没用。
关键是倒数第二个选项 root
,选中这一项可以通过命令行对系统做各种关键操作,一是备份数据到移动硬盘(其实升级系统前就应该做的!大意了,这次就是教训,虽然问题解决的过程中没有威胁到数据,但重要数据备份后再折腾还是踏实很多),二就是解决问题了。
问题解决:
注:因为是在以 root 身份输入命令,所以权限很高,不用 sudo,且对文件系统的读/写权限也都具备
cd /etc/initramfs-tools
nano initramfs.conf
如下图所示,系统升级后,默认的压缩方式是 zstd
即 COMPRESS=zstd
,但是我的系统里没有 zstd
这种压缩算法,把这个参数改为我有的 gzip
就可以了。
注:我先是跟着某位网友改成了 lz4
,但我的系统里其实也没有 lz4
压缩算法,改为自己有的就可以了。怎么知道我没有 lz4
呢,因为改成这个之后再 update-initramfs
(如下方命令所示) 系统会提示说没有 lz4
所以自动用了 gzip
。
总之就是修改 initramfs.conf
配置文件然后保存退出并更新:
update-initramfs
update-grub
reboot
警告:
我看到的经验贴都说做一个 Ubuntu 系统 U 盘,开机时通过 U 盘 boot,然后以 chroot
的方式对破坏掉的系统做修改补救。
我研究了,U 盘也做了,但是想着既然恢复模式下可以凭 root 身份直接修改文件,这不更省事直接嘛,就怀着试试看的心情做了以上的尝试和修改,结果顺利开机、新系统正常用了起来。
前面还感觉洋洋得意,自己以更简单的方式解决了问题。但现在想来其实这样做或许并不好,因为我在直接修改系统内核,好像相比 chroot 的方法有更高的风险因为误操作进一步破坏内核。
备注:
关于这个 initramfs,我现在的理解就是系统启动时会用到的一个小的临时替代性的文件系统,在系统真正的文件系统被正式挂载前,它先临时被提取到内存中,被内核用来启动 init 进程、完成后继开机所需的准备和操作。
0828 更新:根据《精通 Linux》讲解,‵initramfs‵ 是 gzip
压缩的 cpio 归档文件。开机时小部分内核需要的驱动模块和工具被加载引导程序 GRUB 提前加载到内存中,内核启动后,将这些文档内容读入一个临时的 initramfs,挂载到 /
上,将用户模式切换给 initramfs 上的 init,使用其中的工具让内核加载 root 文件系统需要的驱动模块,最后这些工具挂载真正的 root 文件系统,启动真正的 init。
参考:
Initramfs unpacking failed: invalid magic as start of compressed
各种材料看到最后、某位网友给出的看起来就极有希望的、清晰的答案,只是我改的不是 mkinitcpio.conf,/etc 下面好像也没有这个文档,但 cpio 的确和 initramfs 有密切的关系。
(完美解决)linux 开机进入 initramfs 无法开机
问题相关但不同,这篇的解决方案就是 Chroot 思路。
linux 生成 initramfs,Linux 启动过程与 initramfs
关于开机启动和 initramfs
Ubuntu 关于 Chroot 的官方文档介绍
What's the proper way to prepare chroot to recover a broken Linux installation?
还是关于 Chroot 操作
数据备份!升级系统前就该做的。
很喜欢这本书,关于 Linux 的介绍,无论是它在深浅详略上取的平衡、还是选择以树莓派为切入路径,都深得我心。对于“万物皆文件“的顿悟就是在它的指引下完成的,终于理解 Linux 的文件系统是怎样一棵树了 🌿 🌳
比心作者 ❤️