Como faço para remover versões antigas do kernel para limpar o menu de inicialização?

Toda vez que instalo um novo kernel Linux, ele é deixado no grub_config, tornando o menu de inicialização mais longo a cada vez.

Eu sei que posso pesquisar manualmente os pacotes instalados e removê-los.

O Ubuntu fornece alguma maneira mais fácil de limpá-los ou impedir que sejam exibidos na lista de inicialização?

16.04 e versões mais recentes do Ubuntu

sudo apt autoremove

Este comando remove pacotes que foram instalados automaticamente para resolver uma dependência, mas agora não dependem mais. Isso inclui versões antigas de linux-headers-* e linux-image-*. (Também é inteligente sobre esse processo, deixando uma versão sobressalente do kernel como um substituto!)

11.10 e versões mais recentes do Ubuntu

GRUB2 e sua exibição de todos os grãos

As versões mais recentes do Grub2 instalado em Ubuntu exiba automaticamente o kernel mais recente e oculta os kernels mais antigos que você pode ter instalado.

GNU GRUB

Se você não vê o seu arrancar - então lembre-se de pressionar Shift enquanto inicializa.

Como você pode ver, apenas o kernel mais recente é exibido.

Se você selecionar a opção mostrada (pressione Enter) então todos os kernels antigos ficam visíveis e disponíveis para inicializar.

GNU GRUB Previous versions

Como excluir permanentemente kernels mais antigos

Primeiro inicialize com o kernel Disponível mais recente.

Existem várias maneiras de excluir kernels antigos. Pessoalmente, eu não tocaria Zelador Do Computador uma vez que este é reconhecido para quebrar o seu computador com suas sugestões.

sináptico

Uma alternativa é Sináptico (sudo apt install synaptic)

procurar linux-imagem, clique com o botão direito em um kernel e escolha remoção completa e, finalmente, clique no Aplicar botão para excluir o kernel.

Repita a pesquisa, mas desta vez para Linux-cabeçalho - você pode excluir os cabeçalhos associados para a imagem do kernel escolhida anteriormente.

Sináptico embora não vai tentar verificar o que você está tentando remover... você pode excluir inadvertidamente seu kernel mais novo - ou até mesmo excluir todos os seus kernels por meio desta ferramenta, deixando você com um não inicializável Ubuntu!.

Lembre-se de verificar qual kernel você está usando type:

uname -r

O resultado seria semelhante a:

Terminal <uname -r>

Lembre - se do resultado e do número-certifique-se de não excluir a imagem ou cabeçalho correspondente.

Recomendacao

Minha recomendação é manter pelo menos dois ou, de preferência, três kernels, incluindo o mais recente. O motivo da recomendação é que você terá pelo menos um / dois outros kernels para inicializar, se por que motivo o kernel mais recente com o qual você não consegue inicializar ou introduzir um recurso regredido, como o broken wireless.

Primeiro, reinicie o sistema para ter certeza de que está usando o kernel mais recente. Em seguida, abra o terminal e verifique seu kernel atual:

uname -r 

NÃO REMOVA ESTE KERNEL!

Em seguida, digite o comando abaixo para visualizar / listar todos os kernels instalados em seu sistema.

dpkg --list 'linux-image-*'

Encontre todos os kernels que são inferiores ao seu kernel atual. Quando você souber qual kernel remover, continue abaixo para removê-lo. Execute os comandos abaixo para remover o kernel selecionado.

sudo apt-get purge linux-image-x.x.x-x-generic 

Por fim, execute os comandos abaixo para atualizar o grub2

sudo update-grub2 

Reinicie seu sistema.

Meu one-liner para remover kernels antigos (isso também libera espaço em disco)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

Explicação (lembre-se, | usa a saída do comando anterior como entrada para o próximo)

  • dpkg --list lista todos os pacotes instalados
  • grep linux-image procura as imagens instaladas do linux
  • awk '{ print $2 }' apenas emite a 2ª coluna (que é o nome do pacote)
  • sort -V coloca os itens em ordem por número de versão
  • sed -n '/'`uname -r`'/q;p' imprime as linhas antes do kernel atual
  • xargs sudo apt-get -y purge purga os grãos encontrados

