Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


Linux 有问必答:如何删除 Ubuntu 上不再使用的旧内核

2015-9-18 09:14    评论: 13 收藏: 8    

提问:过去我已经在我的Ubuntu上升级了几次内核。现在我想要删除这些旧的内核镜像来节省我的磁盘空间。如何用最简单的方法删除Ubuntu上先前版本的内核?

在Ubuntu上,有几个方法来升级内核。在Ubuntu桌面中,软件更新允许你每天检查并更新到最新的内核上。在Ubuntu服务器上,最为重要的安全更新项目之一就是 unattended-upgrades 软件包会自动更新内核。然而,你也可以手动用apt-get或者aptitude命令来更新。

随着时间的流逝,持续的内核更新会在系统中积聚大量的不再使用的内核,浪费你的磁盘空间。每个内核镜像和其相关联的模块/头文件会占用200-400MB的磁盘空间,因此由不再使用的内核而浪费的磁盘空间会快速地增加。

GRUB管理器为每个旧内核都维护了一个GRUB入口,以备你想要使用它们。

作为磁盘清理的一部分,如果你不再使用这些,你可以考虑清理掉这些镜像。

如何清理旧内核镜像

在删除旧内核之前,记住最好留有2个最近的内核(最新的和上一个版本),以防主要的版本出错。现在就让我们看看如何在Ubuntu上清理旧内核。

在Ubuntu内核镜像包含了以下的包。

  • linux-image-: 内核镜像
  • linux-image-extra-: 额外的内核模块
  • linux-headers-: 内核头文件

首先检查系统中安装的内核镜像。

$ dpkg --list | grep linux-image
$ dpkg --list | grep linux-headers

在列出的内核镜像中,你可以移除一个特定的版本(比如3.19.0-15)。

$ sudo apt-get purge linux-image-3.19.0-15
$ sudo apt-get purge linux-headers-3.19.0-15

上面的命令会删除内核镜像和它相关联的内核模块和头文件。

注意如果你还没有升级内核那么删除旧内核会自动触发安装新内核。这样在删除旧内核之后,GRUB配置会自动升级来移除GRUB菜单中相关GRUB入口。

如果你有很多没用的内核,你可以用shell表达式来一次性地删除多个内核。注意这个括号表达式只在bash或者兼容的shell中才有效。

$ sudo apt-get purge linux-image-3.19.0-{18,20,21,25}
$ sudo apt-get purge linux-headers-3.19.0-{18,20,21,25}

上面的命令会删除4个内核镜像:3.19.0-18、3.19.0-20、3.19.0-21 和 3.19.0-25。

如果GRUB配置由于任何原因在删除旧内核后没有正确升级,你可以尝试手动用update-grub2命令来更新配置。

$ sudo update-grub2

现在就重启来验证GRUB菜单是否已经正确清理了。


via: http://ask.xmodulo.com/remove-kernel-images-ubuntu.html

作者:Dan Nanni 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

发表评论


最新评论

我也要发表评论

