Solve /boot getting 100% full issue on Ubuntu Servers

This is an issue affecting many Ubuntu servers. It basically happens when you enable automated security updates, multiple kernel packages get installed automatically, without removing the old ones, which gets /boot 100% full and the package manager is no longer able to function properly, showing a message complaining about dependency issues, e.g.

The following packages have unmet dependencies:
 linux-image-extra-4.4.0-64-generic : Depends: linux-image-4.4.0-64-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-4.4.0-64-generic but it is not going to be installed
                       Recommends: thermald but it is not going to be installed
 mongodb-org : Depends: mongodb-org-shell but it is not going to be installed
               Depends: mongodb-org-server but it is not going to be installed
               Depends: mongodb-org-mongos but it is not going to be installed
               Depends: mongodb-org-tools but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

The following is a solution to this problem that I’ve tried numerous times, and works immediately, then I will explain how to prevent this from happening again in the future:

First step, you need to know which kernel is currently running using:

uname -a

Let’s assume this gives you the following kernel version as an output:

4.4.0-57-generic

Keep this version in mind, as what we are going to do is pretty dangerous:

cd /boot
sudo du -khs *

This will give you a long list of old kernel that you won’t be needing. Now we will manually delete the initrd.img-*** of old kernels prior to the currently-running version, e.g.

sudo rm -rf initrd.img-4.4.0-21-generic initrd.img-4.4.0-36-generic initrd.img-4.4.0-38-generic initrd.img-4.4.0-42-generic initrd.img-4.4.0-45-generic initrd.img-4.4.0-47-generic initrd.img-4.4.0-51-generic initrd.img-4.4.0-53-generic vmlinuz-4.4.0-21-generic vmlinuz-4.4.0-36-generic vmlinuz-4.4.0-38-generic vmlinuz-4.4.0-42-generic vmlinuz-4.4.0-45-generic vmlinuz-4.4.0-47-generic vmlinuz-4.4.0-51-generic vmlinuz-4.4.0-53-generic

This will free up some space, so that the package manager can breathe. Next:

sudo apt install -f

This will just fix part of the problem, as it will still complain about dependencies and /boot might get filled again, so that the next thing would be to:

sudo apt autoremove

This will remove all the dependencies for old kernel versions. You might need to run the last 2 commands a couple of times, now you got a clean /boot and the package manager is good.

To avoid this problem in the future, configure the unattended-upgrades package to automatically remove the old kernels along with their dependencies by editing the file:

sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

Go to the following line, remove the comment and change “false” to “true”:

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

so that it becomes like this:

Unattended-Upgrade::Remove-Unused-Dependencies "true";

Save and exit the file.

That’s it, Enjoy!

 

About SoCRaT

Systems Engineer, OSS & Linux Geek
This entry was posted in Linux and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s