8

I got the following output when removing a kernel by dpkg --purge :

Removing linux-headers-3.13.0-112-generic (3.13.0-112.159) ...
Removing linux-image-extra-3.13.0-112-generic (3.13.0-112.159) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-112-generic
W: TMPDIR is mounted noexec, will not cache run scripts.

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.13.0-112-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-extra-3.13.0-112-generic (--purge):
 subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.13.0-112-generic (3.13.0-112.159) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
update-initramfs: Deleting /boot/initrd.img-3.13.0-112-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.4.0-71-generic
Found initrd image: /boot/initrd.img-4.4.0-71-generic
Found linux image: /boot/vmlinuz-4.4.0-67-generic
Found initrd image: /boot/initrd.img-4.4.0-67-generic
Found linux image: /boot/vmlinuz-4.4.0-66-generic
Found initrd image: /boot/initrd.img-4.4.0-66-generic
Found linux image: /boot/vmlinuz-4.4.0-64-generic
Found initrd image: /boot/initrd.img-4.4.0-64-generic
Found linux image: /boot/vmlinuz-3.13.0-115-generic
Found initrd image: /boot/initrd.img-3.13.0-115-generic
Found linux image: /boot/vmlinuz-3.13.0-113-generic
Found initrd image: /boot/initrd.img-3.13.0-113-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
  No volume groups found
done
Purging configuration files for linux-image-3.13.0-112-generic (3.13.0-112.159) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
Errors were encountered while processing:
 linux-image-extra-3.13.0-112-generic

Why does it run out of space even when purging? It is not an inode issue in this case.

Note: There are other questions where error happens during dpkg --configure or when installing a kernel. It is more understandable that system runs out of disk space then, but in this case I am purging a kernel - a linux-image-extra package to be specific - by dpkg. There is no dependency problem in this case. For example in this one a solution could be to purge kernel packages directly by dpkg, but the issue of this question produces an error when doing so.

  • 1
    @ElderGeek this happens when purging by dpkg, not by configuring. – jarno Mar 30 '17 at 14:38
  • @ElderGeek : I agree with jarno, and don't think it is a duplicate, at least of the referenced dup. Readers should also know that jarno is very experienced with kernel removal / purging. – Doug Smythies Mar 30 '17 at 14:41
  • Dpkg should be using / for work files and not /boot as per discussion we had in AU General Chat room as I was defining rmkernels project scope. This is an interesting problem presented by @jarno. – WinEunuuchs2Unix Mar 30 '17 at 14:57
  • 1
    @fkraiem I claim my answer is useful for this question. Not that useful for the other questions you refer to. – jarno Mar 31 '17 at 9:51
  • 1
    @jarno Regarding this comment Do you have swap enabled? AFAIK, tmpfs should be able to move pages to swap to free up space. The output of df -h and free might shed some light on the issue as well. – Elder Geek Mar 31 '17 at 13:33
5

When purging a linux-image-extra package, post installation scripts are run, since the main linux-image package of that kernel release may be left remaining in system: The respective initrd.img will be altered not to contain the extra's stuff; its size will decrease as a result of this process. However, the old initrd.img file is not removed in "/boot" and the new one is created beside it in "/boot" during this process, so there is a risk of running out of space.

The fix could be to create the new initrg.img file in different partition before replacing the old one by it in update-initramfs. So the update-initramfs script should be fixed.

A workaround would be to remove the respective versioned /boot/initrd.img file before running dpkg --purge for the linux-image-extra package. That could also be done by sudo update-initramfs -d -k 3.13.0-112-generic in this case, as the kernel I was removing was "3.13.0-112-generic".

| improve this answer | |
  • The last paragraph doesn't really belong here, if you think there is a bug in how kernel removals are handled, file one on Launchpad. – fkraiem Mar 31 '17 at 9:08
  • @fkraiem I added a workaround. – jarno Mar 31 '17 at 9:14
  • 1
    @fkraiem it does not harm telling where the problem lies here. – jarno Mar 31 '17 at 9:20
  • 1
    @fkraiem There's nothing wrong with writing about a workaround to a problem that may occur frequently. – karel Mar 31 '17 at 9:30
  • 1
    @fkraiem Bug report added. – jarno Mar 31 '17 at 15:23

Not the answer you're looking for? Browse other questions tagged or ask your own question.