如何在/boot中释放更多空间?

我的/boot分区快要满了,每次重启系统都会收到警告。我已经删除了旧的内核包(linux-headers...),实际上是为了安装一个随自动更新而来的新内核版本。
安装了新版本后,分区又快要满了。那么我还能删除什么呢?是否有其他与旧内核镜像相关的文件?
以下是我/boot分区上的文件列表:
:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

目前,我正在使用的内核是 3.0.0-14-generic。

8值得一提的是,并非每个Ubuntu安装都会有一个单独的/boot分区 - 通常它们都是一个大分区。这个答案适用于那些有单独的/boot分区的人。使用LVM或“全盘”加密的人需要一个单独的/boot,否则它可能是可选的。 - thomasrutter
6如果有其他人和我一样遇到了同样的问题:在/boot没有剩余空间之后,重新生成已安装内核或通过检查/var/lib/initramfs-tools目录内容确认已安装内核时,执行"apt-get upgrade"会失败。在这种情况下,由于/fscking /boot分区上没有可用空间,无法使用apt-get删除旧内核。可以使用"dpkg -P"命令完成此操作,并清理/boot中对应的条目(以释放空间)和/var/lib/initramfs-tools目录(不会生成initrd镜像)。 - wojci
5正确回答的一个关键点是它们告诉你移除包含较旧内核版本的“软件包”。许多解决此问题的网页建议直接删除/boot分区中的“文件”;这可能短期内有效,但最终你可能会更新一个重新创建了缺失内核版本所需文件的软件包,从而导致空间不足。 - kgrittn
6https://help.ubuntu.com/community/RemoveOldKernels - jarno
1所有的答案都对我有很大帮助,让我更好地理解了问题。但是@jarno分享的链接才是我实际上用来解决这个问题的方法。 - DarkCygnus
23个回答

你有很多未使用的内核。只保留最后一个内核,删除其他所有内核:
sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

这是简写形式:
sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

删除linux-image-x.x.x-x软件包也会删除linux-image-x.x.x-x-generic

头文件安装在/usr/src目录下,用于构建外部内核模块(如专有的nvidia驱动程序和virtualbox)。如果未安装匹配的内核软件包(linux-image-*),大多数用户应该删除这些头文件软件包。

要列出所有已安装的内核,请运行:

dpkg -l linux-image-\* | grep ^ii

一条命令可以显示所有可以删除的内核和头文件,但不包括当前正在运行的内核。
kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

它选择所有以linux-headers-<某个数字>linux-image-<某个数字>开头的软件包,打印已安装软件包的名称,然后排除当前加载/运行的内核(不一定是最新的内核!)。这符合在删除较旧的、已知工作的内核之前测试较新的内核的建议。

因此,在升级内核并重新启动进行测试后,您可以使用以下命令删除所有其他内核:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

