Ubuntu 升级过程中 /boot 目录空间不足的问题解决

Ubuntu 升级过程中 /boot 目录空间不足的问题解决

内容

本文记录了Ubuntu 升级过程中 /boot 目录空间不足的问题解决过程.

背景

当我从 Ubuntu 18.04 升级到 20.04 时, 报错如下:

1
2
3
4
5
6
The upgrade has aborted. 
The upgrade needs a total of 233 M free space on disk '/boot'.
Please free at least an additional 158 M of disk space on '/boot'.
You can remove old kernels using 'sudo apt autoremove'
and you could also set COMPRESS=xz in /etc/initramfs-tools/initramfs.conf
to reduce the size of your initramfs.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cx@cxHD:/boot $ sudo dpkg --get-selections |grep linux-image
linux-image-5.4.0-100-generic deinstall
linux-image-5.4.0-104-generic deinstall
linux-image-5.4.0-105-generic deinstall
linux-image-5.4.0-107-generic install
linux-image-5.4.0-110-generic install
linux-image-5.4.0-79-generic deinstall
linux-image-5.4.0-80-generic deinstall
linux-image-5.4.0-81-generic deinstall
linux-image-5.4.0-84-generic deinstall
linux-image-5.4.0-86-generic deinstall
linux-image-5.4.0-87-generic deinstall
linux-image-5.4.0-89-generic deinstall
linux-image-5.4.0-90-generic deinstall
linux-image-5.4.0-91-generic deinstall
linux-image-5.4.0-94-generic deinstall
linux-image-5.4.0-96-generic deinstall
linux-image-5.4.0-99-generic deinstall
linux-image-generic-hwe-18.04 install
linux-image-unsigned-5.4.0-109-generic install

df -h 检查一下发现剩余空间不多了(以后/boot 目录要多分配一些空间, 或者是直接挂载在根目录下):

1
/dev/nvme0n1p6  269M  180M   72M  72% /boot

解决办法

按照报错提示

先删除 /boot 下的旧内核, 如果空间仍旧不足, 采用压缩率更高的 xz 压缩软件.

查看已经安装的内核版本

1
2
cd /boot
sudo dpkg --get-selections | grep linux-image

输出为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
linux-image-5.4.0-100-generic			deinstall
linux-image-5.4.0-104-generic deinstall
linux-image-5.4.0-105-generic deinstall
linux-image-5.4.0-107-generic install
linux-image-5.4.0-110-generic install
linux-image-5.4.0-79-generic deinstall
linux-image-5.4.0-80-generic deinstall
linux-image-5.4.0-81-generic deinstall
linux-image-5.4.0-84-generic deinstall
linux-image-5.4.0-86-generic deinstall
linux-image-5.4.0-87-generic deinstall
linux-image-5.4.0-89-generic deinstall
linux-image-5.4.0-90-generic deinstall
linux-image-5.4.0-91-generic deinstall
linux-image-5.4.0-94-generic deinstall
linux-image-5.4.0-96-generic deinstall
linux-image-5.4.0-99-generic deinstall
linux-image-generic-hwe-18.04 install

可以分为 2 类, install: 已经安装, deinstall:没有安装此内核, 但是在配置文件中还残留它的信息, 也有可能是以前卸载的时候不彻底.

查询当前内核版本:

1
uname -a 

输出为:

1
Linux cxHD 5.4.0-110-generic #124~18.04.1-Ubuntu SMP Fri Apr 22 12:01:21 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

可以看出当前内核为 5.4.0-110-generic, 需要分别把 install 以及 deinstall 类别的旧内核卸载.

1
2
sudo apt purge linux-image-5.4.0-107-generic # 卸载 install 类旧内核
sudo dpkg -P linux-image-5.4.0-105-generic # 删除 deinstall 类旧内核

但是卸载 install 类旧内核后会生成 unsigned 类的文件, 也同样卸载之:

1
sudo apt purge linux-image-unsigned-5.4.0-107-generic

可以看到 /boot 下剩余空间提升了一些

1
2
/dev/nvme0n1p6  269M  180M   72M  72% /boot #before
/dev/nvme0n1p6 269M 76M 175M 31% /boot #after

但是距离要求的 158MB 还有些距离, 因此采取报错提示的第二步:

1
vim /etc/initramfs-tools/initramfs.conf

COMPRESS=gzib 字段改为 COMPRESS=xz.

xz 的压缩率普遍比 gzib 高出 30%.

最后再尝试一下升级, sudo do-release-upgrade -m desktop 成功升级.

扩充 /boot 的空间

最简单的办法是直接扩容, 例如使用 Gparted 工具有 resize 选项:

但是前提是要扩容的分区后面有空间. 不幸的是, 我没有考虑这些.
也就是说如果你对一个分区觉得以后有可能会扩容, 最方便的做法是把他分在空白备份空间的最前面.

最简单的方法不支持, 还有别的办法.

思路1
例如下面的链接经验是通过 USB Ubuntu 系统将 /boot 后面的 swap 分区分出来一部分给 /boot 达到扩容的目的.
https://www.cnblogs.com/ldylan/p/14238205.html
更详细的做法: https://www.jianshu.com/p/e4dcb744b3a1

思路2
首先在富裕的目录下挂载一个目录, 将其设置为 /boot, 然后把之前 /boot 里面的内容拷贝进去.
实践教程:https://blog.csdn.net/TengYun_zhang/article/details/121858598

由于本次仅用报错提示的做法已经完成了扩容, 后面的 2 种思路没有进行验证, 望知晓.

Ubuntu 升级过程中 /boot 目录空间不足的问题解决

https://www.chuxin911.com/boot_dir_expansion_20220509/

作者

cx

发布于

2022-05-09

更新于

2022-07-06

许可协议