从 20.04 到 22.04 的 /boot 空间要求非常高,无法升级

Set*_*own 21 upgrade 22.04

尝试升级到 22.04 时出现以下错误

升级已中止。升级需要磁盘“/boot”上总共 616 M 的可用空间。请在“/boot”上释放至少 144 M 的额外磁盘空间。您可以使用“sudo apt autoremove”删除旧内核,还可以在 /etc/initramfs-tools/initramfs.conf 中设置 COMPRESS=xz 以减小 initramfs 的大小。

我已经完成了所有常见的删除旧内核等操作,但是这个空间量几乎占据了所有的 Ubuntu 默认启动驱动器空间,所以没有多少可用空间可以让它通过。

尺寸要求的大幅增加使我相信这是某种形式的错误。除了解密和调整分区大小之外,我可以在这里尝试什么吗?

Est*_*her 38

这是由于对 initramfs 使用不同的压缩方法而导致的已知问题。新的默认值lz4压缩在启动时解压缩/读取速度更快,但需要大量空间来/boot创建。这意味着分区较小的人/boot将没有足够的空间来生成 initramfs。

解决方法是将压缩算法更改为xz推荐的(或占用更少空间的其他算法)。

为此,请按照错误消息中的说明编辑/etc/initramfs-tools/initramfs.conf并设置。COMPRESS=xz之后,您应该能够升级。

  • 另一种可能的解决方法(但部分危险)是将“MODULES=most”更改为“MODULES=dep”。这会显着缩小 initramfs,因为它只包含挂载根分区所需的模块,但缺点是如果系统配置更改太多,系统将不再启动——基本上,在相同情况下 Windows 也不会启动引导,因为它们也构建了一个包含安装系统磁盘所需的驱动程序的存档,该驱动程序在内核从 BIOS 接管之前由引导加载程序加载。 (4认同)

Set*_*own 24

我最终能够通过 Esther 链接的错误报告中的压缩技巧解决这个问题。

该错误表明 initramfs.conf 必须更改为 COMPRESS=xz。然而,仅仅改变配置是没有效果的。需要使用以下命令重建图像:

sudo update-initramfs -u -k all
Run Code Online (Sandbox Code Playgroud)

更改为 COMPRESS=xz 的影响很小,但不足以允许安装在默认大小的引导分区上。设置 COMPRESS=lzma 并重建映像确实允许安装继续。

另外值得注意的是,错误消息显示运行命令“sudo apt autoremove”,但这同样不会自行释放启动空间。多余的内核通常必须像这样去除。

  • `xz` 使用LZMA算法;据推测“lzma”压缩程序只是有不同的默认压缩级别。我假设你可以使用“COMPRESS=xz”和压缩级别设置得到相同的结果,但是这是在 Ubuntu 的脚本中完成的。(如果脚本允许您将 args 作为命令的一部分包含在内,则可能使用“COMPRESS='xz -9'”来实现非常慢的最大压缩。)但这并不是更好;只是“xz”是相同压缩流的更广泛使用的文件格式(元数据)。如果“lzma”在您的系统上运行,请使用它。 (4认同)
  • 感谢您指出错字,我已经编辑了答案。当我从默认的 lz4 更改为 xz 时,它确实将所需的空间量减少到 580mb 左右,但不足以完成更新。当我切换到 lzma 后,这很有效。 (2认同)