Desenrolando o sed invocacao:

  • -n dizer sed para ficar quieto
  • `uname -r` gera a versão atual do kernel instalada-nós a incluímos em backticks para que a saída seja incluída como parte do comando (você também pode ver isso como $(uname -r)
  • /something/q diz parar quando você corresponde a 'algo' (neste caso, algo é produzido de uname -r)- o / cerque uma expressão regular
  • p é impressão
  • o ; é o separador de comando, então /something/q;p diz sair quando você combinar algo, outra impressão

completamente, sed -n '/'`uname -r`'/q;p' é imprimir as linhas até que corresponda ao nome do kernel atual.

Se você é paranóico( como eu), você pode fazer a última parte xargs echo sudo apt-get -y purge para que o comando para limpar os kernels antigos seja impresso, você pode verificar se nada inesperado está incluído antes de executá-lo.


Versão modificada para remover cabeçalhos:

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purgedpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

Nota: o sed a invocação é modificada. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" extrai apenas a versão (por exemplo, "3.2.0-44"), sem "- genérico " ou similar de uname -r


Versão tudo-em-um para remover imagens e cabeçalhos (combina as duas versões acima):

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

Ubuntu 16.04+:

$ sudo apt autoremove...The following packages will be REMOVED:  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu 15.10 e abaixo:

Acho que esta é a maneira mais fácil e rápida. Ele mantém o kernel mais recente, bem como mais dois:

sudo apt-get install bikeshedsudo purge-old-kernels

Para alterar o número de kernels adicionais que são mantidos:

sudo purge-old-kernels --keep 3

A remoção de entradas do Grub 2Entries deve ser removida editando ou removendo arquivos no/etc / grub.pasta D. O / boot / grub / grub.o arquivo cfg é somente leitura e normalmente não deve exigir edição.

Muitos Grãos?

  • Se você não tiver certeza do kernel que está usando no momento, em um tipo de terminal uname -r.

  • Kernels removidos via APT (Synaptic, & quot;apt-get remove & quot;, etc.) irá atualizar automaticamente grub.cfg e nenhuma ação do Usuário é necessária.

  • Uma ótima ferramenta para remover kernels (e entradas de menu) é o Ubuntu-Tweak, um aplicativo GUI seguro e fácil de usar.

  • Instalar o ubuntu tweak

  • Ubuntu-Tweak estará disponível em Aplicações & gt; Ferramentas do sistema.

Remover Entradas Do Kernel Mais Antigas

  • Selecione & quot;Package Cleaner & quot; à esquerda e & quot;clean Kernel & quot; no painel direito.

  • Pressione o botão & quot; desbloquear & quot; no canto inferior direito, digite sua senha.

  • Selecione na lista exibida as imagens e cabeçalhos do kernel que deseja remover. O kernel em uso não está listado.

  • Pressione o botão" Cleanup & quot; no canto inferior direito para remover as imagens e cabeçalhos do kernel selecionados.

Remova os sistemas operacionais do menu Grub

  • Outros sistemas operacionais que foram removidos do computador também serão removidos do menu assim que o & quot; update-grub & quot; for executado como root.

  • Os itens de Menu são colocados no menu Grub2 por scripts. Se você não quiser que outros sistemas operacionais sejam inseridos no menu, desative /etc/grub.d / 30_osprober

  • Execute este comando para impedir que o script seja executado
    sudo chmod -x /etc/grub.d/30_os-prober

  • DISABLE_30_OS-proper= 'true' em / etc / default / grub

Remover Memtest86 + do menu Grub
sudo chmod -x /etc/grub.d/20_memtest86+

  • Execute o comando update-grub para permitir que as alterações sejam incorporadas ao grub.cfg

Fonte

Notar:Depois que o kernel atualiza, uma nova entrada é adicionada ao menu GRUB.Você pode remover o mais antigo, se quiser.No entanto, a maioria dos usuários experientes aconselhará você a manter pelo menos uma entrada sobressalente, caso algo dê errado com uma atualização e você precise inicializar uma versão mais antiga do kernel para fins de solução de problemas.

Maneira alternativa de remover entradas do Kernel (antes de 10.04)

para GRUB não GRUB2

startupmanager

Você pode encontrá-lo em Sistema>>Administração & gt; & gt;



Você vê na segunda captura de tela que você pode selecionar quantos kernels para mostrar? Eu geralmente apenas o mantenho em 1, mas quando recebo uma atualização do kernel, sempre o altero para 2 antes de reiniciar, para que possa selecionar o kernel mais antigo se o novo kernel tiver problemas com meu hardware. Uma vez que eu sei que o novo kernel está funcionando bem eu mudá-lo de volta para 1.

Puramente linha de comando, isso removerá tudo, exceto o atual e o segundo mais atual (por meio do "-2" no comando principal abaixo):

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |    awk '{print "linux-image-" $0 " linux-headers-" $0}' )if [ -n "$OLD" ]; then    apt-get -qy remove --purge $OLDfiapt-get -qy autoremove --purge

Actualizacao: purge-old-kernels e descontinuar hoje.

Eu fiz um script para purgar kernels mesmo em condições complicadas. É chamado linux-purge e você pode encontrá-lo aqui.

Se você quiser apenas limpar os kernels (e os pacotes relacionados) que são mais antigos do que o kernel usado atualmente, quando o sistema não está quebrado, você pode usar este script.

