Por que há um erro update-initramfs ao remover um kernel pelo dpkg? [duplicado]

6

Eu obtive a seguinte saída ao remover um kernel por 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

Por que fica sem espaço mesmo quando purga? Não é um problema do inode neste caso.

Nota: Há outras questões em que o erro ocorre durante o dpkg --configure ou durante a instalação de um kernel. É mais compreensível que o sistema fique sem espaço em disco, mas neste caso eu estou purgando um kernel - um pacote linux-image-extra para ser específico - por dpkg . Não há problema de dependência neste caso. Por exemplo, em este , uma solução poderia ser a limpeza direta de pacotes do kernel por dpkg , mas a questão desta questão produz um erro ao fazer isso.

    
por jarno 30.03.2017 / 16:18

1 resposta

4

Ao limpar um pacote linux-image-extra, os scripts de pós-instalação são executados, já que o principal pacote linux-image desse release do kernel pode ser deixado no sistema: O initrd.img será alterado para não conter os extras coisa; seu tamanho diminuirá como resultado desse processo. No entanto, o antigo arquivo initrd.img não é removido em "/ boot" e o novo é criado ao lado dele em "/ boot" durante este processo, portanto há um risco de ficar sem espaço.

A correção poderia ser criar o novo arquivo initrg.img em uma partição diferente antes de substituir o antigo por ele em update-initramfs . Portanto, o script update-initramfs deve ser corrigido.

Uma solução alternativa seria remover o respectivo arquivo /boot/initrd.img com versões anteriores antes de executar dpkg --purge para o pacote linux-image-extra. Isso também pode ser feito por sudo update-initramfs -d -k 3.13.0-112-generic neste caso, já que o kernel que eu estava removendo era "3.13.0-112-generic".

    
por jarno 31.03.2017 / 10:43