Como posso remover os kernels antigos / instalar novos quando o / boot está cheio?

31

Eu sei que essa pergunta é feita muitas vezes antes, no entanto, comigo é um pouco diferente, eu acho.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

Minha partição de inicialização está cheia.

Kernel atual:

# uname -r
3.2.0-35-generic

Todos os Kernels:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

Então, pensei em remover o kernel 3.2.0.32-genérico com:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Sem sucesso.

Quando tento apt-get -f install, também falha:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

Qualquer ajuda seria realmente apreciada.

Atualização: eu fiz:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

Depois disso, o seguinte problema com apt-get -f install:

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
Marcel
fonte
Veja minha resposta para quando a remoção automática não funciona devido à falta de espaço.
nslntmnx

Respostas:

22

Você não pode usar o apt-get quando seu kernel estiver desatualizado.

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

use lspara ver o que está na pasta, remova o mais antigo ou os dois

sudo apt-get -f install

Então você pode limpar o apt-get como em

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

ou apenas continue com rm.

você também deve sudo update-grubquando terminar

wlraider70
fonte
O comando install reinstalou muitos kernels antigos, resultando em um disco de inicialização completo. O comando de limpeza resolveu isso para mim.
SPRBRN
Eu segui essa resposta até sudo apt-get -f install, em seguida, reiniciei para garantir que tudo está bom e removi o restante apt autoremoveconforme sugerido na saída dos comandos anteriores.
Bart C #
10

Aparentemente, isso funciona:

sudo apt-get autoremove 

De acordo com apt-geta página de manual:

autoremove é usado para remover pacotes que foram instalados automaticamente para satisfazer dependências de outros pacotes e agora não são mais necessários.

3.16.0-39 é o que tentei instalar, mas falhei porque / boot estava cheio. 3.16.0-38 é a minha versão atual. Você pode ver que -38 foi pulado.

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.
ChePazzo
fonte
Eu gosto desta resposta, mas falta algum manual para saber exatamente o que é autoremove.
S3m3n
1
autoremove só funciona se alguma ação apt na fila anterior for concluída corretamente. A remoção automática não funcionará se você já estiver recebendo um erro 'sem espaço restante no dispositivo' - essas ações na fila anterior falharão e a remoção automática não será executada. Em outras palavras, a remoção automática funciona ... até que não funcione.
user535733
@ user535733 você está correto. Veja minha resposta para quando a remoção automática não funciona devido à falta de espaço.
nslntmnx 8/08
7

Em um terminal, execute o seguinte comando:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get purge

Este comando lista todos os kernels do Linux atualmente instalados, seleciona todos os que não são usados ​​no momento e os remove.

Django23
fonte
2
Talvez você queira explicar exatamente o que esse comando faz. Parece um pouco complicado: em geral, as pessoas devem ser aconselhadas a não executar comandos como esse que eles não entendem - especialmente com algo vital para o seu sistema.
precisa saber é o seguinte
@mtdevans: adicionei que o comando acima lista todos os kernels do Linux atualmente instalados, seleciona todos os que não estão sendo usados ​​no momento e remove todos os kernels que não estão sendo usados ​​no momento.
21920 Kristian
4
O comando é útil, basta executar a parte antes de "| xargs" primeiro para verificar o que você deseja excluir. Também | O grep -v pode ser necessário para preservar o kernel mais recente, que ainda não está em uso, mas é necessário.
Roman Susi 5/05
4
isso é perigoso, pois também corresponde ao linux-libc-dev: amd64
Frederick Nord
2
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

Se a execução do comando acima sem o "sudo apt-get -y purge" corresponder ao seu linux-libc-dev: amd64, você poderá adicionar um ponto-e-vírgula ao regex para não incluí-lo:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ :]*\).*/\1/;/[0-9]/!d' | xargs

Agora, verifique se está bom e adicione o "sudo apt-get -y purge"

Cory W
fonte
1

Para o Ubuntu 12.04, tente isso sudo apt-get purge linux-image-[kernel version]

Isso excluirá qualquer versão do kernel. Se sua pasta de inicialização possui muitos kernels, não se esqueça de atualizar o grub e reiniciar o sistema

ex. sudo apt-get purge linux-image-3.11.6 *

alisaleh
fonte
2
O problema é que isso não funciona mais quando se tem um ponto em que há problemas de dependência, como o que está à frente.
Paŭlo Ebermann
Isso funciona para mim!
Daniel
0

Muitas respostas dizem usar "apt autoremove", mas isso pode não funcionar quando / boot estiver cheio porque o apt tenta adicionar kernels antes de remover.

O próximo apt autoremove não removerá nenhum kernel mencionado em /etc/apt/apt.conf.d/01autoremove-kernels, portanto, precisamos corrigir isso.

Aqui está o processo que funcionou para mim.

Remova os arquivos de configuração do kernel indesejados.

sudo dpkg --purge $ (COLUNAS = 200 dpkg -l | grep "linux-image-extra" | grep "^ rc" | tr -s '' | cut -d '' -f 2)

Atualize o /etc/apt/apt.conf.d/01autoremove-kernels executando ...

sudo /etc/kernel/postinst.d/apt-auto-removal

Esperemos que o apt autoremove funcione.

sudo apt autoremove --purge

Caso contrário, você deverá remover manualmente os kernels muito antigos e não utilizados do / boot.

Primeiro descubra qual kernel você está executando.

uname -r

Não remova seu kernel atual ou anterior.

sudo rm /boot/initrd.img-V.XX.Y-ZZ-generic

Agora você deve ter espaço suficiente para tentar o apt autoremove novamente. Caso contrário, remova outro kernel muito antigo. Obviamente, mantenha-se atualizado e o próximo mais antigo.

nslntmnx
fonte
-2

Espero que isso possa ajudar:

Eu costumo excluir kernels antigos usando o zelador do ubuntu-tweak, boa interface gráfica e fácil :)

clique em 'sistema' e haverá uma lista de kernels antigos, basta clicar nele e limpar

mohur
fonte
1
é um servidor ubuntu e eu estou conectado através da massa. (Mas eu também tenho a disponibilidade para Webmin no servidor)
Marcel
Como posso instalar este zelador do ubuntu-tweak, por favor?
Jenny O'Reilly