Debian/Ubuntu Linux删除旧内核镜像命令

时间:2020-01-09 10:38:00  来源:igfitidea点击:

我的Ubuntu Linux系统仍然存在旧内核。

Ubuntu为什么不自动删除旧内核?
如何删除旧的未使用的内核镜像以释放磁盘空间。
如何在Ubuntu Linux上安全删除未使用的旧内核镜像?
您需要手动从系统中删除旧内核。
基于Ubuntu和Debian的系统会保留旧的内核镜像,以便在较新的内核失败时可以引导系统。
清除和删除旧内核的最安全方法如下。
本教程介绍如何删除Ubuntu或Debian Linux上未使用的旧内核镜像,以释放磁盘空间以及linux-image软件包的各种状态。

删除旧内核镜像

对于Debian或Ubuntu Linux系统,该过程如下。
您必须以root用户身份登录。

步骤1引导到新内核

首先,启动进入新安装的内核。
使用以下命令对此进行验证:

$ uname -mrs
$ uname -a

输出示例:

Linux server1 3.13.0-68-generic #111-Ubuntu SMP Fri Nov 6 18:17:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

要列出所有已安装的Linux内核镜像,请执行以下dpkg命令:

# dpkg --list | egrep -i --color 'linux-image|linux-headers'

检查系统上安装了哪些内核镜像

步骤2删除不需要的和未使用的内核镜像

您可以使用以下apt-get命令或apt命令语法一一删除内核镜像:

# apt-get --purge remove linux-image-3.13.0-67-generic

或者

$ sudo apt-get --purge remove linux-image-3.13.0-67-generic

清除将删除软件包,所有配置文件也将被删除。

关于更新的基于Ubuntu和Debian的系统的说明

在较新的系统上,所有过时的内核和标头应自动标记为不再需要,因此可以使用以下单个命令清除:

$ sudo apt --purge autoremove

或者

$ sudo apt-get --purge autoremove

输出示例:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.2.0-93* linux-headers-3.2.0-93-virtual*
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 67.8 MB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 227543 files and directories currently installed.)
Removing linux-headers-3.2.0-93-virtual ...
Removing linux-headers-3.2.0-93 ...

请注意,autoremove用于删除为满足其他软件包的依赖性而自动安装的软件包,现在不再需要。
这也可能会删除其余不需要的软件包。

了解Ubuntu和Debian Linux中的软件包状态

考虑以下示例:

# dpkg --list | grep linux-image

输出示例:

`rc`  linux-image-3.13.0-62-generic        3.13.0-62.102                         amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
`rc`  linux-image-3.13.0-63-generic        3.13.0-63.103                         amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
`ii`  linux-image-extra-3.13.0-68-generic  3.13.0-68.111                         amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-generic                  3.13.0.68.74                          amd64        Generic Linux kernel image

第一列表示软件包标志,如rc,ii。
那么,像ii rc这样的各种dpkg标志是什么意思呢?

  • rc:表示软件包处于删除/卸载状态,仅配置文件存在。
  • ii:表示软件包处于安装状态,并且已100%安装在系统上。

您可以使用以下命令删除所有处于rc状态的linux-image软件包:

# x=$(dpkg --list | grep -i linux-image | grep ^rc| awk '{ print }')
# echo "$x"
# apt-get --purge remove $x

再次执行以下命令以查看结果:

# dpkg --list | egrep -i --color 'linux-image|linux-headers'

输出示例:

ii  linux-headers-3.13.0-68              3.13.0-68.111                         all          Header files related to Linux kernel version 3.13.0
ii  linux-headers-3.13.0-68-generic      3.13.0-68.111                         amd64        Linux kernel headers for version 3.13.0 on 64 bit x86 SMP
ii  linux-headers-generic                3.13.0.68.74                          amd64        Generic Linux kernel headers
ii  linux-image-3.13.0-68-generic        3.13.0-68.111                         amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-68-generic  3.13.0-68.111                         amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-generic                  3.13.0.68.74                          amd64        Generic Linux kernel image

轻松删除所有旧内核

考虑以下bash功夫:

# Get kernel version #
v="$(uname -r | awk -F '-virtual' '{ print }')"
 
# Create ignore list to avoid deleting the running kernel #
i="linux-headers-virtual|linux-image-virtual|linux-headers-${v}|linux-image-$(uname -r)"
 
# Display the list #
echo dpkg --list | egrep -i  'linux-image|linux-headers' | awk '/ii/{ print }' | egrep -v "$i"

输出示例:

linux-headers-3.2.0-31
linux-headers-3.2.0-31-virtual
linux-headers-3.2.0-52
linux-headers-3.2.0-52-virtual
linux-image-3.2.0-93-virtual
linux-image-3.2.0-94-virtual

要删除它,只需按如下所示运行它:

v="$(uname -r | awk -F '-virtual' '{ print }')"
i="linux-headers-virtual|linux-image-virtual|linux-headers-${v}|linux-image-$(uname -r)"
apt-get --purge remove $(dpkg --list | egrep -i  'linux-image|linux-headers' | awk '/ii/{ print }' | egrep -v "$i")

输出示例:

Reading package lists... Done
(Reading database ... 206225 files and directories currently installed.)
Removing linux-headers-3.2.0-31-virtual ...
Removing linux-headers-3.2.0-31 ...
Removing linux-headers-3.2.0-52-virtual ...
Removing linux-headers-3.2.0-52 ...
Removing linux-headers-3.2.0-60-virtual ...
Removing linux-headers-3.2.0-60 ...
....
..
...
Purging configuration files for linux-image-3.2.0-94-virtual ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-94-virtual /boot/vmlinuz-3.2.0-94-virtual
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-94-virtual /boot/vmlinuz-3.2.0-94-virtual