Como libero mais espaço no / boot?

563

Minha /bootpartição está quase cheia e recebo um aviso toda vez que reinicio o sistema. Eu já excluí pacotes antigos do kernel (linux-headers ...); na verdade, fiz isso para instalar uma versão mais recente do kernel que vinha 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 posso excluir? Existem outros arquivos associados às imagens antigas do kernel?

Aqui está uma lista de arquivos que estão na minha /bootpartiçã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-generickernel.

user6722
fonte
5
Vale ressaltar que nem todas as instalações do Ubuntu terão uma partição / inicialização separada - geralmente tudo será apenas uma grande partição. Esta resposta se aplica àqueles que possuem uma partição / inicialização separada. Aqueles que usam criptografia LVM ou "disco completo" precisam de uma inicialização / separada, caso contrário, pode ser opcional.
thomasrutter
4
Se alguém tiver o mesmo problema que eu: depois do / boot não ter mais espaço, o "apt-get upgrade" falhará ao gerar novamente arquivos initrd para os kernels instalados ou que o script update-initramfs acredite estar instalado 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 tem espaço no dispositivo. Pode-se fazer isso usando o "dpkg -P" seguido pela limpeza da entrada correspondente em / boot (para liberar espaço) e / var / lib / initramfs-tools (a imagem initrd não será gerada).
Wojci
3
Um ponto chave para respostas corretas é que eles pedem para você remover os pacotes que contêm as versões mais antigas do kernel. Muitas páginas da Web que abordam esse problema recomendam a remoção direta dos arquivos na partição / boot; isso pode funcionar por um tempo, mas você pode finalmente atualizar um pacote que recria arquivos ausentes para as versões do kernel que possuem pacotes, ficando assim sem espaço.
precisa saber é o seguinte

Respostas:

629

Você tem muitos núcleos não utilizados. Remova todos, 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}}}

Este é um atalho para:

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

A remoção do linux-image-x.x.x-xpacote também removerá linux-image-x.x.x-x-generic.

Os cabeçalhos são instalados /usr/srce usados ​​ao criar módulos de kernel externos (como o driver da nvidia proprietário e a caixa virtual). A maioria dos usuários deve remover esses pacotes de cabeçalho se o pacote correspondente do kernel ( linux-image-*) não estiver 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 kernel atual em execução:

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

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

Portanto, 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]+//')")
Lekensteyn
fonte
16
Resposta fantástica. Uma informação adicional ajudaria: Como você pode dizer (com certeza) quais dos kernels que você está usando? Presumivelmente, você não pode simplesmente assumir que é o último ... Editar : E parece que a resposta é uname -a. Provavelmente, é melhor garantir que você não tenha um pendente de reiniciar para instalar o novo kernel pendente (como eu fiz; mas observei a incompatibilidade entre uname -ao kernel "mais recente") e o último.
TJ Crowder
5
@freddyb Feito. Observe que os comandos imprimem / removem outros kernels que não sejam carregados / inicializados .
precisa saber é o seguinte
9
Se a limpeza do apt-get falhar por causa de dependências não atendidas, você poderá seguir os conselhos em askubuntu.com/questions/171209/…
#
11
Resposta muito completa e ainda funciona ... e ainda é necessária em 2014. Meio ridículo que ainda não seja feito automaticamente pelas ferramentas da GUI.
precisa saber é
6
@ byf-ferdy O kernel é uma parte essencial do SO, se a versão mais recente de alguma forma não funcionar completamente com o seu hardware, você ainda poderá selecionar outra para inicializar. Um recurso interessante provavelmente seria algo que remove todos os kernels instalados automaticamente com mais de um mês (exceto os dois últimos).
Lekensteyn
217

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, você precisa fazer a limpeza. Aqui está uma postagem no blog que mostrará como limpar as imagens antigas do kernel com um comando. Vou dar uma sinopse básica do método. Use este comando para imprimir a versão atual do seu kernel:

uname -r

Em seguida, use este comando para imprimir todos os kernels que você instalou que não são seu kernel mais recente:

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

Verifique se o seu kernel atual não está nessa lista. Observe como essa é a maioria do comando final (abaixo). Para desinstalar e excluir esses kernels antigos, você deseja canalizar esses argumentos para:

sudo apt-get -y purge

Agora podemos fazer tudo o que queremos, combinando esses dois últimos comandos nessa 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 cuidará de tudo para você. Confirmo que isso funciona perfeitamente, mas nunca confie em ninguém na internet. :) Para obter mais informações, a postagem do blog fornece uma explicação muito boa sobre o que cada parte do comando faz para lê-lo, para que você fique satisfeito com o cumprimento do que deseja.

dward
fonte
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 aviso. Corrigido isso. Isso teria causado algumas dificuldades na compilação de programas c.
dward 14/10
9
O comando parece bom, mas quando eu o executo, recebo o mesmo erro que quando desejo instalar algo e não pode fazê-lo porque a inicialização está cheia: --------------- ----------- Os seguintes pacotes têm dependências não atendidas: linux-image-extra-4.2.0-27-generic: Depends: linux-image-4.2.0-27-generic, mas não está funcionando para ser instalado-linux-image extra-4.2.0-30-generic: Depende: linux-image-4.2.0-30-genérico, mas não vai ser instalado
Alex
109
sudo apt-get autoremove

Este comando está executando o trabalho automaticamente.

karan
fonte
7
Como o nome sugere, o apt-get AUTOremove é uma operação automatizada na qual o sistema adota o "melhor palpite" do 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 esta abordagem: Se você (ou uma atualização) remove 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 a área de trabalho 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 5/12/12
7
se o linux-image-generic estiver instalado e os novos kernels não foram instalados explicitamente, isso removerá os kernels antigos. O senso comum é não aceitar nenhuma alteração no sistema sem lê-las primeiro. Se o senso comum tiver sido usado antes de usar este comando, não haverá problemas.
Mchid 01/03
1
@Rinzwind - Este comando esvaziou 250 mb de meu espaço em disco removendo os antigos 'cabeçalhos linux'
Chinmaya B
3
autoremove funciona se usado antes que exista 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 o autremove ou qualquer outra solução baseada no apt. Se esse for o seu caso, tente uma das soluções baseadas em dpkg.
user535733
40

O Synaptic Package Manager pode ser usado para selecionar e remover facilmente imagens antigas do kernel. Captura de tela do 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 conseguir destacar todos os pacotes "linux-" com a versão "2.6.x" em que x está entre 31 e 38, de acordo com os arquivos na sua pasta / boot.

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

liberdade de expressão
fonte
Estou em 14.04. Eu lidei com essa situação no passado através da linha de comando, mas decidi tentar esse método hoje ... para mim, minhas imagens linux estavam localizadas em instalado (manual), não instalado (local ou obsoleto)
Ryan
8
Ah não. Não consigo instalar o Synaptic porque não há espaço /boot!
John McGehee
@JohnMcGehee fsck e parted deve resolver esse problema para você.
FlipMcF 03/04
25

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

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

Aqui ele é 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
Omni
fonte
23

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

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

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

Ubuntu tweak janitor para kernels antigos

É melhor deixar o último kernel (você nunca sabe) ou um kernel de trabalho conhecido por 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 necessário.

Rmano
fonte
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 # 10/15
@ JayCouture.com A versão do site é para 14.04 (o "for 13.10 and before" é um link para versões mais antigas). Ignoro se existe uma versão para 14.10 ou 15.04.
Rmano
19

Consegui corrigir o problema usando dpkgpara 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 disso, apt-get -f installcorrigi meus problemas de dependência e tudo estava bem com o mundo.

No entanto, não aceitarei esta minha resposta, pois ainda preciso saber se devo aumentar meu /boottamanho ou fazer outra coisa.

Phrogz
fonte
Você não deve ter uma partição de inicialização / separada em primeiro lugar, ou deve aumentar seu tamanho, pois 100mb é muito pequeno.
Psd #
1
Obrigado, eu apago via:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt
2
e sudo dpkg --remove linux-image-3.5.0-28*para a imagem, verificada viadf -h
TiloBunt
Obrigado, isso me serviu também. Eu removi alguns kernels antigos ( não o que eu estava usando no momento) e depois fiz o apt-get -f install. Além disso, não se esqueça de fazer mais tarde apt-get autoremove, para possivelmente remover outros desnecessários.
Yajo 4/06
15

Você pode parar de usar uma partição separada / de inicialização e não terá espaço tã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 na sua partição raiz, remova a entrada de / 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 precisará estar imediatamente à direita. Se a partição / boot estiver atualmente à esquerda da partição raiz, primeiro você precisará mover a partição raiz para a esquerda e depois estendê-la, mas isso pode levar um tempo muito, muito longo, por isso pode não valer a pena. problema.

psusi
fonte
6
Mover / inicializar para minha partição principal não é uma solução para mim, pois tudo, menos o / boot, é criptografado. Você não sabia disso pela minha pergunta, desculpe.
user6722
Essa é 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ê repetidamente tiver o problema "sem espaço". Leia primeiro por que às vezes é necessário ter uma partição / boot: ( help.ubuntu.com/community/DiskSpace )
svandragt
@svandragt, basicamente não há mais motivos para precisar de uma partição / boot atualmente. O único que resta é se o seu BIOS está quebrado e não pode ver o disco inteiro, e qualquer máquina fabricada na última década não tem essa limitação. Outros casos legados, como o uso de raid ou LVM, agora são tratados corretamente pelo grub2.
Psusi 11/07/2014
Existem algumas razões para ter uma partição de inicialização separada. Mas não tenho certeza se os benefícios valem a instalação de maior complexidade. 1. O sistema operacional pode se beneficiar de uma inicialização mais rápida via ext2. 2. A segurança pode ser aumentada montando / inicializando como RO. (rootkits etc.) ou até mesmo permanecem desmontados no tempo de execução do SO. 3. O grub (1) tem alguns problemas com o ext4 ainda. 4. Necessário para executar o lvm (grubv1). Embora isso não se aplique à configuração padrão do ubuntu.
David Cahill
lsblkpode ser usado para determinar qual partição é o que
Sr. Roxo
9

Tomando o melhor das respostas acima, minha abordagem testada e verdadeira é a seguinte:

  • uname -a para encontrar o kernel em execução.
  • dpkg -l linux-{headers,image}-\* | grep ^iipara 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. Substitua xx,yy,zzpor uma lista das compilações do kernel que você deseja remover - essas 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 3.16.0para o que estiver instalado no seu sistema.
  • Opcionalmente, faça um adicional sudo apt-get autoremove- isso removerá as dependências restantes dos kernels antigos que não são mais necessárias pelo atual, liberando mais espaço.

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

Se algo falhar ...

  • Se o comando apt falhar devido a um sem espaço no dispositivo de erro, utilize o comando correspondente dpkg vez: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Se o comando dpkg ainda não funcionar, porque os linux-imagepacotes são requeridos pelos linux-headerspacotes da mesma versão (que você também deseja desinstalar), o dpkg pode ter falhado em resolver isso. Examine novamente a saída dpkg -le especifique qualquer sufixo de nome de pacote na linha de comandos. Por exemplo, em um dos meus sistemas, o comando que finalmente funcionou foi sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Se houver outro erro, procure ajuda - você pode ter um problema diferente do que pensava.
user149408
fonte
@ user535733 o caso usual (pelo menos o que eu continuo enfrentando) é que ainda espaço /boot, mas não o suficiente para outro pacote do kernel. Nesses casos, o acima funcionou bem. Sinta-se livre, no entanto, para adicionar o dpkgcomando correspondente . Quanto a purge, não, não é um tipo de 'remoção de força'. Diferentemente do que faz, removeele exclui os arquivos de configuração. Desde / contanto que os pacotes do kernel não instalem arquivos de configuração, removee purgefará o mesmo com os pacotes do kernel.
user149408
Adicionado quarto marcador com o comando dpkg correspondente.
user535733
4

Para mim, ambos apt-get purgee dpkg --removeambos falharam. Então eu tive que excluir algumas imagens antigas do kernel do / boot com rm -f.

orkoden
fonte
4
Esta não é uma boa maneira de remover pacotes. Embora essa resposta não seja muito específica sobre por que a remoção correta da maneira correta falhou, tenho certeza de que se essas informações fossem fornecidas (em uma pergunta separada, é claro), poderíamos tentar descobrir a causa do problema.
precisa saber é o seguinte
2
Eu acredito que falhou, porque a /bootpartição estava cheia. Este comandos tentar primeiro a actualização do kernel para recente e acidente com No space left on devicegerandoinitrd.img
vp_arth
1
AVISO, a remoção direta de arquivos pode levar a problemas, pois uma atualização do pacote linux-firmware pode recriar o arquivo initrd.img para cada versão que ele acha que está instalada com base nas informações do pacote. Veja: askubuntu.com/questions/865577/…
kgrittn 5/17
1
obrigado, esta é a solução final que salva vidas quando nada mais funciona.
precisa saber é o seguinte
4

Listar todos os kernels:

dpkg --list 'linux-image*'

Exibir o kernel atual:

uname -r

Listar todos os kernels, EXCETO o atual:

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

Verifique se o seu kernel atual não está nessa lista.

Remova todos os kernels, EXCETO o atual:

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

Limpar outras coisas:

sudo apt-get autoremove

Se ainda houver erro de espaço em disco de inicialização para instalar / desinstalar arquivos, remova diretamente uma imagem OLD do diretório / boot,

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

NOTA: Revise a imagem atual do kernel novamente antes de excluir qualquer imagem.

Hemant Thorat
fonte
2

Eu já excluí pacotes antigos do kernel (linux-headers ...)

linux-headers-*não são grãos. Os pacotes do kernel são os únicos nomeados linux-image-*. Os que são nomeados linux-headers-*são pacotes de desenvolvimento para compilar módulos do kernel: eles não vivem no diretório / boot e não são necessários para o uso geral do dia a dia do seu sistema.

Os arquivos que você listou em / boot fazer incluem várias imagens de kernel velhos ( vmlinuz*) e imagens initrd compilados ( initrd.img*) para os kernels, o que é uma indicação de que você ainda tem um monte de pacotes do kernel antigos instalados.

Você deve poder listar seus kernels instalados com

aptitude search ~ilinux-image

(Observe que isso provavelmente retornará pacotes que também não são kernels).

Geralmente, não há necessidade de instalar mais de dois kernels - o atualmente em uso e o anterior (como substituto). Então você pode começar a remover os mais antigos, um por um, assim:

sudo apt-get autoremove linux-image-3.2.0-23-generic

Certifique-se de substituir "3.2.0-23-generic" pela versão atual do kernel que você deseja remover! Além disso, não remova pacotes como linux-image-generic. Você precisa ter muito cuidado para não remover o kernel atualmente em execução ou não poderá inicializar (o Ubuntu pode ou não avisá-lo sobre isso).

Você pode encontrar seu kernel atualmente em execução com:

uname -r
thomasrutter
fonte
1

Eu tive esse problema e muito mais porque removi alguns initrd-img-xxxarquivos manualmente do / boot e tive um problema que essas versões antigas continuam gerando e preenchendo a /bootpasta. Para corrigi-lo, segui o seguinte:

  • Eu removi a versão antiga do kernel gerada manualmente para liberar espaço.
  • Você estará editando um arquivo de configuração de texto como superusuário, então cole o seguinte em um terminal:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Localize a linha update_initramfs=yese altere-a para update_initramfs=no. Salve e saia do arquivo e execute:

    sudo dpkg --configure -a
    

Isso resolveu meu problema. Isso foi baseado neste blog

Felizmente, tudo deve ficar bem quando você reinicia, e mais tarde você pode tentar mudar a noparte de trás para yesdentro update-initramfs.conf.

aibrahim
fonte
1

Eu mostro que ainda em 2017 esta pergunta tem novos comentários e respostas, mas falta uma resposta que eu acho que é muito útil aqui:

O Ubuntu como um sistema operacional de desktop de uso diário simples não tem motivos para ser instalado com uma partição \ boot separada e algo assim NÃO oferecerá algo a um "usuário comum" ... Portanto, uma solução é uma nova instalação sem a partição \ boot e isso maneira que você nunca terá esse problema

PS: Minha resposta pode ser excluída ou adicionada na resposta aceita ... (acho que ajudará algumas pessoas dessa maneira)

koleygr
fonte
1

Utilitário super útil que limpará sua partição de inicialização

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

Use por sua conta e risco, mas funcionou para mim:

sudo bootnukem
Jonathan
fonte
Por que o voto negativo?
8777 Jonathan
0

No aptitude ou synaptic, há uma seção "pacote antigo ou instalado manualmente". Deveria haver os pacotes Linux antigos lá.

Martin Ueding
fonte
0

Há um script bash que eu escrevi abaixo, que torna o processo um pouco mais amigável.

YMMV - foi feito para a Casa da Moeda 14. Ainda está aprendendo o BASH, então provavelmente é um pouco desajeitado. Use por sua conta e risco, mas funciona para mim!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script
wibbynut
fonte
0

[Como um noob no AskUbuntu, não posso comentar até a reputação = 50, portanto, não faça o voto negativo por causa disso.]

Meu servidor também estava fazendo isso. Literalmente, nenhuma das respostas esperadas aqui funcionou, pois elas exigem alguma sala de trabalho em / boot para serem concluídas. Se a partição de inicialização estiver cheia, ela terminará abruptamente sem excluir nenhuma das imagens.

A única coisa que funcionou para mim foi revisar a imagem atual e depois manualmente sudo rm filenameos arquivos de imagem mais antigos (cada um tinha -3.16.0-30 em seus nomes). Feito isso, sudo apt-get autoremoveteve o espaço de manobra necessário para fazer seu trabalho. Ele destacou alguns erros associados a essa versão, por exemplo: "depmod: FATAL: não pôde carregar /boot/System.map-3.16.0-30-generic: Não existe esse arquivo ou diretório", mas isso é esperado.

Quando concluído, dfretornou 42% em uso para / boot para indicar que está saudável novamente.

Apenas no caso de
fonte
1
O post que você está procurando askubuntu.com/questions/171209/...
Muru
@ muru Bem, sim ... eu sugeriria que o pôster original também precisasse desse conselho. Quando o / boot estiver cheio, essas versões com script que tentam corrigi-lo também falham, pois, bem, o / boot está cheio.
Justin Case
Bem, existem dois problemas semelhantes: a) onde o sistema avisa que seu disco está ficando cheio, mas apt-gettem espaço suficiente para continuar eb), onde apt-getfalha porque o disco está cheio demais. Esse é o outro post.
muru
0

Eu escrevi esse script bash para limpar seletivamente antigos kernels de uma só vez:

rm kernels tamanho real

Todo o código e instruções do bash estão incluídos no link.

WinEunuuchs2Unix
fonte
0

Salve este script como /usr/local/bin/remove_kernels.sh(lembre-se de dar permissões de execução sudo chmod 755 /usr/local/bin/remove_kernels.sh):

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

Para remover todos os kernels antigos, digite: sudo remove_kernels.sh

Anthony Kelly
fonte
0

/ partição de inicialização pode ser um pouco estranha às vezes

não comece a excluir diretamente os arquivos kernal.

Passos a seguir

  1. Verifique se o kernal atualmente instalado está sendo usado pelo sistema linux

    uname -r

    isso deve fornecer o nome da imagem kernal atualmente instalada no sistema

  2. Agora comece a excluir arquivos extras, exceto um específico instalado no seu sistema

    apt-get remove linux-image-XXXXX

  3. Também remova o arquivo de cabeçalho também

    apt-get remove linux-headers-XXXXX

  4. Também pode haver uma condição em aptque parou de funcionar; nesse caso, alterne para / boot

    cd /boot

  5. Comece a remover os arquivos manualmente, mas com muito cuidado, lembre-se de não excluir os installed one'sarquivos kernal do seu sistema.

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Após remover os arquivos corretos, a limpeza parcial instala, se houver

    apt-get -f install

  7. Remova os arquivos extras que estão lá como arquivos de inicialização limpos manualmente

    apt-get autoremove

  8. Atualizar grub

    update-grub

  9. Por fim, atualize os pacotes do sistema

    apt-get update

user225
fonte
-1

Se você não conseguir remover mais arquivos não utilizados e se tiver outra partição com / ou espaço livre no mesmo dispositivo, poderá redimensionar a partição / boot por parted / gparted . (Também está incluído na mídia de instalação.)

Aviso : O redimensionamento da partição é uma operação perigosa ; salve seus dados importantes em outras mídias antes de fazê-lo!

Rudolf Dovičín
fonte
A maioria das pessoas que sofrem de pequenas partições separadas / de inicialização escolheu 'criptografia de disco inteiro' na instalação, o que requer LVM. Essa solução parece causar mais problemas do que resolve para esses usuários.
user535733