我该如何清理/boot并删除/备份旧的内核?
首先检查您的内核版本,以免删除正在使用的内核映像,运行以下命令:
uname -r
dpkg --list 'linux-image*' | grep ^ii
sudo apt-get remove linux-image-VERSION
sudo apt-get autoremove
sudo update-grub
sudo dpkg --list 'linux-image*' | grep ^ii
这个命令可以更方便地查看已安装的内核。另外,我认为 update-grub
是无害的,但并非必需,因为当您卸载一个内核时,它会自动运行。 - Nelsonsudo 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 个内核版本。 - Sithsuapt-get remove \
dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \uname -r\\
`` - gcbsudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`
- flickerflysudo apt-get autoremove
应该足够了(通常会保留最后3个内核)。 - mbxdpkg --list
(或等效地,dpkg -l
),你不需要使用sudo
。 - Keith Thompson/boot
已满,因此apt-get
将失败并显示一些错误代码。下面的答案有点“hackier”(我必须承认我不得不鼓起勇气在/boot
中发出rm -rf
),但这是唯一可能在这种情况下起作用的方法。 - Marco Massenziodpkg --list 'linux-image*'
仍然列出了我删除的内核,并且它仍然存在于/boot分区中。如果/当我发现问题时,我会更新评论。 - markdsieverssudo apt-get autoremove
(仅删除相关的头文件)之后,/boot
分区被清空了。有趣的是 dpkg --list 'linux-image*'
仍然列出了我删除的所有内核。 - markdsieversawk '{ if ($1=="ii") print $2}'
可以替换为 awk '/^ii/ {print $2}'
- Johannes Hoffinitrd.img-4.13.0-26-generic initrd.img-4.15.0-161-generic initrd.img-4.15.0-166-generic initrd.img-4.15.0-167-generic initrd.img-4.8.0-53-generic initrd.img-5.4.0-131-generic initrd.img-5.4.0-132-generic
这些文件正常吗?但是dpkg只显示了5.4.0-131和132,我可以安全地手动删除其他的吗? - Tofandel注意:只有在/boot目录已满100%且无法使用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
来检查。
sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*
。你也可以使用范围语法{80..84}。sudo apt-get -f install
来清理apt在部分安装方面出现问题的内容。sudo apt-get purge linux-image-3.2.0-56-generic
(根据你的版本进行相应更改)。sudo apt-get autoremove
来清除手动清理/boot目录后留下的旧内核镜像包。sudo apt-get update
和sudo apt-get upgrade
来处理可能在等待你发现完整的/boot分区时积压的任何升级。sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`
- flickerflyuname -r
输出进行了交叉验证。 - Chinmaya Bsudo rm
删除旧内核是不必要的。我认为最好使用 sudo dpkg --purge
。请参考我对类似问题的回答以获取更多详细信息。 - jarnodpkg --purge
命令,你会得到以下结果:`$ sudo dpkg --purge linux-image-3.13.0-65-genericdf -i
命令,我发现由于在/usr/src目录下存储了大量旧内核源代码文件,导致根目录/的inode也不足。 - Kristofersudo apt-get -f install
将重新安装我刚刚删除的内核,并在磁盘空间不足时崩溃。我使用的是Mint 18。 - Pavel Niedoba关于此事有相关文档可参考https://help.ubuntu.com/community/RemoveOldKernels
简而言之:使用
sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels
可以通过sudo apt install byobu
安装purge-old-kernels
工具。以下是它的man页描述:
该程序将从系统中删除旧的内核和头文件包,释放磁盘空间。它永远不会删除当前正在运行的内核。默认情况下,它将保留至少最新的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
应该足够了。 - Woodrow BarlowE: 在与其他选项组合使用时,不理解命令行选项--keep
。 - Houmansudo 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
cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot
vim /etc/fstab
update-grub
apt
现在应该能够顺利升级了。
这会留下一个未使用的 200mb 分区(如果你觉得值得的话,可以用来做其他事情)。
sudo apt-get autoremove
这将删除除最后2个内核之外的所有内核。在Ubuntu 16.04 LTS上进行了测试,当/boot
的容量达到100%并且apt-get upgrade
无法完成最新的内核升级时。内核自动删除是迭代的,所以如果你有多个内核,它们将逐个被删除。所以请耐心等待。
git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh
然后
sudo bootnukem --dry-run
确认安全后,请移除--dry-run