我为/boot分区分配了200 MB内存。每当我尝试更新内核时,都会收到一条错误消息,该错误消息基本上指出/boot已满。

我该如何清理/boot并删除/备份较旧的内核?

评论

请参阅Ubuntu社区Wiki

如果/ boot已满,请参阅askubuntu.com/questions/263363/…

#1 楼

命令行方法:
首先检查您的内核版本,这样您就不会删除正在使用的内核映像,运行:
uname -r

现在运行此命令以获取已安装内核的列表:
dpkg --list 'linux-image*' | grep ^ii

,并通过运行以下命令删除不需要/不再需要的内核:
sudo apt-get remove linux-image-VERSION

将VERSION替换为要删除的内核版本。
删除较旧的内核之后,可以运行此操作以删除不再需要的软件包:
sudo apt-get autoremove

最后,您可以运行此更新grub内核列表:
sudo update-grub


评论


sudo dpkg --list'Linux映像*'| grep ^ ii使仅查看已安装的内核变得容易一些。我也认为update-grub是无害的,但不是绝对必要的,它在卸载内核时自动运行。

–尼尔森
2014年5月5日在16:15



使用sudo dpkg --list'linux-image *'| grep ^ ii | awk'{print $ 2}'|排序egrep“ [0-9] -generic” |头-n -3 | tr'\ n'''; echo“”获取要与sudo apt-get remove一起使用的软件包名称的列表。 head -n -3用于将3个最新内核保留在系统中。

– Sithsu
2014年11月16日6:31



我的简单内胆:apt-get remove`dpkg --list'linux-image *'| grep ^ ii | awk'{print $ 2}'\ | grep -v \`uname -r \``

– gcb
2015年3月1日20:49



sudo apt-get autoremove应该足够了(通常只剩下最后三个内核)

–mbx
16年2月24日在16:01

这是一个很好的答案,但我怀疑它是否可以在大多数(如果不是全部)情况下工作:问题是/ boot已满,因此apt-get会因某些错误代码或其他原因而失败。下面的答案有点“骇客”(我必须承认,我必须精疲力竭才能在/ boot中发布rm -rf),但是唯一可能在这种情况下起作用的命令。

–马可·马森齐奥(Marco Massenzio)
16-09-20在6:55

#2 楼

注意:仅当由于100%完全/ boot而无法使用apt进行清理时,如果/ -boot处于100%状态而apt-get无法正常运行,则说明我需要先清理/ boot。这可能已在部分安装中捕获了内核升级,这意味着apt已完全冻结,即使该命令不断失败,它也会一直告诉您运行apt-get -f install

获取内核映像列表和确定您可以不做的事情。除了当前正在运行的一个sudo dpkg --list 'linux-image*'|awk '{ if (=="ii") print }'|grep -v `uname -r`,该命令将显示已安装的内核。请注意列表中的两个最新版本。您无需担心正在运行的程序,因为此处未列出。您可以使用uname -r进行检查。

使用大括号扩展使您保持理智,可以编写命令删除/ boot中与您无关紧要的所有文件。请记住要排除当前和两个最新的内核映像。
示例:sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*。您还可以使用语法为{80..84}的范围。

sudo apt-get -f install清除部分安装过程中的脾气暴躁。

如果遇到包含诸如“内部错误:找不到图像(/ boot / vmlinuz-3.2.0-56-generic)”,然后运行命令sudo apt-get purge linux-image-3.2.0-56-generic(使用适当的版本)。

最后,sudo apt-get autoremove清除旧的被内核孤立的内核映像包手动开机干净。

建议,运行sudo apt-get updatesudo apt-get upgrade以照顾在等待您发现完整的/ boot分区时可能备份的所有升级。

Suggestion2,请查看https: //help.ubuntu.com/community/AutomaticSecurityUpdates,并考虑在/etc/apt/apt.conf.d/50unattended-upgrades中将Unattended-Upgrade :: Remove-Unused-Dependencies设置为true。这将等同于在每次安全更新后运行autoremove,以确保您清除了未使用的内核,但还将删除它认为未使用的其他内容,从而将来可以避免此问题。

评论


这样,我可以获取最新的下一次重启信息,然后再获取最新的信息,以防万一在该重启过程中出现问题。通常,我有足够的空间,所以拥有一些空间不会有什么坏处,并且它满足了我在任何给定情况下都没有足够的备份选项的偏执狂。

– flickerfly
2014年4月22日在6:32

我从未遇到因无人值守升级而引起的问题。我可以想象这样的场景,这可能是主要围绕非Deb打包安装丢失的依赖关系而引起的问题说您安装php,决定将其卸载并从源代码安装更新的版本。此版本具有先前安装提供的依赖关系,但apt并未意识到仍需要它。下次运行自动删除时,这些依赖项将消失。如果是自动化的,这可能会有些混乱。如果您不安装在存储库之外,我相信它是完全安全的。

– flickerfly
15年4月15日在13:08

在几个vSphere虚拟服务器(内核已被自动升级但之后没有删除)中看到这一点之后,我编写了一个python脚本来使其自动化。我希望对此有更多的关注

–EvanK
15年9月29日在23:39

如果您在完全启动时使用dpkg --purge,则会得到以下$ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg:依赖性问题阻止了linux-image-3.13.0-65的删除-generic:linux-image-extra-3.13.0-65-generic取决于linux-image-3.13.0-65-generic。 dpkg:处理软件包linux-image-3.13.0-65-generic的错误(--purge):依赖关系问题-无法删除处理时遇到错误:linux-image-3.13.0-65-generic

– flickerfly
16-2-12在22:58



清理完/ boot apt-get install -f后,仍然无法使用。使用df -i,我发现/上的inode也用完了,因为/ usr / src中较旧内核的源代码文件数量很多

–克里斯托弗
16年5月25日在9:37

#3 楼

有关此文档,请访问https://help.ubuntu.com/community/RemoveOldKernels

摘要:使用

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels


The purge-old-kernels可以通过sudo apt install byobu安装该工具。以下是其手册页中的说明:


该程序将从
系统中删除旧的内核和头文件包,从而释放磁盘空间。它永远不会删除当前正在运行的内核。默认情况下,它将至少保留最新的2个内核,但用户可以使用--keep参数覆盖该值。


如果您想要复制粘贴的解决方案, ReSearchIT Eng建议以下内容:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge


评论


在我的情况下,由于内核未决,apt无法正常工作,建议的修补程序是catch 22:

–詹姆斯·鲍里(James Bowery)
16-10-21在4:26

我必须先通过askubuntu.com/a/304388/284313修复损坏的程序包,之后,您的解决方案才能奏效。

–詹姆斯·鲍里(James Bowery)
16-10-21在4:42

我认为这应该是目前公认的解决方案。

– Fran Marzoa
17年8月5日,0:33

这比公认的答案安全得多。我认为apt-get autoremove --purge应该足够了。

–伍德罗·巴洛
17年8月28日在17:12

#4 楼

我发现放弃小分区并将/boot移到根目录要容易得多。这也可以防止将来出现空间不足的问题。

首先将数据从引导分区移动到根目录(以sudo -s运行):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot


删除(或注释)/boot中的/etc/fstab条目:

vim /etc/fstab


更新grub并确保所有内容正确:

update-grub


apt现在应该可以毫无问题地进行升级了。

这将留下一个未使用的200mb分区(如果您觉得值得的话,可以将其用于其他用途)。

评论


这是个好主意,但如果您想对根分区进行全盘加密,则此方法将无效。

–PaŭloEbermann
17年9月9日在12:41

是的,在某些情况下,/ boot应该是一个单独的分区。另一个例子是Grub以前无法从LVM分区加载。

–堡垒
19年8月15日在3:50

#5 楼

删除旧内核(以释放/ boot上的空间)
请参阅:http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

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


然后运行

sudo apt-get update


评论


这是唯一有效的方法。

–约翰
17-10-20在10:29

最佳答案!这是唯一对我有用的解决方案。 autoremove很愚蠢;它会尝试在正式删除依赖关系未满足的所有内核之前重新安装它们。我一圈又一遍地圈满了空间。这个答案是金。

–Lonnie Best
18年8月15日在18:32

绝对值得支持-谢谢@Amos

– CRTLBREAK
20-2-8在15:29



#6 楼

sudo apt-get autoremove

这将删除除最后2个内核之外的所有内核。在/boot处于100%容量并且apt-get upgrade失败的情况下,它是Ubuntu 16.04 LTS的最后一次内核升级。内核自动删除是迭代的,因此,如果您有多个内核,则一次将它们删除一次。所以要耐心点。

#7 楼

当您可以使用工具进行操作时,为什么要手工操作呢?您知道您将在30秒内再次需要它,因为这些天他们需要30秒来推送新的内核更新= P

我建议使用bootnukem
这个工具
git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh


然后

sudo bootnukem --dry-run


一旦确认安全就将其卸下