prune-kernels function …

If you are like me, you will have noticed on Ubuntu (and sometimes Debian) that stale old kernels remain on the disk even when they aren’t needed anymore. I wrote a little Bash function to get rid of those kernels.

You can find the respective function here as well. This one will actually get updated if issues are found with the script. Simply source the script with . prune-kernels or source prune-kernels and then call the function.

So what does this piece of code do? Well, it uses the /vmlinuz and /vmlinuz.old symlinks to figure out the newest kernel and the one prior to that. Those two are skipped when pruning stale kernels. In addition it uses uname -r to find out which kernel is currently running and skips it as well. It is pretty verbose in showing what’s going on and which of the kernels have been skipped.
Then it calls apt-get remove on the list of stale kernels to remove them. If you choose no when apt-get remove prompts you, any further action will be skipped. If there are no stale kernels to remove, the function will make this clear.

After apt-get remove ran (and returned a success exit code), the function will collect all the file names from the /boot folder belonging to the previously removed kernels, if any, and unlinks them.

If you don’t run the function as root, the function is going to call the apt-get and rm commands through sudo. This means you will be prompted for your password twice at worst.

You may choose to give --old as a command line option to the prune-kernels function in order to make it also prune the previous kernel (pointed to by /vmlinux.old). By default it will skip this one.

TL;DR
Safer implementation of pruning of old kernels on Debian and Ubuntu that will skip (by default) the running kernel, kernel referenced by /vmlinuz and by /vmlinuz.old.

Enjoy,

// Oliver

This entry was posted in Administration, Bash, EN, Linux, Programming, Unix and unixoid and tagged . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *