Removing the latest Kernel in CentOS

I’ve had a power cut recently, which seems to have corrupted the latest Kernel I have installed on my CentOS 6 server. I can boot into the previous one just fine, but of course if I forget to make a choice on startup, the server doesn’t start up. That’s annoying.

Thankfully there are ways to either fix the latest version, remove it, and even exclude a particular version from future updates. Here’s what worked for me on CentOS 6:

What Kernel are we using

To figure out which version is working for us, we can use the uname command. I guess when that menu with the last 10+ kernels showed up during boot, we may not have paid much attention to the little numbers at the end. uname will tell us:

uname -r
2.6.32-754.27.1.el6.i686

That’s good to know, as this is the version we’d like to retain. In my case it’s the previous Kernel that was installed. But how can we tell what the other versions are?

Listing all installed Kernels

yum can tell us that. I’m getting a total of 5 entries, each of which is corresponding to one I can select on boot (I’ll show you the last two):

yum info kernel

Name        : <strong>kernel</strong>
Arch        : i686
Version     : 2.6.32
Release     : 754.27.1.el6
Size        : 97 M
Repo        : installed
From repo   : updates
Summary     : The Linux kernel
URL         : http://www.kernel.org/
License     : GPLv2
Description : ...


Name        : kernel
Arch        : i686
Version     : 2.6.32
Release     : 754.28.1.el6
Size        : 97 M
Repo        : installed
Summary     : The Linux kernel
URL         : http://www.kernel.org/
License     : GPLv2

The one you’ve used on boot us printed in bold, in my case that’s release 754.27.1.el6. I’d like to keep that. But the one after that, namely 754.28.1.el6, I’d like to remove and potentially re-install.

Removing a Kernel

We can remove a Kernel version with yum, specifying the version number like so:

yum remove kernel-2.6.32-754.28.1.el6
...
Removed:
  kernel.i686 0:2.6.32-754.28.1.el6  

To get a list of the exact package names, try yum list kernel, then copy/paste from there, and preface with “kernel-“

yum list kernel

Installed Packages
<strong>kernel.i686                   </strong> 2.6.32-754.23.1.el6                     @updates 
<strong>kernel.i686                   </strong> 2.6.32-754.24.3.el6                     @updates 
<strong>kernel.i686                   </strong> 2.6.32-754.25.1.el6                     @updates 
<strong>kernel.i686                   </strong> 2.6.32-754.27.1.el6                     @updates 
kernel.i686                    2.6.32-754.28.1.el6                     installed

When the process has finished, and with a bit of luck, I should be able to do a regular yum update, and the latest Kernel will be installed again – hopefully in working order. It did in fact work in my case 🤩

Excluding a Kernel from future updates

In the event that the Kernel has a bug and doesn’t play well with your hardware, even a fresh version might lead to startup panics. Well not to panic, we can exclude specific version numbers from the update process.

Instead of using yum update, you can use the –exclude-kernel option. This will update all packages except for any future kernels:

yum update --exclude-kernel

Another option is to add an exclude statement in /etc/yum.conf under the [main] section. You can either specify

exclude=kernel*

to exclude any further Kernel updates, or you can specify the exact version so that only that particular one will be excluded, yet any Kernels after said version will be updated.

Many thanks to Jonathon Reinhart and Stuart Cardall for these tips!

You can leave a comment on my original post.