/boot
分区分配了200 MB内存。每当我尝试更新内核时,都会收到一条错误消息,该错误消息基本上指出/boot
已满。我该如何清理
/boot
并删除/备份较旧的内核?#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 update
和sudo 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
一旦确认安全就将其卸下
评论
请参阅Ubuntu社区Wiki如果/ boot已满,请参阅askubuntu.com/questions/263363/…