Table of Contents

Ubuntu - Kernel - Delete Old Kernel Images

List all installed Linux kernel images

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

returns:

ii  linux-headers-4.15.0-70                    4.15.0-70.79                                    all          Header files related to Linux kernel version 4.15.0
ii  linux-headers-4.15.0-70-generic            4.15.0-70.79                                    amd64        Linux kernel headers for version 4.15.0 on 64 bit x86 SMP
ii  linux-headers-4.15.0-72                    4.15.0-72.81                                    all          Header files related to Linux kernel version 4.15.0
ii  linux-headers-4.15.0-72-generic            4.15.0-72.81                                    amd64        Linux kernel headers for version 4.15.0 on 64 bit x86 SMP
ii  linux-headers-generic                      4.15.0.72.74                                    amd64        Generic Linux kernel headers
rc  linux-image-4.15.0-29-generic              4.15.0-29.31                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-55-generic              4.15.0-55.60                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-58-generic              4.15.0-58.64                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-60-generic              4.15.0-60.67                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-62-generic              4.15.0-62.69                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-64-generic              4.15.0-64.73                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-65-generic              4.15.0-65.74                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-66-generic              4.15.0-66.75                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-69-generic              4.15.0-69.78                                    amd64        Signed kernel image generic
ii  linux-image-4.15.0-70-generic              4.15.0-70.79                                    amd64        Signed kernel image generic
ii  linux-image-4.15.0-72-generic              4.15.0-72.81                                    amd64        Signed kernel image generic
ii  linux-image-generic                        4.15.0.72.74                                    amd64        Generic Linux kernel image

Delete unwanted and unused kernel images

sudo apt --purge remove linux-image-3.12.0-27-generic

The purge removes packages and any configuration files are deleted too.

On newer system all obsolete kernels and headers should automatically be flagged as not being needed, and thus can be purged with the following single command:

sudo apt --purge autoremove

returns:

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

Delete kernel packages in remove/deinstall state

sudo dpkg --list | grep linux-image

returns:

rc  linux-image-4.15.0-29-generic              4.15.0-29.31                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-55-generic              4.15.0-55.60                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-58-generic              4.15.0-58.64                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-60-generic              4.15.0-60.67                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-62-generic              4.15.0-62.69                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-64-generic              4.15.0-64.73                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-65-generic              4.15.0-65.74                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-66-generic              4.15.0-66.75                                    amd64        Signed kernel image generic
rc  linux-image-4.15.0-69-generic              4.15.0-69.78                                    amd64        Signed kernel image generic
ii  linux-image-4.15.0-70-generic              4.15.0-70.79                                    amd64        Signed kernel image generic
ii  linux-image-4.15.0-72-generic              4.15.0-72.81                                    amd64        Signed kernel image generic
ii  linux-image-generic                        4.15.0.72.74                                    amd64        Generic Linux kernel image

Remove all linux-image packages in rc state

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

Recheck kernel package state

sudo dpkg --list | grep linux-image

returns:

ii  linux-image-4.15.0-70-generic              4.15.0-70.79                                    amd64        Signed kernel image generic
ii  linux-image-4.15.0-72-generic              4.15.0-72.81                                    amd64        Signed kernel image generic
ii  linux-image-generic                        4.15.0.72.74                                    amd64        Generic Linux kernel image

Note that all rc states have gone.


Deleting all old kernels easily

Get a list of kernels.

# Get kernel version.
v="$(uname -r | awk -F '-virtual' '{ print $1}')"
 
# 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 $2}' | egrep -v "$i"

To delete it simply run it as follows:

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

Easy way to delete all old kernels

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-]+//')")

Simple way to delete all old kernels

sudo purge-old-kernels