Questão Como libero mais espaço em / boot?


Minhas /boot A partição está quase cheia e recebo um aviso toda vez que eu reinicio meu sistema. Eu já deletei antigos pacotes do kernel (linux-headers ...), na verdade eu fiz isso para instalar uma nova versão do kernel que veio com as atualizações automáticas.

Depois de instalar essa nova versão, a partição está quase cheia novamente. Então, o que mais eu posso deletar? Existem outros arquivos associados às imagens antigas do kernel?

Aqui está uma lista de arquivos que estão no meu /boot partição:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

Atualmente, estou usando o 3.0.0-14-generic núcleo.


524
2017-12-22 10:06


origem


Vale ressaltar que nem toda instalação do Ubuntu terá uma partição separada / boot - muitas vezes, tudo será apenas uma grande partição. Esta resposta se aplica àqueles que possuem uma partição / boot separada. Aqueles que usam LVM ou criptografia "full disk" precisam de um / boot separado, caso contrário, ele pode ser opcional. - thomasrutter
Se alguém tiver o mesmo problema que eu: depois de / boot não ter mais espaço "apt-get upgrade" irá falhar ao re-gerar arquivos initrd para os kernels que estão instalados ou que o script update-initramfs acredita estarem instalados examinando o conteúdo de / var / lib / initramfs-tools. Nessa situação, não é possível remover os kernels antigos usando o apt-get, porque a partição fscking / boot não possui espaço no dispositivo. Pode-se fazer isso usando "dpkg -P" seguido de limpeza da entrada correspondente em / boot (para liberar espaço) e / var / lib / initramfs-tools (a imagem initrd não será gerada). - wojci
Um ponto chave para respostas corretas é que eles lhe dizem para remover o pacotes contendo as versões mais antigas do kernel. Muitas páginas da Web que solucionam esse problema recomendam remover diretamente arquivos na partição / boot; Isso pode funcionar por um tempo, mas você pode eventualmente atualizar um pacote que recria arquivos que estão faltando para as versões do kernel que possuem pacotes, deixando-o sem espaço. - kgrittn
help.ubuntu.com/community/RemoveOldKernels - jarno


Respostas:


Você tem muitos kernels não utilizados. Remova tudo exceto os últimos kernels com:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Isso é uma forma abreviada de:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Removendo o linux-image-x.x.x-x pacote também irá remover linux-image-x.x.x-x-generic.

Os cabeçalhos estão instalados /usr/src e são usados ​​na criação de módulos de kernel fora da árvore (como o driver proprietário da nvidia e o virtualbox). A maioria dos usuários deve remover esses pacotes de cabeçalho se o pacote do kernel correspondente (linux-image-*) não está instalado.

Para listar todos os kernels instalados, execute:

dpkg -l linux-image-\* | grep ^ii

Um comando para mostrar todos os kernels e cabeçalhos que podem ser removidos, excluindo o atual executando o kernel:

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

Seleciona todos os pacotes nomeados começando com linux-headers-<some number> ou linux-image-<some number>, imprime os nomes dos pacotes instalados e, em seguida, exclui kernel atual carregado / em execução (não necessariamente o Mais recentes núcleo!). Isso se encaixa na recomendação de testar um kernel mais novo antes de remover os kernels mais antigos e conhecidos.

Então, depois de atualizar os kernels e reiniciar para testá-lo, você pode remover todos os outros kernels com:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

600
2017-12-24 14:34



Resposta fantástica. Uma outra informação ajudaria: Como você pode dizer (com certeza) qual dos kernels que você está usando? Presumivelmente você não pode simplesmente assumir que é o último ... Editar: E isso parece como a resposta é uname -a. Provavelmente, é melhor garantir que você não tenha um pendente restart-to-install-new-kernel pendente (como eu fiz; mas notei a incompatibilidade entre uname -a e o kernel "mais recente"). - T.J. Crowder
@freddyb Feito. Observe que os comandos imprimem / removem outros kernels que não o carregado / inicializado. - Lekensteyn
Se o apt-get purgar falhar devido a dependências não satisfeitas, então você pode seguir o askubuntu.com/questions/171209/… - svandragt
Resposta muito completa e ainda funciona ... e ainda é necessário em 2014. É meio ridículo que ainda não seja feito automaticamente pelas ferramentas GUI. - allprog
@ byf-ferdy O kernel é uma parte essencial do sistema operacional, se a versão mais recente de alguma forma não funcionar totalmente com o seu hardware, então você ainda pode selecionar um diferente para inicializar. Um bom recurso provavelmente seria algo que remove todos os kernels instalados automaticamente com mais de um mês (exceto os dois últimos). - Lekensteyn