Há também uma página de documentação do Ubuntu para a qual contribuí sobre a remoção de kernels antigos aqui.

Você pode seguir o Usando a seção do pacote "atualizações desacompanhadas" de Atualizações Automáticas De Segurança artigo no Ubuntu Wiki para executar isso.

Você precisa alterar a seguinte linha em /etc / apt / apt.conf.d / 50unattended-atualizações arquivo;

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

com

Unattended-Upgrade::Remove-Unused-Dependencies "true";

para remover automaticamente pacotes antigos, incluindo kernels.

Também remova ou comente a linha

"^linux-image.*"; 

na seção "NeverAutoRemove" do arquivo /etc / apt / apt.conf.d / 01autoremove.

A maneira mais rápida/simples (aplicável pelo menos desde 12.04) possível que já vem com o Ubuntu é apt-get. Faça o seguinte se desejar remover todas as versões mais antigas do kernel que não estão em uso (exceto a anterior que você não está usando. Isso é para garantir que, se a versão atual do kernel falhar de alguma forma, você tenha uma maneira de voltar a um estado anterior). Proceder:

sudo apt-get autoclean

Isso eliminará todos os arquivos antigos (incluindo versões do kernel) que você possa ter. Observe que, se você tiver muitas versões antigas, levará um tempo, pois deve garantir que a remoção da versão do kernel não tenha problemas. Para mim, remover as últimas 12 versões do kernel levou cerca de 2 minutos. Você também pode fazer o seguinte:

sudo apt-get clean

O que eliminará tudo o que foi baixado e armazenado na pasta de cache do apt. Por último você tem:

sudo apt-get autoremove

o que verificaria se há pacotes não utilizados e os removeria, se necessário. Isso é ótimo para as bibliotecas e pacotes de dependência que não são mais necessários por nenhum aplicativo instalado.

Para descobrir quais kernels e cabeçalhos estão instalados, use

dpkg -l | grep linux-imagedpkg -l | grep linux-headers

Você pode então removê-los um por um ou juntos, apenas certifique-se de manter o mais recente.

Existem também alguns comandos e scripts úteis para automatizar a remoção.

http://ubuntuforums.org/showthread.php?t=1658648

As reivindicações a seguir para remover todos os kernels e cabeçalhos não utilizados:

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

(usar apt-get -y para remover sem dúvida)

Aqui está o que acontece quando executado em 18.04.1:

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purgeReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages will be REMOVED:  linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*  linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.After this operation, 671 MB disk space will be freed.(Reading database ... 227403 files and directories currently installed.)Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-image-4.15.0-33-generic (4.15.0-33.36) .../etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericFound linux image: /boot/vmlinuz-4.15.0-34-genericFound initrd image: /boot/initrd.img-4.15.0-34-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-genericI: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic/etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...(Reading database ... 156180 files and directories currently installed.)Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removedPurging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...~$ uname -r4.15.0-36-generic

`sudo apt-get autoremove ’ deve fazer o truque no Ubuntu 14.04+

Existe um comando ubuntu chamado purge-old-kernels para fazer o trabalho. Veja minha [resposta] (grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu) para mais informações.

Continuo voltando a esta página… o comentário de @ hobs só funciona se seus kernels foram instalados automaticamente-no entanto, você faz ‘sudo apt-get autoremove --purge’ * * a resposta * * seguindo o conselho ‘apt-mark’ em https://help.ubuntu.com/community/RemoveOldKernels

O acúmulo de kernels antigos é um bug, com correção em andamento: https://bugs.launchpad.net/bugs/1357093 . Quando a correção é liberada, kernels mais antigos serão autoremove por padrão.

@ hobs o comando não faz o truque para mim no Ubuntu Studio 14.04, se os kernels não foram instalados automaticamente, mas pelo Atualizador de Software.

Além de remover os kernels antigos, descomente esta linha em '/ etc / default / grub 'se você quiser se livrar dos itens ‘recovery’ no menu: # GRUB_DISABLE_LINUX_RECOVERY=“true”

Em versões recentes, o Ubuntu oculta kernels no submenu do Grub, portanto, não é tão intrusivo. No entanto, pode ser uma boa ideia remover kernels extras para economizar espaço, especialmente se você tiver uma partição pequena /boot separada.

Não consigo encontrar nenhuma resposta que ajude a remover kernels da versão anterior após atualizar o Ubuntu para uma versão mais recente ,mesmo que uma pergunta específica sobre isso tenha sido marcada como uma duplicata disso [aqui] (grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu). Veja também relacionado [relatório de bug](https://bugs.launchpad.net/ubuntu / + fonte / bikeshed/ + bug / 1586303)

Eu fiz um script que faz o trabalho. Vou publicá-lo depois que meu objetivo de recompensa for alcançado: Bountysource