dpkg -l linux-image*
uname -r
sudo apt-get remove linux-image-2.6.32-{21,37,38,39,40,41,42,43,44}-server
sudo apt-get autoremove
This morning, I noticed New Relic that the /boot
disk was almost full on several of our servers. It turns out that when the old kernel images are left on the disk after a kernel update. The solution is to delete old kernels that we don't need anymore.
You can safely delete all but the latest package that matches the pattern linux-image-2.6.32-[0-9][0-9]-server
. Leave linux-image-2.6.32-45-server
on your system because you will need it to reboot!
$ dpkg -l linux-image*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-=============================================-=============================================-==========================================================================================================
un linux-image <none> (no description available)
un linux-image-2.6 <none> (no description available)
ii linux-image-2.6.32-21-server 2.6.32-21.32 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-37-server 2.6.32-37.81 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-38-server 2.6.32-38.83 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-39-server 2.6.32-39.86 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-40-server 2.6.32-40.87 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-41-server 2.6.32-41.91 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-42-server 2.6.32-42.96 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-43-server 2.6.32-43.97 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-44-server 2.6.32-44.98 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-2.6.32-45-server 2.6.32-45.104 Linux kernel image for version 2.6.32 on x86_64
ii linux-image-server 2.6.32.45.52 Linux kernel image on Server Equipment.
DON'T delete this kernel image! And if it's not the latest, don't delete the latest one either.
$ uname -r
2.6.32-45-server
Removing the old kernels is the same as removing any other package. I'm using shell expansion for the version numbers to save typing. It will prompt you with a list of packages that will be removed, so you can double check the list before continuing.
sudo apt-get remove linux-image-2.6.32-{21,37,38,39,40,41,42,43,44}-server
There are some dependencies left on the system after removing the old kernels. Fortunately, you can easily clean these up, too.
sudo apt-get autoremove
@keenlogic, I had the same problem "Package 'linux-image-x.y.z-j-generic' is not installed, so not removed"
I believe what is happening is that when you run the "dpkg -l linux-image*" command, it's still listing those "already removed" packages because there are still things depending on them. I guess this means that they haven't actually been removed and are still taking up disk space because I would still get disk space related errors when running other commands.
What I had to do was remove the dependencies manually first, so for each "x.y.z-j" image listed, I would run the following commands in this order:
sudo dpkg --purge linux-signed-image-x.y.z-j-generic sudo dpkg --purge linux-image-extra-x.y.z-j-generic sudo dpkg --purge linux-image-x.y.z-j-generic
Some of those commands would fail for certain packages claiming that they were already removed, usually the third command.
Then another:
dpkg -l linux-image*
would show that the image was no longer listed.
I was careful not to remove my current version and the latest version as suggested in the post.
No doubt you can batch up the commands for multiple images in one go, I just went through them one by one manually to see what was happening at each point, didn't take long.
sudo apt-get autoremove
command now runs happily