Sua partição de inicialização está cheia. Como esta é uma atualização do kernel, esses arquivos serão copiados para a partição de inicialização, portanto, é necessário limpá-la. Aqui está um postagem no blog que mostrará como limpar as imagens antigas do kernel com um comando. Eu vou dar uma sinopse básica do método. Use este comando para imprimir a versão atual do seu kernel:

uname -r

Então use este comando para imprimir todos os kernels que você instalou e que não são seu kernel mais novo:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Certifique-se de que seu kernel atual não esteja nessa lista. Observe como esta é a maioria do comando final (abaixo). Para desinstalar e excluir esses kernels antigos, você vai querer canalizar esses argumentos para:

sudo apt-get -y purge

Agora podemos fazer tudo o que queremos combinando esses dois últimos comandos nesta bagunça profana:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

E esse comando vai cuidar de tudo para você. Vou confirmar que isso funciona perfeitamente, mas nunca confio em ninguém na internet. :) Para mais informações, o post do blog dá uma explicação muito boa sobre o que cada parte do comando faz para lê-lo, então você está satisfeito que ele faz o que você quer fazer.


200
2018-02-21 03:38



Isso funcionou muito bem, obrigado. - Michael Durrant
isso também corresponde ao linux-libc-dev: amd64 - Frederick Nord
o que a remoção não intencional de "linux-libc-dev: amd64" causa? - ConfusedStack
@FrederickNord obrigado pelo heads-up. Corrigido isso. Isso teria causado algumas dificuldades na compilação de programas. - dward
O comando soa bem, mas quando eu executo ele eu recebo o mesmo erro que recebo quando eu quero instalar algo e não pode fazê-lo porque a inicialização está cheia: --------------- ----------- Os seguintes pacotes têm dependências não satisfeitas: linux-image-extra-4.2.0-27-generic: Depende: linux-image-4.2.0-27-generic mas não vai a ser instalado linux-image-extra-4.2.0-30-generic: Depende: linux-image-4.2.0-30-generic mas não vai ser instalado - Alex


sudo apt-get autoremove

Este comando está fazendo o trabalho automaticamente.


94
2017-11-05 05:58



Como o nome sugere, o apt-get AUTOremove é uma operação automatizada em que o sistema adota o que você está tentando alcançar. Não deve ser usado como um substituto para a administração do sistema de senso comum. O problema com essa abordagem: Se você (ou uma atualização) remover um pacote que faz parte dessa lista de dependências, a função de remoção automática deseja remover todos os outros pacotes da lista de dependências, deixando-o com um sistema sem área de trabalho (e às vezes mesmo com um sistema completamente quebrado). - Rinzwind
Referência: 1 de muitas fontes para este comentário acima: linuxquestions.org/questions/debian-26/… - Rinzwind
Se o linux-image-generic estiver instalado e os novos kernels não forem instalados explicitamente, isso removerá os kernels antigos. O bom senso é não aceitar mudanças no sistema sem lê-las primeiro. Se o senso comum tiver sido usado antes de usar este comando, não haverá problemas. - mchid
@Rinzwind - Este comando esvaziou 250 MB do meu espaço em disco, removendo antigos 'cabeçalhos linux' - Chinmaya B
autoremove funciona se usado antes existe uma condição de falta de espaço. No entanto, uma vez que o apt fica sem espaço e aborta (e o usuário finalmente percebe o problema), é tarde demais para executar autremove ou qualquer outra solução baseada em apt. Se esse for o seu caso, tente uma das soluções baseadas no dpkg. - user535733


O Gerenciador de Pacotes Synaptic pode ser usado para selecionar e remover facilmente imagens antigas do kernel. Screenshot of Synaptic Package Manager

Se você ainda não possui o Synaptic instalado:

sudo apt-get install synaptic

Inicie o aplicativo e selecione as opções mostradas.

Você deve ser capaz de destacar todos os pacotes "linux-" com a versão "2.6.x", onde x é entre 31 e 38, de acordo com os arquivos em sua pasta / boot.

Clique com o botão direito do mouse em cada um desses pacotes do Linux e escolha a opção "Marcar para remoção completa". Por fim, clique no botão aplicar. Isso removerá todos os arquivos e arquivos associados. Seu /boot pasta agora deve ser um pouco mais organizada.


