Can't upgrade due to low disk space on /boot
Your /boot partition is filled with old kernels. It does that sometimes, not sure why it is never fixed. You can easily remove the old kernels if you know which packages they came in.
First check uname -a
to check your current version.
Then run the following command:
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
This command will list all packages that you no longer need. I don't like removing them automatically, I like to be in control when it comes to removing kernels. So for every package listed do the following:
sudo apt-get -y purge some-kernel-package
Intermezzo
This intermezzo describes in more detail how the commands work and tries to fix an issue with linux-libc-dev:amd64
. Most users can skip this paragraph.
dpkg -l 'linux-*'
list all packages that have a name starting with 'linux-'sed '/^ii/!d; remove all lines that do *not* start with
ii`uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/"
find the current running kernel version/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d
Remove all lines, except the ones containing the current running kernel version numbers/^[^ ]* [^ ]* \([^ ]*\).*/\1/
For each line list only the package name/[0-9]/!d
Remove lines that do not contain numbers.
To fix Frederick Nord's issue I think the command can be amended as follows:
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d;/^linux-\(headers\|image\)/!d'
It basically adds an extra filter:
- /^linux-(headers\|image)/!d Delete all lines that do not start with
linux-headers
orlinux-image
/Intermezzo
Where some-kernel-package
can be replaced with one of the packages listed. Just beware that you don't remove the kernel packages that are in current use (as listed by the uname -a
) eg. sudo apt-get purge -y linux-headers-3.0.0-12
etc.
It can be automated further using the xargs command, but I don't like that. It is a personal thing. However, here's the command to do so:
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
This is what my /boot
looks like, one spare kernel (2.6.38-11) just in case and 3.2.0-24 being current:
$ ls -l /boot
total 59388
-rw-r--r-- 1 root root 730545 Sep 13 2011 abi-2.6.38-11-generic
-rw-r--r-- 1 root root 791023 Apr 25 13:51 abi-3.2.0-24-generic
-rw-r--r-- 1 root root 130326 Sep 13 2011 config-2.6.38-11-generic
-rw-r--r-- 1 root root 140341 Apr 25 13:51 config-3.2.0-24-generic
drwxr-xr-x 3 root root 5120 May 27 17:46 grub
-rw-r--r-- 1 root root 20883146 Oct 1 2011 initrd.img-2.6.38-11-generic
-rw-r--r-- 1 root root 22474219 May 5 09:04 initrd.img-3.2.0-24-generic
drwxr-xr-x 2 root root 12288 Apr 16 2009 lost+found
-rw-r--r-- 1 root root 176764 Nov 27 11:00 memtest86+.bin
-rw-r--r-- 1 root root 178944 Nov 27 11:00 memtest86+_multiboot.bin
-rw------- 1 root root 2656297 Sep 13 2011 System.map-2.6.38-11-generic
-rw------- 1 root root 2884358 Apr 25 13:51 System.map-3.2.0-24-generic
-rw------- 1 root root 1369 Sep 13 2011 vmcoreinfo-2.6.38-11-generic
-rw------- 1 root root 4526784 Sep 13 2011 vmlinuz-2.6.38-11-generic
-rw------- 1 root root 4965776 Apr 25 13:51 vmlinuz-3.2.0-24-generic
And file system usage:
$ df -h /boot
Filesystem Size Used Avail Use% Mounted
/dev/sda5 228M 63M 154M 29% /boot
sudo apt-get autoremove
did the trick for me, it cleaned up successfully all the unused kernel packages.
Equivalent to the accepted answer -- another (possibly) easier way is to install the ubuntu-tweak
tool, it can be downloaded from here. Go to "Janitor", and select "Old Kernel" to clean. It can be done in a few clicks. (tested on 14.04 desktop)