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

667

Toda vez que eu instalo um novo kernel Linux, ele fica 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 oferece alguma maneira mais fácil de limpá-los ou impedi-los de aparecer na lista de inicialização?

    
por Hans 22.01.2016 / 16:20

37 respostas

0

Se você estiver usando ansible para controlar as máquinas, este playbook pode ser útil.

---
 - hosts: all
   become: yes
   tasks:
    - name: "Run apt-get autoremove"
      apt: 
        name: linux-image-generic
        autoremove: yes
        state: present 
        update_cache: yes
        cache_valid_time: 3600
    
por flickerfly 10.11.2016 / 20:03
0

Em vez disso, use apt , a interface do cli para humanos, do que apt-get para limpar imagens antigas do kernel:

$ sudo apt autoremove --purge
...
The following packages will be REMOVED:
  linux-headers-4.4.0-51* linux-headers-4.4.0-51-generic* linux-image-4.4.0-51-generic* linux-image-extra-4.4.0-51-generic*
    
por k0pernikus 07.12.2016 / 17:26
0

Eu uso unattended-upgrades , então gostei muito da resposta do Qwerty que a configura para desinstalar pacotes antigos do kernel automaticamente.

No entanto, houve um problema: depois que um novo kernel é instalado, esse processo desinstala o pacote para o kernel em execução no momento!

Isso não quebra completamente o sistema operacional. Na verdade, eu raramente percebi que isso havia acontecido, até que precisei carregar um módulo a quente (por exemplo, conectando um dispositivo USB) e, em seguida, o módulo não pôde ser encontrado.

Como uma solução para isso, criei um script para gerar um pacote virtual currently-installed-kernel que efetivamente fixa o pacote atual do kernel até a próxima inicialização.

O script é chamado pin-current-kernel-with-package.sh . Aqui está a última versão ( provavelmente) e a primeira versão (definitivamente).

Salve esse script em algum lugar e adicione-o ao seu processo de inicialização . Por exemplo, salve-o em /root/bit/pin-current-kernel-with-package.sh e edite /etc/rc.local e adicione a seguinte linha:

bash /root/bin/pin-current-kernel-with-package.sh

Agora o seu pacote de kernel em execução nunca será desinstalado!

    
por joeytwiddle 21.05.2017 / 08:03
0

Eu dou duas variações mais seguras dos métodos em outras respostas: uma usando synaptic manager e a outra usando terminal .

Com essas variações, você remove apenas os pacotes que o sistema identifica como removíveis. Não há risco de você remover os kernels linux que são usados atualmente - como aconteceu comigo há algumas semanas atrás - (

Usando o Synaptic Manager

Em vez de pesquisar linux-image sobre todos os pacotes instalados, selecione os pacotes autoremovable (Veja a elipse vermelha na imagem abaixo). Agora, dessa lista, remova a linux-image que você deseja.

Usando o terminal

Da mesma forma, se você estiver removendo kernels no terminal, mostre apenas os kernels autoremovable executando

 sudo apt-get -s autoremove | grep linux-image

Em seguida, remova o kernel linux-image-x.x.x-x-generic que você deseja remover da lista fornecida executando

 sudo apt-get purge linux-image-x.x.x-x-generic 
    
por loved.by.Jesus 04.06.2017 / 22:08
0

Para remover os kernels que foram instalados automaticamente por meio de atualizações regulares do sistema, abra o terminal e execute:

sudo apt autoremove --purge

Para saber o seu release atual do kernel, execute uname -r e também u pode executar uname --help para ler mais sobre todos os comandos uname

Você também pode executar df -h para mostrar os drivers do sistema de arquivos, da mesma forma que você pode executar df --help para mais.

Para ativar a remoção automática de kernels antigos: Edite o arquivo de configuração usando o gksu

gksudo gedit /etc/apt/apt.conf.d/50unattended-upgrades

Quando o arquivo for aberto, remova o comentário da linha a seguir e altere o valor para true :

// Unattended-Upgrade :: Remover-Não-Utilizadas-Dependências " false ";

Se você precisar instalar o gksu , poderá executar sudo apt install gksu

Para limpar pacotes antigos, podemos usar sudo apt-get clean

Para mais, visite o link

    
por Abdallah Okasha 03.07.2017 / 09:07
0

Na próxima vez, ao remover os kernels antigos, abra um Terminal e use este comando:

sudo apt-get autoremove linux-headers-2.6.38-10-generic

Você pode usar o Synaptic para obter o nome exato do kernel que você pretende excluir. Apenas abra o Synaptic e procure por "linux-headers" e então selecione qual entrada do kernel você deseja remover. A entrada relevante será marcada com "-genérica" no final.

Para limpar todas as dependências não usadas (esquerda) em todo o sistema, use este comando por si só:

sudo apt-get autoremove
    
por Chad--24216 05.07.2017 / 01:27
-3

Aqui está o script que eu uso para manter 2 pacotes do kernel instalados (isto é, o atual e o anterior). Também remove os arquivos initrd-VERSION-generic.old-dkms deixados pelo DKMS, que podem ocupar uma pequena partição de inicialização.

O script:

echo "**Removing -generic.old-dkms files from /boot**" && rm -f /boot/*-generic.old-dkms # if using DKMS it creates initrd-VERSION-generic.old-dkms in /boot and doesn't clean them up, meaning after a few kernel upgrades /boot can become full
OLDKERNEL=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- | awk '{print "linux-image-" $0}')
OLDHEADERS=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- | sed 's/-generic//g' | awk '{print "linux-headers-" $0}')
OLDHEADERS=${OLDHEADERS//-pae/} # remove -pae string as linux-header packages don't have it in their names
if [ -n "$OLDKERNEL" -o -n "$OLDHEADERS" ]; then
apt-get -q remove --purge $OLDKERNEL $OLDHEADERS
echo "**Finished removing old kernels**"
else
echo "**No old kernels found**"
fi
    
por happyskeptic 17.06.2013 / 20:26