我为/boot
分区分配了200 MB 。每当我尝试更新内核时,都会收到一条错误消息,提示您基本上/boot
已满。
我该如何清理/boot
和删除/备份较旧的内核?
我为/boot
分区分配了200 MB 。每当我尝试更新内核时,都会收到一条错误消息,提示您基本上/boot
已满。
我该如何清理/boot
和删除/备份较旧的内核?
Answers:
首先检查您的内核版本,以免删除正在运行的正在使用的内核映像:
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-image*' | grep ^ii
使仅查看已安装的内核变得容易一些。同样,我认为,它update-grub
是无害的,但不是绝对必要的,它在卸载内核时自动运行。
sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""
去与使用的包名称的列表sudo apt-get remove
。head -n -3
用于将3个最新内核保留在系统中。
apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
sudo apt-get autoremove
应该足够了(通常只剩下最后三个内核)
/boot
是已满,因此apt-get
会因某些错误代码或其他错误而失败。下面的答案有点“骇客”(我必须承认,我必须让自己下决心要rm -rf
在中发布/boot
),但是唯一可能在这种情况下起作用的答案。
注意:仅在由于100%完全/ boot而无法使用apt进行清理的情况下
如果apt-get由于/ boot处于100%状态而无法运行,则需要首先清除/ boot。这可能是在部分安装中捕获了内核升级,这意味着apt几乎完全冻结了,apt-get -f install
即使该命令不断失败,它也会一直告诉您运行。
获取内核映像列表,并确定您可以不做的事情。此命令将显示已安装的内核(当前正在运行的内核除外)sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|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
清除已经由手动启动清理孤立的旧内核映像程序包。
在等待您发现完整的/ boot分区时,建议运行sudo apt-get update
并sudo apt-get upgrade
照顾所有可能备份的升级。
建议2,查看https://help.ubuntu.com/community/AutomaticSecurityUpdates,并考虑在/etc/apt/apt.conf.d/50unattended-upgrades中将Unattended-Upgrade :: Remove-Unused-Dependencies设置为true。这等效于在每次安全更新后运行autoremove,以确保您清除了未使用的内核,但也将删除它认为未使用的其他内容,从而将来可以避免此问题。
dpkg --purge
完整启动,您将获得以下内容 $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
df -i
我发现,/
由于旧内核的源代码文件数量巨大,我的索引节点也用光了/usr/src
有关此文档,请访问https://help.ubuntu.com/community/RemoveOldKernels
总结:使用
sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels
该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-get autoremove --purge
应该足够了。
我发现放弃小分区并移到/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分区(如果发现值得麻烦的话,可以将其用于其他用途)。
删除旧内核(以释放/ 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 $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")
然后跑
sudo apt-get update