Minha partição / boot atingiu 100% e agora não consigo atualizar. Não é possível remover kernels antigos para dar espaço

142

Meu primeiro problema foi quando tentei apt-get update ou apt-get upgrade . Na atualização, recebo o seguinte erro:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

Eu tentei executar o apt-get install -f e esta foi a saída (depois de dizer sim no prompt)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during './boot/System.map-3.2.0-27-generic': 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)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Eu tentei executar apt-get autoremove e isso me dá o mesmo erro que apt-get upgrade .

Quando executo df , recebo isso por /boot :

/dev/sda1                    233191     230297         0 100% /boot

Então, eu li em outro lugar que eu deveria tentar limpar kernels antigos. Eu verifiquei o que eu tinha com kernels:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

Quando tento remover o mais antigo com isto:

$ sudo apt-get purge linux-image-2.6.38-13-server
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-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Como posso liberar ou estender a inicialização sem estragar minha instalação?

    
por Strifey16 02.08.2012 / 17:17

11 respostas

117

Liberando espaço no sistema de arquivos raiz

Para liberar espaço no sistema de arquivos raiz, você pode tentar executar apt-get clean .

Se isso não funcionar, você pode ir para /var/cache/apt/archives e remover manualmente alguns arquivos do cache para recuperar algum espaço, por exemplo:

sudo rm linux-headers-*

Não será difícil remover todos os arquivos .deb aqui se você precisar - é o que o apt-get clean faz. Eles serão automaticamente baixados novamente por apt se forem necessários novamente.

Liberando espaço no sistema de arquivos / boot

O pôster original tem uma partição /boot separada, e é isso que está cheio, impedindo que o sistema apt funcione. Será necessário que ele liberte espaço lá.

Se houver espaço suficiente, acesse /boot e remova um arquivo de configuração ou dois:

sudo rm config-3.2.0-19-generic-pae

por exemplo, mas usando o nome de uma das versões do kernel que você pretende remover de qualquer maneira. Isso liberará um pouco de espaço (cerca de 144K cada).

Se você precisar de mais espaço, remova os arquivos antigos vmlinuz , initrd , abi e System.map até ter espaço suficiente (cerca de 22M para uma das versões do meu kernel i386).

Não importa o que você faça, não remova todos eles . Você deve pelo menos manter as últimas duas versões correspondentes de cada tipo de arquivo, para cada tipo de kernel que você usa.

Em seguida, continue com os comandos do apt-get install. Como mencionado acima, eles podem ter que baixar novamente alguns dos debs que você apagou, mas se for o caso, isso acontecerá automaticamente. Quando você tiver o apt funcionando novamente, limpe usando o apt-get para remover os pacotes correspondentes aos arquivos que você removeu - então tudo combina.

O arquivo de configuração em /boot é a configuração do kernel que foi usada pela equipe do kernel para construir o kernel com o mesmo nome. Deve ser inofensivo removê-lo, a menos que você o queira para referência ou para ajudá-lo a construir seus próprios grãos.

Finalmente, você está removendo manualmente um ou dois pacotes antigos do kernel da partição /boot para ter ainda mais espaço para o novo.

    
por John S Gruber 02.08.2012 / 17:54
61

No meu caso, os comandos apt e dpkg não puderam ser concluídos e não puderam ser removidos. A atualização automática falhou ao instalar o 2.6.32-56-server .

Meu primeiro passo foi identificar o espaço a ser usado,

cd /boot
du -sk *|sort -n

Eu tinha cerca de 30 kernels e arquivos de suporte.

Eu fiz um uname -a para obter o kernel em execução, Eu identifiquei que estava no Linux alternativo 2.6.32-43-server e fiz um tar de 6 das versões que não estavam em execução e eram antigas.

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Eu então fiz um rm -rf do que eu tinha feito backup:

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Estou mostrando esses comandos como exemplos, você terá que decidir com o que trabalhará para sua situação.

Agora que eu tinha algum espaço em /boot , consegui executar

apt-get -f install 