38
2017-12-24 14:34



Eu estou no 14.04. Eu tenho lidado com esta situação no passado através da linha de comando, mas eu decidi tentar este método hoje ... para mim, minhas imagens do linux estavam localizadas em instalado (manual), não instalado (local ou obsoleto) - Ryan
Ah não. Não consigo instalar o Synaptic porque não há espaço /boot! - John McGehee
@JohnMcGehee fsck e parted devem resolver esse problema para você. - FlipMcF


Obrigado pelo seu post detalhado do seu problema, isso me levou na direção certa. Embora seja útil manter arquivos de kernel anteriores, você pode remover todos eles de uma só vez, verifique esta postagem:
Como remover todos os cabeçalhos de kernel do Linux não utilizados, imagens e módulos

Feito via linha de comando. Se você estiver fazendo isso via remote use algo como o WINSCP para abrir uma sessão de terminal e apenas colá-la, funciona muito bem.

Aqui está copiado do link do artigo, sugiro que você leia o artigo completo:

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

24
2018-06-01 12:53





Esta é uma nova resposta para uma pergunta antiga, mas uma maneira fácil de limpar essa coisa (e mais) é instalar Ubuntu Tweak. Para instale-o:

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

então você pode rodar o Ubuntu Tweak, indo para a aba "zelador", e daqui é uma questão de três cliques:

Ubuntu tweak janitor for old kernels

É melhor deixar o último kernel (nunca se sabe) ou um kernel de trabalho bem conhecido para segurança; mas isso é facilmente personalizável.

Você pode usar a mesma ferramenta para limpar muitas coisas - lembre-se de que, se você limpar o cache de miniaturas ou o cache de TB, o sistema precisará reconstruí-los se forem necessários.


22
2017-11-25 13:11



Eu tentei instalar o Ubuntu tweak e também indo para o site do repositório. Diz que é apenas para 13.10 e antes. Você tem uma versão atualizada para 15.04? - JayCouture.com
@ JayCouture.com A versão no site é para 14.04 (o "para 13.10 e antes" é um link para versões mais antigas). Eu ignoro se existe uma versão para 14.10 ou 15.04. - Rmano


Consegui corrigir o problema usando dpkg para remover os pacotes diretamente. Embora os pacotes ainda estejam listados dpkg -l, os arquivos são removidos /boot, liberando espaço.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Depois disto, apt-get -f install resolvi meus problemas de dependência e tudo estava bem com o mundo.

Eu não vou aceitar esta minha resposta, no entanto, como eu ainda preciso saber se eu deveria estar aumentando minha /boot tamanho ou fazendo outra coisa.


17
2017-12-03 18:47



Você não deve ter uma partição separada / boot em primeiro lugar, ou você deve aumentar seu tamanho como 100mb é muito pequeno. - psusi
Obrigado, eu apago via: sudo dpkg --remove linux-headers-3.5.0-28* - TiloBunt
e sudo dpkg --remove linux-image-3.5.0-28* para a imagem, verificada via df -h - TiloBunt


Você pode parar de usar uma partição / boot separada, então você não terá esse espaço limitado lá. Para fazer isso, desmonte a partição, monte-a em outro lugar e copie todos os arquivos para o diretório / boot em sua partição raiz, remova a entrada do / etc / fstab e reinstale o grub. Por exemplo (você precisará usar a partição correta):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

Você pode usar o gparted para excluir a partição antiga / boot e possivelmente estender a partição raiz para usar esse espaço. Para estender a partição raiz, você precisará inicializar a partir do LiveCD, e o espaço livre precisa ser imediatamente à direita. Se a partição / boot estiver atualmente à esquerda da partição raiz, você precisará primeiro mover a partição raiz para a esquerda e estendê-la, mas isso pode levar muito, muito tempo, então pode não valer a pena problema.


11
2017-12-22 16:38