21太棒了的回答。还有一个进一步的信息会有所帮助:你怎么确定你正在使用哪个内核?大概不能仅仅假设它是最新的那个... 编辑:看起来答案是uname -a。最好确保你没有未完成的重新启动以安装新内核(就像我一样;但我注意到uname -a和“最新”的内核之间的不匹配)。 - T.J. Crowder
通过执行uname -a命令,可以确实看到当前加载的内核。(你可以使用uname -r提取内核版本部分,通常与类似于sudo apt-get install linux-headers-$(uname -r)一起使用)。你可以通过检查引导配置文件来查看下次启动时将加载的内核,通常位于/boot/grub/grub.cfg - Lekensteyn
如果这个答案对其他人的系统更通用就好了。你能提供一行代码,自动删除除最新内核镜像以外的所有镜像吗? - freddyb
5@freddyb 完成。请注意,该命令会打印/删除除已加载/启动的内核之外的其他内核 - Lekensteyn
2对我来说,GUI警告/boot空间已满通常在升级后出现。所以你的意思是这也会删除最新的升级,尚未启动过的那个?:/ - freddyb
@freddyb没错。如果你想删除除了最新版本linux-image-XXX之外的所有内容,只需将$(uname -r | sed -r 's/-[a-z]+//')替换为linux-image-XXX,其中XXX是一个类似于3.2.0-30的版本号。 - Lekensteyn
13如果由于未满足的依赖关系导致apt-get purge失败,您可以按照此建议进行操作:http://askubuntu.com/questions/171209/my-boot-partition-hit-100-and-now-i-cant-upgrade-cant-remove-old-kernels-to/171225#171225 - svandragt
11非常详尽的回答,而且在2014年仍然有效...并且仍然需要。有点荒谬的是,GUI工具仍然不能自动完成这个任务。 - allprog
1我只想提醒一下,在我的情况下,除了旧内核之外,还有匹配的linux-libc-dev。我没有注意到这一点,结果卸载了build-essential以及所有依赖它的软件包,大约2GB的大小,修复起来有些麻烦。请小心操作。 - Patrick Collins
@PatrickCollins 是的,这就是为什么你需要明确指定-image--headers部分,就像linux-{headers,image}-*一样。 - Lekensteyn
@allprog,不是每个人都在运行图形用户界面。我在我的服务器上使用Ubuntu,并通过ssh进行维护。 - Paul
1@Paul 谢谢你的留言,但我并没有说每个人都应该有图形用户界面。但是,如果有一个带有图形用户界面的桌面,并且它负责更新等事务,那么我会觉得很自然地被提供自动删除未使用内核的选项。 - allprog
3为什么这是必要的?为什么Ubuntu不会自动删除未使用的旧内核?对新用户来说,这样不是更方便吗? - byf-ferdy
7@byf-ferdy 内核是操作系统的重要组成部分,如果最新版本与您的硬件不完全兼容,则仍然可以选择从其他内核启动。一个不错的功能可能是删除所有自动安装的内核,除了最新的两个之外,其余的都超过一个月。 - Lekensteyn
@Lekensteyn - 这不仅是“一个好功能”,而是一个必要的功能。事实上,这种不是标准行为的情况已经存在了太长时间:https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1054927 - iGadget
这在2016年4月之后不再有效。 - Jonathan
2sudo dpkg --remove 是用来移除未使用的内核非常有用的命令(来源)。当我在空间严重不足时运行上述的 purge 命令对我没有起作用,但是在我手动移除一个内核后它确实起作用了。 - Vivek Subramanian
@Jonathan Leaders:你能详细说明一下吗?现在是2016年8月,对我来说它仍然有效。在什么情况下它对你失效了呢? - Hinz
没错,对我来说还是有效的。可能是因为在/boot目录中空间不足而导致某些其他软件包无法安装。解决方法:在运行apt命令之前手动删除文件:rm /boot/vmlinuz-...其中...是即将被删除的旧内核版本。 - Lekensteyn
2我不确定为什么它对我没起作用,但最后我使用了bootnukem,它有效。https://github.com/erichs/bootnukem - Jonathan
如果你也认为这是一个错误,请在这里投票:https://bugs.launchpad.net/ubuntu/+source/update-manager/+bug/1183692 - FriendFX
1我有一些剩下的包,显示为“rc”(剩余的配置文件),使用dpkg -l命令可以看到。我必须在这些包上运行sudo dpkg --purge命令。我无法对它们运行apt-get purge命令。 - Fabien
除了@Fabien的好建议之外,运行update-initramfs后,在/boot目录下可能仍然存在剩余的initrd.img文件。如果是这种情况,并且所有相关的软件包都已被清除,请尝试在/var/lib/initramfs-tools/目录中检查与那些内核版本匹配的配置文件,并手动删除它们,然后从/boot目录中删除initrd.img文件,最后重新运行update-initram-fs命令。 - naught101
最近,这个命令对我来说表现得很奇怪——它提供了安装一个与过时内核对应的未签名镜像包的选项。我怀疑需要添加,modules - Jesse Glick
现在是2021年,你还得做这个。真是荒谬。 - tomi.lee.jones
删除了我的错误:引导卷上的磁盘空间不足,只剩下29.4 MB的磁盘空间。 - questionto42
这与我当前运行的内核匹配,即linux-image-5.10.0-18-amd64。我修复了内核匹配部分,以包括字母后面的数字uname -r | sed -r 's/-[a-z]+[0-9]+//'。我不是在Ubuntu上,所以不知道也许只有Ubuntu在版本号后面添加amd而不是64 :/ - h3dkandi
十多年过去了,答案依然正确。真是令人惊叹... - Philipp Jardas

您的引导分区已满。由于这是一个内核更新,这些文件将被复制到引导分区,因此您需要清理它。这里有一篇博客文章,将向您展示如何使用一个命令清除旧的内核映像。我将简要介绍该方法。使用以下命令打印出当前内核版本:
uname -r

然后使用这个命令打印出所有已安装的内核,但不包括最新的内核:
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

确保您当前的内核不在该列表中。请注意,这是最后一个命令的主要部分(在下方)。要卸载并删除这些旧的内核,您将需要将这些参数传递给:
sudo apt-get -y purge

现在我们可以通过将这最后两个命令结合起来,做我们想做的一切。
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

