Questão Qual é a maneira mais segura de limpar / iniciar a partição?


Eu tenho 200 MB atribuídos para o /boot partição. Sempre que tento atualizar o kernel, recebo uma mensagem de erro que basicamente diz /boot está cheio.

O que posso fazer para limpar /boot e remover / fazer backup dos kernels mais antigos?


258
2017-09-14 19:41


origem


Veja o Wiki da Comunidade Ubuntu - jarno


Respostas:


Método de linha de comando:

Primeiro verifique sua versão do kernel, assim você não irá apagar a imagem do kernel em uso, rodando:

uname -r

Agora execute este comando para uma lista de kernels instalados:

dpkg --list 'linux-image*' | grep ^ii

e apague os kernels que você não quer / precisa mais rodando isto:

sudo apt-get remove linux-image-VERSION

Substitua VERSION pela versão do kernel que você deseja remover.

Quando você terminar de remover os kernels mais antigos, você pode executar isso para remover os pacotes que você não precisará mais:

sudo apt-get autoremove

E finalmente você pode rodar isto para atualizar a lista do kernel do grub:

sudo update-grub

313
2017-09-14 20:34



a linha de comando funcionou como um encanto, obrigado! - koba101
sudo dpkg --list 'linux-image*' | grep ^ii torna um pouco mais fácil ver apenas os kernels instalados. Também acho que o update-grub é inofensivo, mas não estritamente necessário, que é executado automaticamente quando você desinstala um kernel. - Nelson
Usar sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo "" para obter a lista de nomes de pacotes a serem usados sudo apt-get remove. head -n -3 é usado para manter 3 kernels mais recentes no sistema. - Sithsu
sudo apt-get autoremove deve ser suficiente (geralmente deixando você com os últimos 3 kernels) - mbx
Esta é uma boa resposta, mas duvido que possa funcionar na maioria dos casos (se não em todos): a questão é que /boot está cheio, então apt-get irá falhar com algum código de erro ou outro. A resposta abaixo é um pouco "hackier" (devo confessar que tive que me açoitar para emitir esse rm -rf dentro /boot) mas o único que provavelmente funcionará nessa situação. - Marco


OBSERVAÇÃO: isto é somente se você não puder usar o apt para limpar devido a 100%

Se o apt-get não estiver funcionando porque seu / boot está em 100%, você precisará limpar / inicializar primeiro. Isso provavelmente pegou uma atualização do kernel em uma instalação parcial, o que significa que o apt praticamente congelou completamente e continuará dizendo para você executar apt-get -f install mesmo que esse comando continue falhando.

Obtenha a lista de imagens do kernel e determine o que você pode fazer sem. Este comando mostrará os kernels instalados, exceto o que está executando atualmente sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Observe as duas versões mais recentes na lista. Você não precisa se preocupar com a execução, pois não está listado aqui. Você pode verificar isso com uname -r.

Crie um comando para excluir todos os arquivos em / boot para os kernels que não são importantes para você usando a expansão de chaves para mantê-lo sadio. Lembre-se de excluir as imagens atuais e as duas mais novas do kernel. Exemplo: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Você também pode usar um intervalo com a sintaxe {80..84}.

sudo apt-get -f install para limpar o que está se tornando grumpy sobre uma instalação parcial.

Se você encontrar um erro que inclua uma linha como "Erro interno: não foi possível encontrar a imagem (/boot/vmlinuz-3.2.0-56-generic)", execute o comando sudo apt-get purge linux-image-3.2.0-56-generic (com a sua versão apropriada).

Finalmente, sudo apt-get autoremove para limpar os pacotes de imagem antigos do kernel que foram órfãos pelo boot manual limpo.

Sugestão, corra sudo apt-get update e sudo apt-get upgrade para cuidar de quaisquer upgrades que possam ter sido copiados enquanto aguarda a descoberta da partição full / boot.

Sugestão2, Revisão https://help.ubuntu.com/community/AutomaticSecurityUpdates e considere configurar Unattended-Upgrade :: Remove-Unused-Dependencies como true em /etc/apt/apt.conf.d/50unattended-upgrades. Isso será o equivalente a executar o autoremove após cada atualização de segurança para garantir que você limpa os kernels não usados, mas também removerá outras coisas que considera não serem usadas para evitar esse problema no futuro.


254
2018-03-07 16:54