netb2c [Chrome 45.0|GNU/Linux] 2015-9-20 21:45
[点击展开更多楼层]
2
来自河南郑州的 Chrome 45.0|Windows 7 用户 发表于 2015-9-20 11:05 的评论:
兄台,注册个账号吧!欢迎入驻!   :>
3
netb2c [Chrome 45.0|GNU/Linux] 发表于 2015-9-20 11:11 的评论:
汗!自己都忘了登陆了!
4
linux [Chrome 45.0|Mac 10.10] 发表于 2015-9-20 18:37 的评论:
原来是你~~
是我 :>
1 回复
linux [Chrome 45.0|Mac 10.10] 2015-9-20 18:37
1
来自四川成都的 Chrome 45.0|GNU/Linux 用户 发表于 2015-9-18 10:45 的评论:
# 版本 2
os_ver=$(uname --kernel-release | awk --assign FS='.' '{print $(NF-1)"."$(NF)}')
knlver=$(uname --kernel-release | sed $'s#.'"$os_ver"'##')
# rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver"
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver")
2
来自河南郑州的 Chrome 45.0|Windows 7 用户 发表于 2015-9-20 11:05 的评论:
兄台,注册个账号吧!欢迎入驻!   :>
3
netb2c [Chrome 45.0|GNU/Linux] 发表于 2015-9-20 11:11 的评论:
汗!自己都忘了登陆了!
原来是你~~
回复
netb2c [Chrome 45.0|GNU/Linux] 2015-9-20 11:11
1
来自四川成都的 Chrome 45.0|GNU/Linux 用户 发表于 2015-9-18 10:45 的评论:
# 版本 2
os_ver=$(uname --kernel-release | awk --assign FS='.' '{print $(NF-1)"."$(NF)}')
knlver=$(uname --kernel-release | sed $'s#.'"$os_ver"'##')
# rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver"
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver")
2
来自河南郑州的 Chrome 45.0|Windows 7 用户 发表于 2015-9-20 11:05 的评论:
兄台,注册个账号吧!欢迎入驻!   :>
汗!自己都忘了登陆了!
6 回复
来自河南郑州的 Chrome 45.0|Windows 7 用户 2015-9-20 11:05
1
来自四川成都的 Chrome 45.0|GNU/Linux 用户 发表于 2015-9-18 10:45 的评论:
# 版本 2
os_ver=$(uname --kernel-release | awk --assign FS='.' '{print $(NF-1)"."$(NF)}')
knlver=$(uname --kernel-release | sed $'s#.'"$os_ver"'##')
# rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver"
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver")
兄台,注册个账号吧!欢迎入驻!   :>
回复
来自陕西西安的 Chrome 45.0|GNU/Linux 用户 2015-9-18 13:05
1
羽舟Disigner [Chrome 45.0|Fedora] 发表于 2015-9-18 11:02 的评论:
所以还是fedora好,dnf update自动删除旧内核
如果新内核导致系统崩溃,会需要使用久内核来启动系统。虽然这些版本不太可能会发生这么严重的错误,但是可能还是存在的。起码得留一个能够稳定的久内核
5 回复
来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 11:05
1
羽舟Disigner [Chrome 45.0|Fedora] 发表于 2015-9-18 11:02 的评论:
所以还是fedora好,dnf update自动删除旧内核
dnf 确实可以自动删除,不过默认条件下是在删除最早的一个。暂不清楚能不能改成在一定时间后删除所有老的内核。
2 回复
羽舟Disigner [Chrome 45.0|Fedora] 2015-9-18 11:02
所以还是fedora好,dnf update自动删除旧内核
4 回复
linux [Chrome 45.0|Mac 10.10] 2015-9-18 10:52
1
来自四川成都的 Chrome 45.0|GNU/Linux 用户 发表于 2015-9-18 10:44 的评论:
这是刚刚修改后的命令,因为不长清理内核,所以一直没有怎么改。
这次是直接用 uname 返回的内核版本,没有做任何截取。
不过考虑到发行版的差异,所以还有如下的一个版本
此外没有用 autoremove,是因为之前发现如果用 autoremove 会带出其他包
这个问题可能与 dnf 版本有关。
用 --assumeno 是防止意外删除,仅展示命令要执行什么。
兄台,注册个用户吧,这样回帖长度会长很多。
回复
来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 10:45
# 版本 2
os_ver=$(uname --kernel-release | awk --assign FS='.' '{print $(NF-1)"."$(NF)}')
knlver=$(uname --kernel-release | sed $'s#.'"$os_ver"'##')
# rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver"
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver")
8 回复
来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 10:44
# 版本1
rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release)
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release))
5 回复
来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 10:44
这是刚刚修改后的命令,因为不长清理内核,所以一直没有怎么改。
这次是直接用 uname 返回的内核版本,没有做任何截取。
不过考虑到发行版的差异,所以还有如下的一个版本
此外没有用 autoremove,是因为之前发现如果用 autoremove 会带出其他包
这个问题可能与 dnf 版本有关。
用 --assumeno 是防止意外删除,仅展示命令要执行什么。
回复
来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 10:22
sudo yum --assumeno remove "$(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release | cut --delimiter='-' --fields=1))"
回复
来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 10:21
这是我自己总结的清理 Linux 内核包的代码
但是有些问题,不能识别内核的子版本,需要手动修改一下。比如没有识别内核版本中的 6-201
系统是 dnf 需要自行替换 yum
如下命令使用长参数格式

# 列出较早版本的 Linux 內核包, For Fedora
rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release | cut --delimiter='-' --fields=1)
# 刪除之前列出的较早前的 Linux 內核包
sudo yum --assumeno remove "$(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --
1 回复

热点评论

来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 10:45
# 版本 2
os_ver=$(uname --kernel-release | awk --assign FS='.' '{print $(NF-1)"."$(NF)}')
knlver=$(uname --kernel-release | sed $'s#.'"$os_ver"'##')
# rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver"
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match "$knlver")
8
netb2c [Chrome 45.0|GNU/Linux] 2015-9-20 11:11
汗!自己都忘了登陆了!
6
来自陕西西安的 Chrome 45.0|GNU/Linux 用户 2015-9-18 13:05
如果新内核导致系统崩溃,会需要使用久内核来启动系统。虽然这些版本不太可能会发生这么严重的错误,但是可能还是存在的。起码得留一个能够稳定的久内核
5
来自四川成都的 Chrome 45.0|GNU/Linux 用户 2015-9-18 10:44
# 版本1
rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release)
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release))
5
羽舟Disigner [Chrome 45.0|Fedora] 2015-9-18 11:02
所以还是fedora好,dnf update自动删除旧内核
4
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。