Para limpar a instalação com falha de 2.6.32-56-server .

Eu então fiz um

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

Isso me deu espaço para colocar de volta o que eu tinha copiado.

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

Para limpar, eu posso executar:

apt-get autoremove

Eu reiniciei e agora estou usando 4% de /boot .

    
por A.G. Russell 20.02.2014 / 17:48
19

Você pode usar dpkg em vez de apt-get para remover os kernels mais antigos:

sudo dpkg -r linux-image-3.2.0-29-generic
    
por psusi 08.04.2014 / 16:38
9

Notei que ainda havia alguns arquivos das versões antigas no diretório de inicialização:

$ ls /boot
vmcoreinfo-2.6.31-17-server

E o gerenciador de pacotes listaria as versões antigas:

dpkg -l | grep linux-image

Por isso, usei este comando ( autoremove também removeria imagens mais recentes que não quero remover)

sudo apt-get purge linux-image-2.6.31-17-server

Ainda tenho alguns cabeçalhos:

dpkg -l | grep linux-headers

Então eu fiz isso:

sudo apt-get purge linux-headers-2.6.32-34

Por fim, faltou um pacote que não consegui remover com a limpeza do apt-get:

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

Fonte: Remover um pacote marcado como rc pelo dpkg

sudo dpkg --purge linux-image-2.6.28-11-server
    
por mreiter 24.10.2012 / 15:56
2

Isso é o que eu usei:

sudo apt-get autoremove linux-image-xxxx

Faça isso para todos os kernels antigos e mantenha apenas os dois mais recentes.

Se você quiser remover automaticamente os kernels antigos e atualizar o GRUB veja isto: Documentação do Ubuntu

    
por Samer 22.11.2015 / 18:33
2

Você não pode agir sobre pacotes, mas você pode agir sobre outros arquivos. Primeiro, vá até a sua pasta pessoal e veja se há qualquer coisa que você possa excluir. Caso contrário, tente mover uma boa quantidade de arquivos para outra partição (ou uma unidade flash) e tente sudo apt-get install -f para limpar os problemas de dependência de pacote (provavelmente você instalou um arquivo .deb através de dpkg ) e, em seguida purgar todos os kernels antigos. Quando você tiver pelo menos 10 MB de segurança, tente limpar softwares ou arquivos desnecessários.

    
por hexafraction 02.08.2012 / 17:20
1

Use o Gerenciador de Pacotes Synaptic. Basta escolher o pacote que você deseja remover e ele solicitará que você também remova os pacotes que dependem dele. Na minha experiência, os pacotes do kernel sempre vêm em grupos de dois (ou mais, dependendo de como você conta) que são interdependentes. Geralmente, você pode encontrar os antigos rapidamente usando o filtro "local / obsoleto".

    
por Wegko 03.08.2012 / 04:39
1

Basta executar sudo apt-get -f autoremove para resolver meu problema.

    
por forzagreen 26.04.2018 / 10:26
1

Eu descobri que a única coisa que funcionava para mim era usar o Aptitude.

sudo aptitude

Então, quando ele é aberto, ele geralmente diz algo sobre dependências não atendidas na parte inferior. Você pode clicar na letra g para prosseguir com a remoção sugerida. Ele levará você para uma página onde ele lista o que vai acontecer.

Deve haver menos - ao lado dos kernels quebrados. Pressione g novamente e ele removerá os kernels quebrados. Pressione q para sair. Então você deve ser capaz de usar sudo apt-get autoremove para se livrar dos kernels antigos e liberar espaço.

    
por Matthew Swanson 04.04.2017 / 01:29
1

Verifique o uso de /var/tmp com du -sh /var/tmp/ . Todos os arquivos nessa pasta podem ser excluídos para criar espaço.

Você pode então executar o seguinte para remover os kernels antigos:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub
    
por Tertius 06.11.2017 / 10:29
1

Execute isto:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a

Fonte: Eu recebo este erro após o upgrade. por favor ajude

    
por Ardi Nusawan 15.02.2017 / 19:41