Desta forma, eu tenho o mais recente para a próxima reinicialização e, em seguida, o anterior, apenas no caso de algo quebrar nessa. Normalmente eu tenho muito espaço, então não faz mal ter alguns e isso satisfaz minha paranóia por não ter opções de backup suficientes em qualquer cenário. - flickerfly
Eu nunca tive um problema causado por atualizações automáticas. Eu posso imaginar cenários onde isso poderia ser um problema principalmente em torno de dependências sendo perdidas em instalações não-deb empacotadas Digamos que você instale o php, decida desinstalá-lo e instale uma versão mais nova do código-fonte. Esta versão tem dependências fornecidas pela instalação anterior, mas o apt não sabe que ainda é necessário. Da próxima vez que você executar a remoção automática, essas dependências desaparecerão. Se automatizado, isso pode ser um pouco confuso. Se você não instalar fora dos repositórios, acredito que seja totalmente seguro. - flickerfly
Depois de ver isso em de várias servidores virtuais vsphere (onde os kernels estavam sendo atualizados automaticamente, mas não removidos posteriormente), eu escrevi um script python para automatizá-lo. Eu adoraria ter mais olhos nele - EvanK
Se você usar dpkg --purge em uma inicialização completa, você receberá o seguinte $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic - flickerfly
Isso é muito útil. trabalhou para mim. - deepdive


Há documentação sobre isso em https://help.ubuntu.com/community/RemoveOldKernels

Em resumo: use

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

o purge-old-kernels ferramenta pode ser instalada via sudo apt install byobu. Aqui está a descrição da sua página de manual:

Este programa irá remover pacotes antigos de kernel e cabeçalho do   sistema, liberando espaço em disco. Nunca removerá o atualmente   executando o kernel. Por padrão, ele manterá pelo menos os últimos 2 kernels,   mas o usuário pode substituir esse valor usando o --keep  parâmetro.

Se você quiser uma solução de copiar e colar, o ReSearchIT Eng sugeriu o seguinte:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

44
2017-08-09 09:12



No meu caso, o apt não está funcionando devido a um kernel pendente e a correção sugerida é um problema: - James Bowery
Eu tive que consertar pacotes quebrados primeiro com askubuntu.com/a/304388/284313 Depois disso, sua solução funcionou. - James Bowery
Eu acho que esta deveria ser a solução aceita a partir de agora. - Fran Marzoa
isso é muito mais seguro que a resposta aceita. eu acho que apt-get autoremove --purge deve ser suficiente, no entanto. - Woodrow Barlow


Eu achei que é muito mais fácil abandonar a pequena partição e mover /boot para a raiz. Isso também evita problemas de falta de espaço no futuro.

Primeiro mova seus dados da partição de inicialização para raiz (executar como sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

Remover (ou comentar) o /boot entrada em /etc/fstab:

vim /etc/fstab

Atualize o grub e verifique se tudo está correto:

update-grub

apt Agora deve ser capaz de atualizar sem problemas.

Isso deixa uma partição não utilizada de 200MB (que você poderia usar para outra coisa se achar que vale a pena).


6
2018-04-14 07:43



Essa é uma boa ideia, mas não funciona se você quiser ter a criptografia de disco completo para sua partição raiz. - Paŭlo Ebermann


Removendo Kernels antigos (para liberar espaço em / boot) Vejo: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

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

Então corra

sudo apt-get update

3
2017-08-14 14:09



este foi o único que funcionou .... ótima solução - John
Melhor resposta! Esta é a única solução que funcionou para mim; autoremove é estúpido; ele tenta reinstalar quaisquer kernels com dependências não atendidas antes de removê-los oficialmente. Eu estava indo em círculos ficando sem espaço uma e outra vez. Essa resposta é ouro. - Lonnie Best


sudo apt-get autoremove

Isso remove todos os últimos dois kernels. Testado no Ubuntu 16.04 LTS quando /boot estava a 100% de capacidade e apt-get upgrade falhou é a última atualização do kernel. O autoremove do kernel é iterativo, então se você tiver vários kernels, eles serão removidos um de cada vez. Então seja paciente.


2
2017-10-03 16:39





Por que fazer isso manualmente quando você pode fazer isso com uma ferramenta? Você sabe que vai precisar dele novamente em 30 segundos, porque são necessários 30 segundos para que eles façam uma atualização kernal nos dias de hoje = P

Eu recomendo usar essa ferramenta, bootnukem

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

Então

sudo bootnukem --dry-run

Remover --dry-run depois de confirmar que parece seguro


0
2018-05-04 17:28