只需要一个命令,就能为你处理一切。我可以确认这个方法完美有效,但是在互联网上不要轻易相信任何人。:) 如果想了解更多信息,博客文章详细解释了命令的每个部分的作用,请仔细阅读以确保它能满足你的需求。

这也与linux-libc-dev:amd64相匹配。 - Frederick Nord
意外删除"linux-libc-dev:amd64"会引起什么问题? - ConfusedStack
@FrederickNord 谢谢你提醒。已经修复了这个问题。如果不修复的话,编译C程序会遇到一些困难。 - dward
14

这个命令听起来不错,但是当我运行它时,出现了与我想要安装某些东西时相同的错误,因为启动盘已满:

以下软件包有未满足的依赖关系: linux-image-extra-4.2.0-27-generic:依赖于linux-image-4.2.0-27-generic,但它将不会被安装 linux-image-extra-4.2.0-30-generic:依赖于linux-image-4.2.0-30-generic,但它将不会被安装
- Alex

sudo apt-get autoremove

此命令正在自动执行任务。

11正如其名,apt-get AUTOremove是一种自动化操作,系统会根据你的意图来进行“最佳猜测”。它不应被用作常识系统管理的替代品。这种方法的问题在于:如果你(或者一个更新)移除了依赖列表中的一个包,auto-remove功能将希望移除依赖列表中的所有其他包,导致你的系统没有可用的桌面(有时甚至完全崩溃)。 - Rinzwind
参考资料:这条评论的一个来源:http://www.linuxquestions.org/questions/debian-26/is-this-apt-get-autoremove-operation-safe-935534/ - Rinzwind
9如果已安装了linux-image-generic并且没有显式安装新内核,这将删除旧内核。常识告诉我们,在未阅读更改内容之前不应接受对系统的任何更改。如果在使用此命令之前已经运用了常识,那么就不会有任何问题。 - mchid
2@Rinzwind - 这个命令通过删除旧的'linux headers'文件,清空了我磁盘空间中的250 mb。 - Chinmaya B
最棒的回应! - Maykonn
@Rinzwind 是的,dist-upgrade 在 Debian 上也是一个问题,但在 Ubuntu 上不是。相信我,在 Debian 上发生过这种情况,只剩下无法工作的东西,但在 Ubuntu 上没有。 - mchid
这对我来说也做得很好。简单而有效。 - rtome
9如果在出现空间不足的情况之前使用autoremove,它是有效的。然而,一旦apt耗尽空间并中止(并且用户最终注意到问题),运行autremove或任何其他基于apt的解决方案已经为时已晚。如果您遇到这种情况,请尝试其中一种基于dpkg的解决方案。 - user535733
黄金答案!! - Cesar Bielich
执行命令:df -k /boot 文件系统 1K块 已用 可用 使用% 挂载点 /dev/sda2 483946 127698 331263 28% /boot - Samir Sadek
1这对我来说非常有效,但是在之后一定要用apt-get update更新你的系统。我认为它会重新安装任何不应该被删除的东西。 - A. Bergeron
1这是做事情的最佳和唯一正确的方式,遵循规则。 - iWizard
看到ll /boot之后真是太令人满意了!/boot的使用空间降低到了100MB(25%)。 - wisbucky
目前Ubuntu建议这样做(当尝试运行软件更新器时,如果我没记错的话)。 - user

Synaptic软件包管理器可以轻松选择和删除旧的内核镜像。 如果您尚未安装Synaptic,请按照以下步骤进行安装:
sudo apt-get install synaptic

启动应用程序并选择显示的选项。

根据您在/boot文件夹中的文件,您应该能够突出显示所有版本为“2.6.x”(其中x介于31到38之间)的“linux-”软件包。

右键单击这些Linux软件包中的每一个,并选择“标记为完全删除”选项。最后点击应用按钮。这将删除所有文件及其相关文件。您的/boot文件夹现在应该更加整洁。


我使用的是14.04版本。过去我曾通过命令行处理过这种情况,但今天我决定尝试一下这种方法...对我来说,我的Linux镜像位于已安装(手动)而不是已安装(本地或过时)的位置。 - Ryan
12哦不。我无法安装Synaptic,因为/boot上没有空间! - John McGehee
@JohnMcGehee,fsck和parted应该可以解决你的问题。 - FlipMcF

感谢您详细描述问题的帖子,这让我朝着正确的方向前进。虽然保留以前的内核文件很有用,但您可以一次性删除所有文件,请查看此帖子:
如何删除所有未使用的Linux内核头文件、镜像和模块 通过命令行完成。如果您是远程操作,请使用类似WINSCP的工具打开一个终端会话,然后将其粘贴进去,效果非常好。
以下是从文章链接中复制的内容,建议您阅读完整文章:
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

