不久前,我收到了一个警告,提示我的/boot
分区几乎已满或没有剩余空间了。是的,我使用的是一个独立的/boot
分区,这在如今并不常见,但我相信它在某些情况下仍然非常有用。
这是我第一次遇到这样的错误,让我感到困惑。虽然在Ubuntu(或基于Ubuntu的发行版)上有多种方法可以释放空间,但并不是所有方法都在这种情况下有用。
因此,我决定编写这篇文章,介绍我采取的步骤来释放/boot
分区中的一些空间。
方法一:使用apt autoremove
你不必是一个终端专家来执行这个操作,只需一个命令,你就可以删除未使用的内核,以释放/boot
分区中的空间。
你只需输入以下命令:
sudo apt autoremove
这不仅会删除未使用的内核,还会清理掉你不需要的依赖项,或者那些没有被任何已安装工具所需要的依赖项。
一旦你输入这个命令,它会列出将要被删除的内容,然后你只需要确认操作。如果你感到好奇,你可以仔细查看它删除了什么。
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linux-headers-5.4.0-81 linux-headers-5.4.0-81-generic linux-image-5.4.0-81-generic linux-modules-5.4.0-81-generic linux-modules-extra-5.4.0-81-generic
0 upgraded, 0 newly installed, 5 to remove and 29 not upgraded.
After this operation, 470 MB disk space will be freed.
Do you want to continue? [Y/n]
你需要按下Y
来继续。
需要注意的是,这个方法只在你的/boot
分区仍有一点空间并出现警告时才有效。但如果你的/boot
分区已满,APT甚至可能无法工作。
在下一个方法中,我将介绍两种不同的方法,通过这两种方法,你可以使用图形界面和终端来删除旧的内核以释放空间。
方法二:手动删除未使用的内核(如果apt autoremove
不起作用)
在尝试删除旧内核以释放空间之前,你需要确定当前正在使用的内核,并确保你不删除它。
要检查你的内核版本,可以在终端中输入以下命令:
uname -r
uname
命令通常用于获取Linux系统的信息。在这里,这个命令会显示当前正在使用的Linux内核版本。它应该看起来像这样:
5.4.0-81-generic
现在,你知道了你当前使用的Linux内核是什么,你只需要删除与这个版本不匹配的内核。你应该把它记下来,以确保你不会意外删除它。
使用图形界面工具删除旧的Linux内核
你可以使用Synaptic Package Manager或类似的工具(如Stacer)来开始。个人而言,当我遇到/boot
分区已满且APT无法正常工作时,我使用了Stacer来删除旧的内核。让我展示你Stacer的使用方法。
首先,你需要启动“Stacer”,然后在界面中导航到软件包卸载器,如下面的截图所示。
stacer
在这里,搜索“image”,你将找到Linux内核的镜像文件。你只需删除旧的内核版本,而不是你当前正在使用的内核镜像。
linux-image-5.4.0-80-generic
linux-image-5.4.0-81-generic
我在上面的截图中标出了我当前使用的内核和旧的内核版本,因此你必须对你系统上的内核版本要小心。
你不需要删除其他任何东西,只需删除那些旧的内核版本。
同样,只需在软件包列表中搜索“headers”,并删除旧的版本,如下所示。
linux-headers-5.4.0-80-generic
linux-headers-5.4.0-81-generic
警告:不要删除“linux-headers-generic”。只关注带有版本号的那些。
这样,你就完成了,APT将恢复工作,你已成功释放了/boot
分区的一些空间。同样,你可以使用任何你熟悉的其他软件包管理器来执行此操作。
使用命令行删除旧的内核
这与使用图形界面相同,只是使用终端而已。因此,如果你无法使用图形界面(例如,如果是远程机器/服务器)或者你更喜欢使用终端,你可以按照以下步骤操作。
首先,使用以下命令列出所有已安装的内核。
ls -l /boot
它应该看起来像这样:
total 285380
-rw-r--r-- 1 root root 24838092 Jul 19 2021 config-5.4.0-77-generic
-rw-r--r-- 1 root root 24838092 Oct 7 2021 config-5.4.0-88-generic
-rw-r--r-- 1 root root 24838092 Jan 20 13:16 config-5.4.0-91-generic
-rw-r--r-- 1 root root 3181 Mar 1 2021 grub.cfg
-rw-r--r-- 1 root root 19604448 Jul 19 2021 initrd.img-5.4.0-77-generic
-rw-r--r-- 1 root root 19604448 Oct 7 2021 initrd.img-5.4.0-88-generic
-rw-r--r-- 1 root root 19604448 Jan 20 13:17 initrd.img-5.4.0-91-generic
-rw-r--r-- 1 root root 1827048 Mar 1 2021 memtest86+_multiboot.bin
-rw-r--r-- 1 root root 1839672 Mar 1 2021 memtest86+.elf
-rw-r--r-- 1 root root 1843712 Mar 1 2021 memtest86+_lpia.bin
-rw-r--r-- 1 root root 2058 Jul 19 2021 System.map-5.4.0-77-generic
-rw-r--r-- 1 root root 2058 Oct 7 2021 System.map-5.4.0-88-generic
-rw-r--r-- 1 root root 2058 Jan 20 13:16 System.map-5.4.0-91-generic
-rw-r--r-- 1 root root 67297200 Jul 19 2021 vmlinuz-5.4.0-77-generic
-rw-r--r-- 1 root root 67297200 Oct 7 2021 vmlinuz-5.4.0-88-generic
-rw-r--r-- 1 root root 67297200 Jan 20 13:17 vmlinuz-5.4.0-91-generic
标记为“old”的或与当前内核版本不匹配的内核就是你可以删除的未使用内核。
现在,你可以使用rm
命令从/boot
分区中删除特定的内核,使用以下命令中的每一个(每个命令删除一个内核):
sudo rm /boot/vmlinuz-5.4.0-77-generic
确保检查你系统的版本 - 它可能与你的系统不同。
如果你有很多未使用的内核,这将需要一些时间。因此,你也可以使用以下命令一次性删除多个内核:
sudo rm /boot/*-5.4.0-{77}-*
需要澄清的是,你需要将内核版本的最后部分/代码用逗号分隔,以一次性删除它们。
例如,如果我有两个旧的内核版本5.4.0-77-generic和5.4.0-88-generic,那么命令将是:
sudo rm /boot/*-5.4.0-{77,88}-*
如果你不想在grub启动菜单中看到旧的内核版本,你可以使用以下命令简单地更新grub:
sudo update-grub
就这样。你完成了。你已经释放了空间,如果你的/boot
分区已满并导致APT出现问题,你也可能已经修复了它。
在某些情况下,你可能需要输入以下命令来修复损坏的apt(我在论坛上注意到有些人这样做):
sudo dpkg --configure -a
sudo apt install -f
请注意,除非你发现APT出现问题,否则不需要输入上述命令。个人而言,我没有需要这些命令,但我发现它们对一些人在论坛上很有用。