Mover / boot para minha partição principal não é uma solução para mim desde que tudo, mas o / boot é criptografado. Você não poderia saber isso da minha pergunta, desculpe. - user6722
Esta é uma boa solução se as soluções acima não funcionarem devido à falta de espaço no volume de inicialização ou se você tiver repetidamente o problema de "falta de espaço". Por favor, leia primeiro porque às vezes é necessário ter uma partição / boot embora: (help.ubuntu.com/community/DiskSpace) - svandragt
@ svandragt, basicamente não há razão para precisar de uma partição / boot nos dias de hoje. A única coisa que resta é se sua BIOS está quebrada e não pode ver todo o disco, e qualquer máquina feita na última década não tem essa limitação. Outros casos legados, como o uso de raid ou LVM, agora são manipulados corretamente pelo grub2. - psusi
Existem algumas razões para ter uma partição de inicialização separada. Mas não tenho certeza se os benefícios valem a configuração de complexidade aumentada. 1. O sistema operacional pode se beneficiar de inicialização mais rápida via ext2. 2. A segurança pode ser aumentada pela montagem / boot como RO. (rootkits, etc.), ou mesmo permanecer desmontado em tempo de execução. 3. grub (1) tem (teve) alguns problemas com o ext4 ainda. 4. Necessário para executar lvm (grubv1). Embora isso não se aplique à configuração padrão do Ubuntu. - David Cahill
lsblk pode ser usado para determinar qual partição é o que - Mr Purple


Para mim ambos apt-get purge e dpkg --remove ambos falharam. Então tive que deletar algumas imagens antigas do kernel do / boot com rm -f.


5
2017-10-14 09:22



Esta não é uma boa maneira de remover pacotes. Embora essa resposta não seja muito específica sobre o motivo de removê-las da maneira correta, tenho certeza de que, se essas informações fossem fornecidas (em uma questão separada, é claro), poderíamos tentar descobrir a causa do problema. - thomasrutter
Eu acredito que foi um fracasso, porque /boot partição estava cheia. Estes comandos tentam primeiro atualizar o kernel para recente e travar com No space left on device enquanto gera initrd.img - vp_arth
ATENÇÃO, a remoção direta de arquivos pode causar problemas, pois uma atualização do pacote linux-firmware pode recriar o arquivo initrd.img para cada versão que ele acredita estar instalada com base nas informações do pacote. Vejo: askubuntu.com/questions/865577/… - kgrittn
Obrigado, esta é a solução final que salva vidas quando nada mais funciona. - Jeff Puckett


Tirando o melhor das respostas acima, minha abordagem testada e verdadeira é esta:

  • uname -apara encontrar o kernel em execução.
  • dpkg -l linux-{headers,image}-\* | grep ^ii para listar todos os pacotes relacionados ao kernel atualmente instalados. Isso incluirá o kernel em execução.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz} para remover os kernels antigos. Substituir xx,yy,zz com uma lista das construções do kernel que você deseja remover - estas são todas as compilações listadas pelo comando anterior que são mais antigas que o kernel atualmente em execução. Certifique-se de não remover o kernel atualmente em execução - seu sistema se tornará não inicializável. Você também pode precisar alterar a versão do kernel de 3.16.0 para o que estiver instalado no seu sistema.
  • Opcionalmente, faça um adicional sudo apt-get autoremove—Isso removerá quaisquer dependências remanescentes dos kernels antigos que não são mais necessários para o atual, liberando mais espaço.

Você pode ter arquivos de cabeçalho sem as versões de kernel correspondentes instaladas ou vice-versa - basta incluir todas essas versões no comando. O APT irá reclamar que alguns pacotes não podem ser removidos porque não estão instalados, mas isso não causará nenhum dano.

Se algo falhar ...

  • Se o comando apt falhar devido a um nenhum espaço deixado no dispositivo erro, use o comando dpkg correspondente: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Se o comando dpkg ainda não funcionar porque o linux-image pacotes são necessários pelo linux-headers pacotes da mesma versão (que você também deseja desinstalar), o dpkg pode ter falhado em resolver isso. Reexamine a saída de dpkg -l e especifique quaisquer sufixos de nome de pacote na linha de comando. Por exemplo, em um dos meus sistemas, o comando que eventualmente funcionou foi sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Se você tiver qualquer outro erro, procure ajuda - você pode ter um problema diferente do que imaginou.

4
2017-07-09 20:24



@ user535733 o caso usual (pelo menos o que eu continuo correndo) é que ainda há alguns espaço em /boot, apenas não é suficiente para outro pacote do kernel. Nesses casos, o acima funcionou bem. Sinta-se livre, no entanto, para adicionar o dpkg comando. Quanto a purgenão, não é um tipo de "remoção de força". O que faz, diferentemente de removeé que também exclui os arquivos de configuração. Desde / enquanto os pacotes do kernel não instalam arquivos de configuração, remove e purge fará o mesmo com os pacotes do kernel. - user149408
Adicionado quarto marcador com o comando dpkg correspondente. - user535733