前言
在安装ubuntu16.04 的时候,根据网上教程分配了单独的物理分区,大小为200M。但是每当系统升级的时候,旧的内核版本并不会被清理,升级几次就提示boot内存不足了。思路就是卸载旧的版本内核,腾出空间。
一 问题描述
当开机出现这个提示表示boot内存已经不足。
二 尝试解决
1.先查看已经安装的内核。在linux终端输入如下命令
dpkg --get-selections | grep linux-image
我的终端出现如下信息:
linux-image-4.13.0-36-generic deinstall
linux-image-4.13.0-45-generic install
linux-image-4.15.0-29-generic install
linux-image-4.15.0-30-generic install
linux-image-extra-4.13.0-36-generic deinstall
linux-image-extra-4.13.0-45-generic install
linux-image-generic-hwe-16.04 install
可以看到当前/boot中存在多个内核,install表示已安装,deinstall表示残留。
2. 查看我们当前使用的是哪个内核。使用命令:
uname -a
我的情况如下:
z@z-Inspiron-5437:~$ uname -a
Linux z-Inspiron-5437 4.15.0-30-generic #32~16.04.1-Ubuntu SMP Thu Jul 26 20:25:39 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
可以看到当前使用版本是30-generic,所以需要删除其他版本。
顺带查看/boot使用情况,使用命令:df -h
~$ df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 1.9G 0 1.9G 0% /dev
tmpfs 386M 6.2M 380M 2% /run
/dev/sda9 29G 11G 17G 39% /
tmpfs 1.9G 194M 1.7G 11% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop0 87M 87M 0 100% /snap/core/5145
/dev/loop2 227M 227M 0 100% /snap/pycharm-community/74
/dev/loop1 227M 227M 0 100% /snap/pycharm-community/76
/dev/loop3 87M 87M 0 100% /snap/core/4917
/dev/sda11 42G 6.2G 33G 16% /home
/dev/sda8 269M 241M 11M 96% /boot
tmpfs 386M 60K 386M 1% /run/user/1000
可以看到/boot已经占用96%。
3. 删除其他版本。使用命令:
sudo apt-get remove linux-image-4.15.0-29-generic
这里也可使用命令:
sudo apt-get purge ...
sudo apt-get autoremove ...
如过正常,会很快删除,然后同样命令方式删除其他版本即可。不过我遇到了如下问题:
~$ sudo apt-get remove linux-image-4.15.0-29-generic
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
您可能需要运行“apt-get -f install”来纠正下列错误:
下列软件包有未满足的依赖关系:
linux-image-generic-hwe-16.04 : 依赖: linux-image-4.15.0-32-generic 但是它将不会被安装
linux-modules-extra-4.15.0-29-generic : 依赖: linux-image-4.15.0-29-generic 但是它将不会被安装 或
linux-image-unsigned-4.15.0-29-generic 但是它将不会被安装
linux-modules-extra-4.15.0-32-generic : 依赖: linux-image-4.15.0-32-generic 但是它将不会被安装 或
linux-image-unsigned-4.15.0-32-generic 但是它将不会被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt-get -f install”(也可以指定一个解决办法)。
按照提示,运行命令:
sudo apt-get -f install
该命令是用来解决软件包之间的依赖关系,看第二行的提示,有其他软件包会依赖将要被删除的内核。
然而会有如下错误提示:
gzip: stdout: No space left on device
E: mkinitramfs failure find 141 cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-4.15.0-32-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: 处理软件包 linux-image-4.15.0-32-generic (--configure)时出错:
子进程 已安装 post-installation 脚本 返回错误状态 1
在处理时有错误发生:
linux-image-extra-4.13.0-36-generic
linux-image-4.15.0-32-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
本来/boot空间不足,在安装其他包就会报如上错误,有点死循环的感觉。后来我尝试把依赖要删除内核的其他包也删除,这样竟然解决了问题:
4. 同时删除依赖项和被依赖项。使用命令:
~$ sudo apt-get purge linux-image-extra-4.13.0-36-generic linux-image-4.13.0-36-generic
即将-extra-依赖项连同被依赖项同时删除。
然后再使用命令删除其他内核:
sudo apt-get purge linux-image-4.15.0-29-generic
5. 最后查看/boot空间
~$ df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 1.9G 0 1.9G 0% /dev
tmpfs 386M 6.2M 380M 2% /run
/dev/sda9 29G 9.9G 17G 38% /
tmpfs 1.9G 201M 1.7G 11% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop0 87M 87M 0 100% /snap/core/5145
/dev/loop2 227M 227M 0 100% /snap/pycharm-community/74
/dev/loop1 227M 227M 0 100% /snap/pycharm-community/76
/dev/loop3 87M 87M 0 100% /snap/core/4917
/dev/sda11 42G 6.2G 33G 16% /home
/dev/sda8 269M 145M 107M 58% /boot
tmpfs 386M 60K 386M 1% /run/user/1000
可以看到/boot空间使用率已经降到58%。
三 结论
当一般情形没法解决时,不妨尝试利用sudo apt-get purge 命令将依赖项和被依赖项同时删除。当然每个人具体的情况不同,我的只是一种特例。