列出所有内核:
dpkg --list 'linux-image*'

显示当前内核:
uname -r

列出除了当前内核以外的所有内核:
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

确保您当前的内核不在该列表中。
删除所有的内核,除了当前使用的那一个。
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

清除其他杂项:
sudo apt-get autoremove

如果安装/卸载文件仍然会给出启动磁盘空间错误,则直接从/boot目录中删除一个镜像。
ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

注意:在删除任何镜像之前,请再次检查当前的内核镜像。

如果仍然出现错误,请重复以下命令以删除不需要的内核:

sudo dpkg --purge linux-image-X.X.X-XXX-generic linux-image-extra-X.X.X-XXX-generic linux-signed-image-X.X.X-XXX-generic
sudo dpkg --purge linux-image-Y.Y.Y-YYY-generic linux-image-extra-Y.Y.Y-YYY-generic linux-signed-image-Y.Y.Y-YYY-generic

sudo apt-get -f install

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

我按照这个方法操作,但在执行第一步时出现了一个小错误,这并不是这里的回答有问题,而是我的错。在这之后,我无法正常启动电脑,屏幕上一直停留在OEM标志处,当我运行主菜单中的正常启动项时。通过选择正确的内核来启动解决了这个问题,我从这里顶部的命令中知道了正确的内核。关于此问题的更多信息,请参见Ubuntu 20.04安装后黑屏,无法启动。有了这个解决方案,我可以回到这里,并成功运行了顶部的命令。 - questionto42
上面的评论不应该把答案说得那么糟糕!最终它还是起作用了,而且错误很可能是我自己的错/我这边的系统设置问题。我又让它重新工作了,并且通过这里的答案清理了启动驱动器上的旧内核。也许只是巧合,但在我更新系统时也出现了一个错误,重启后只剩下一个内核安装:5.4.0-113(之前是5.4.0-100)。我遇到的错误可能只是更新问题的延续,与这里的命令无关。 - questionto42

请注意,此回答中的软件自2016年以来不再受支持。我不知道有什么替代方案...

这是对一个旧问题的新回答,但清理这个东西(以及其他内容)的简单方法是安装Ubuntu Tweak。安装方法如下:

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

然后你可以运行Ubuntu Tweak,进入"清理工具"选项卡,然后只需要点击三下就可以了。

Ubuntu tweak janitor for old kernels

最好留下最后一个内核(你永远不知道)或者一个众所周知的工作内核以确保安全,不过这很容易自定义。
你可以使用同样的工具清理很多东西 --- 只要记住,如果你清理缩略图缓存或者TB缓存,系统在需要时将不得不重新构建它们。

我试图安装Ubuntu Tweak并访问存储库网站。它显示只适用于13.10及之前的版本。你是否有适用于15.04的更新版本? - JayCouture.com
@JayCouture.com 网站上的版本是适用于14.04("适用于13.10及之前版本" 是一个指向旧版本的链接)。我不清楚是否有适用于14.10或15.04的版本。 - Rmano
Ubuntu Tweak自2016年以来已不再维护。请查看https://launchpad.net/ubuntu-tweak。 - Flimm
@Flimm 太对了...我更新了答案,谢谢。 - Rmano

我通过使用dpkg直接删除软件包来解决了这个问题。虽然软件包仍然在dpkg -l中列出,但文件已从/boot中删除,释放了空间。
phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

在这之后,apt-get -f install 解决了我的依赖问题,世界恢复了平静。
然而,我不会接受自己的这个答案,因为我仍然需要知道是否应该增加我的 /boot 大小或者做其他操作。

你要么根本不应该有一个单独的/boot分区,要么你应该增加它的大小,因为100MB太小了。 - psusi
1谢谢,我通过以下命令进行删除: sudo dpkg --remove linux-headers-3.5.0-28* - TiloBunt
2并使用 sudo dpkg --remove linux-image-3.5.0-28* 命令来删除镜像,通过 df -h 命令进行检查。 - TiloBunt
谢谢,这对我也有帮助。我删除了一些旧的内核(不是我当前正在使用的那个),然后执行了apt-get -f install命令。另外,别忘了之后执行apt-get autoremove命令,可能会删除其他不需要的内核。 - Yajo

你可以停止使用单独的/boot分区,这样就不会有那么有限的空间了。要做到这一点,先卸载该分区,然后将其挂载到其他位置,并将所有文件复制到根分区的/boot目录中,然后从/etc/fstab中删除该条目并重新安装grub。例如(你需要使用正确的分区):
sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

