I encountered the following error while upgrading my Ubuntu 12.04 server. Now apt-get
is unable to install or removed any package.
1 2 3 4 5 6 7 8 9 |
Unpacking linux-headers-3.13.0-62 (from .../linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb) ... dpkg: error processing /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb (--unpack): unable to create `/usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h.dpkg-new' (while processing `./usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h'): No space left on device No apport report written because the error message indicates a disk full error dpkg-deb: error: subprocess paste was killed by signal (Broken pipe) Errors were encountered while processing: /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb E: Sub-process /usr/bin/dpkg returned an error code (1) |
Though I have a lot of free space.
Resolution
For users of LVM systems, encrypted systems or limited-storage systems, the most frequent problem is that the /boot partition is simply full. The package manager cannot install a pending upgrade due to lack of space. Besides, apt-get can not remove a package due to broken dependency.
This problem can be fixed quickly and easily from the shell. Simply identify one or two old kernels to remove manually, which will provide the package manager enough space to install the queued upgrade.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
$ sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-* ## In Ubuntu 16.04 and earlier there may be leftover temporary ## files to delete. ## See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=814345 $ uname -r ## This command identifies the currently-running kernel 4.2.0-21-generic ## This is the current kernel. ## DO NOT REMOVE it! $ dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r) ## This command lists all the kernels excluding the booted ## kernel in the package database, and their status. rc linux-image-4.2.0-14-generic ## The oldest kernel in the database ## Status 'rc' means it's already been removed ii linux-image-4.2.0-15-generic ## The oldest installed kernel. Eligible for removal. ## Status 'ii' means Installed. ii linux-image-4.2.0-16-generic ## Another old installed kernel. Eligible for removal ii linux-image-4.2.0-18-generic ## Another old installed kernel. Eligible for removal ii linux-image-4.2.0-19-generic ## The previous good kernel. Keep iU linux-image-4.2.0-22-generic ## DO NOT REMOVE. Status 'iU' means it's not installed, ## but queued for install in apt. ## This is the package we want apt to install. ## Purge the oldest kernel package using dpkg instead of apt. ## First you need to remove the image initrd.img file manually ## due to Bug #1678187. $ sudo update-initramfs -d -k 4.2.0-15-generic $ sudo dpkg --purge linux-image-4.2.0-15-generic linux-image-extra-4.2.0-15-generic ## If the previous command fails, some installed package ## depends on the kernel. The output of dpkg tells the name ## of the package. Purge it first. ## Also purge the respective header package. $ sudo dpkg --purge linux-headers-4.2.0-15-generic ## Try also purging the common header package. $ sudo dpkg --purge linux-headers-4.2.0-15 ## Do not worry, if the previous command fails. $ sudo apt-get -f install ## Try to fix the broken dependency. |
I followed this with:
sudo apt-get autoremove --purge
Now you will be able to install new kernel!