Ubuntu 16.04 LTS /boot 分区占满导致无法 upgrade 等升级操作的解决方法

已关闭留言

今天升级了搬瓦工的一台 VPS 的内核,想升级到最新内核安装 BBR,没想到升级完后启动不了了,进入 VNC 查看,是因为找不到 rootfs,然后选择 Ubuntu 的更多启动项,选择了从一个低版本内核进行启动,进入后看了看发现是因为 /boot 分区被占满,导致之前升级内核操作没能成功。记录一下怎么解决 /boot 分区被占满的问题。

文章目录
隐藏
解决步骤
参考文献

解决步骤

0. 进入/boot 查看所有的版本文件

1. 查看当前使用内核版本号:

uname -a

2. 查看所有的版本:[1]

sudo dpkg --get-selections |grep linux

3. 把标记install的旧的版本都删掉:

sudo apt autoremove linux-headers-4.4.0-xx  linux-image-4.4.0-xx-generic

注:这里的 linux-headers-4.4.0-xx-generic linux-image-extra-4.4.0-xx-generic 两个文件不需要写,会顺带被删除.

4. 再次运行步骤2命令,如果有标记为deinstall的内核文件,参考下面进行删除。[2]

sudo dpkg -P linux-image-3.5.0-4[2-9]-generic
sudo dpkg -P linux-image-3.5.0-51-generic

这样就可以清理干净boot空间和旧的内核了。

5. 再检查/boot/下是否还存在对应旧版本文件

这时候多余的旧版本的各种文件都已经没有了。如果还有,可能会多出来一个 initrd.img-xxxxxxxxx-generic。千万不要再删除了!

如果误删,可能导致重启后无法正常进入系统。例如出现:

a. 大写锁定键一直闪烁,停留在空白(Ubuntu紫色)纯屏页面。

b. 或者黑屏终端,一堆代码,最后是 end Kernel panic xxxxxxxxxxxxxxxx

原因:”ubuntu升级的时候默认会保留多个内核,启动的时候选择旧的内核启动。如果只有一个内核的化,进恢复模式“[3]

解决方案:

这时候强制关机,不选第一项 Ubuntu 启动,而是选择下面的其他选项,然后选个低版本内核启动。

进入系统后,再 sudo apt-get upgrade一下,再查看 /boot,你会发现刚才删除的 initrd.img-xxxxxxxxx-generic 又回来了。问题解决。

sudo apt-get purge  xxx

注意只需要删除 linux-image-4.4.0-66-generic这个格式的文件,就会同时删除linux-image-extra-4.4.0-66-generic文件。

只需要删除linux-headers-4.4.0-62这个格式的文件,就会同时删除linux-headers-4.4.0-62-generic 的文件。

这一步必须在boot空间释放后才可以,否则可能会因为boot没有足够空间而遇到错误。

其他的可能用到的老笨步骤

cd /boot 进入后,删除除这个版本号外的其他版本的 config-xxx,vmlinuz initrd,abi and System.map 等所有文件。个人建议如果boot空间很小的话,把高于当前使用内核版本的也删除掉,因为那些对应的文件虽然在 /boot 下,但是其实这个高的内核并没有安装完全(应该是之前旧版本太多,导致装更加新的版本时,装到一半 boot 满了,导致部分高版本相应的文件已经复制到 boot 下没能删除)。

只保留 uname -a 显示出来的使用版本的所有文件就好。

sudo rm xxx 删除后,

df -h 可以查看boot分区的空间已经不是全满,释放了很多。

参考文献

  • http://blog.sciencenet.cn/blog-506416-1040221.html