您可以使用GParted删除旧的/boot分区,并可能扩展根分区以利用该空间。要扩展根分区,您需要从livecd引导,并且空闲空间需要立即位于右侧。如果/boot分区当前位于根分区的左侧,则您需要首先将根分区向左移动,然后再进行扩展,但这可能需要很长时间,所以可能不值得麻烦。

12将/boot移动到我的主分区对我来说不是一个解决方案,因为除了/boot之外的所有内容都已加密。很抱歉,你无法从我的问题中得知这一点。 - user6722
如果以上的解决方案因为引导分区没有任何空间,或者您反复遇到“空间不足”问题而无法使用,请尝试此方法。但首先请仔细阅读为什么有时需要一个 /boot 分区的原因:(https://help.ubuntu.com/community/DiskSpace) - svandragt
@svandragt,现在基本上没有必要再使用/boot分区了。唯一的理由可能是如果你的BIOS损坏无法识别整个磁盘,但是过去十年内制造的任何机器都不会有这样的限制。其他遗留问题,如使用RAID或LVM,现在都可以被Grub2正确处理。 - psusi
有几个原因可以拥有一个单独的引导分区。但我不确定这些好处是否值得增加设置的复杂性。1. 操作系统可以通过ext2获得更快的启动速度。2. 通过将/boot挂载为只读,可以增加安全性(rootkits等),甚至在操作系统运行时保持未挂载状态。3. grub(1)仍然存在一些与ext4相关的问题。4. 运行lvm(grubv1)需要此分区。尽管这不适用于默认的Ubuntu设置。 - David Cahill
lsblk 可以用来确定哪个分区是什么 - Mr Purple
大多数遇到这个问题的用户在安装过程中选择了“整盘加密”选项。他们没有意识到整盘加密需要逻辑卷管理(LVM),而在16.10及之前的版本中,LVM需要一个单独的/boot分区。这些用户没有现实的选择来停止使用单独的/boot分区。 - user535733
@user535733,实际上,grub2可以直接从LUKS加密的分区引导。然而,安装程序仍然默认设置/boot分区。请参阅https://launchpad.net/bugs/1062623。 - psusi
@psusi,同意...看起来在17.04中已经实现了。如果有人愿意写出简单的指导说明,以消除16.10及之前版本中加密分区的独立/boot分区,我一定会点赞。 - user535733

从上面的答案中汲取最好的部分,我的可靠方法是这样的:
- 使用 `uname -a` 命令查找正在运行的内核。 - 使用 `dpkg -l linux-{headers,image}-\* | grep ^ii` 命令列出当前安装的所有与内核相关的软件包。这将包括正在运行的内核。 - 使用 `sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}` 命令删除旧的内核。将 `xx,yy,zz` 替换为您要删除的内核版本列表 - 这些是前一个命令列出的比当前运行的内核旧的构建版本。请确保不要删除当前运行的内核,否则系统将无法启动。您可能还需要将内核版本从 `3.16.0` 更改为您系统上已安装的版本。 - 可选地,执行额外的 `sudo apt-get autoremove` 命令 - 这将删除旧内核的任何剩余依赖项,这些依赖项不再被当前内核所需,从而释放更多空间。
你可能安装了不匹配的内核版本的头文件,或者反之亦然—只需在命令中包含所有这些版本即可。APT会抱怨某些软件包无法删除,因为它们没有安装,但这不会造成任何损害。

如果出现问题...

  • 如果apt命令由于“设备上没有剩余空间”错误而失败,请改用相应的dpkg命令:sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}
  • 如果dpkg命令仍然无法工作,因为linux-image软件包是同一版本的linux-headers软件包所必需的(您也想卸载它们),则dpkg可能未能解决此问题。重新检查dpkg -l的输出,并在命令行上指定任何软件包名称后缀。例如,在我的某个系统上,最终起作用的命令是sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae
  • 如果遇到其他错误,请寻求帮助—您可能有一个与您想象的不同的问题。

@user535733 通常情况(至少是我一直遇到的情况)是/boot上仍然有一些空间,只是不足以安装另一个内核包。在这些情况下,上述方法效果很好。但是,如果你愿意,可以添加相应的dpkg命令。至于purge,它不是一种“强制删除”的方式。与remove不同的是,purge会同时删除配置文件。由于内核包不会安装配置文件,对于内核包来说,removepurge的效果是一样的。 - user149408
添加了第四个项目,附带相应的dpkg命令。 - user535733
答得真棒,伙计!我个人的情况也是有“image-generic”文件,但只需调整正则表达式:)谢谢你。 - DarkCygnus