Ubuntu 分区/boot满了,导致无法更新或删除内核的解决办法

问题背景

无法更新或安装新的包

在对线上一个系统进行更新时,执行命令 apt-get update && apt-get upgrade -y 时,提示出现以下内容:

You might want to run ‘apt-get -f install’ to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-xxxx-generic but it is not installed
E: Unmet dependencies. Try using -f.

通过上述提示:

  • 我尝试执行了apt-get -f install ,但是问题依旧,问题无法解决,同时,这个时候也无法安装新的包。

  • 也尝试了执行命令apt-get autoremove ,同样问题依旧

  • 我尝试删除一些不用等内核,执行命令类似于:apt-get purge linux-image-xxxx-server, 同样无法进行删除

重启失败

最近几次线上的问题,当系统因为虚拟化迁移或者增加资源时,重启居然无法进入系统了。

问题原因

经过好久排查(进去之后使用 df -h)出现 /boot分区 100%占用的情况。
这几次血的教训,让我措手不及。 主要导致/boot分区空间不够的原因主要如下:
– 教科书的误导。(好吧,是我自己不去思考)小白时期看到教科书关于安装分区的建议,经常是/boot单独分区,而且是256m就足以。

  • Ubuntu下的特例。一般来说内核一般需要保持问题,但是碰到的是Ubuntu,这家伙更新的贼快,而且在默认安装后,只要联网的,都会自动升级内核。

解决办法

暴力删除

这个比较简单的操作,但是需要你对你操作的内容非常熟悉。不然的话,万一出现问题,会导致更大的问题。
(强烈建议:操作之前备份一下内核问题,备份到其他分区上也可)
1. 检查目前使用的内核版本uname -a
2. 进入/boot分区,删除中间过渡的内核文件,保留内核版本,以及最近的几个版本,主要看版本好即可
3. 执行apt-get install -f 强制安装最新的内核
4. 清理。使用 apt-get autoremove,删除不需要的内核文件
5. 再次使用 df -h 可以看到 /boot分区不再是满的了

其实上面的做法太暴力了,通常为保障可靠,建议先对删除的文件进行备份之后再进行删除,否则万一出问题还是可以还原回来

建议

/boot 分区规划

  • 建议使用 /boot 分区时,可以考虑512M的空间分配或者更大(害怕了,我现在都是直接分配1G)
  • 直接使用将/boot分区挂到根分区下,不单独分区

禁止内核更新

sudo apt-mark hold linux-image-x.xx.x-xx-generic
sudo apt-mark hold linux-image-extra-x.xx.x-xx-generic
#sudo apt-mark unhold linux-image-x.xx.x-xx-generic
#sudo apt-mark unhold linux-image-extra-x.xx.x-xx-generic

使用Debian 9吧

🙂