Removendo pacotes snap antigos

Talvez você não saiba, ou não se recorde, mas seu sistema Ubuntu trabalha com diversos pacotes Snap e as vezes ele pode manter diversas versões antigas armazenadas e ocupando espaço no seu precioso e limitado SSD sendo necessário uma intervenção manual.

Há algum tempo que tenho notado o consumo de espaço em minha máquina crescendo sem uma aparente explicação, então, de uma noite para a manhã seguinte, meu sistema chegou a 100% de ocupação.

Achando o problema

Com uma varredura em todo o sistema usando o comando Ncdu*, eu observei que a pasta /var/lib/snapd estava maior do que deveria.

Esta é a pasta onde ficam os pacotes snap do seu sistema, e a solução seria limpa-la, o que não pode ser feito com um simples “rm -rf” pois isso poderá destruir todo o seu sistema.

*O comando ncdu não está instalado por padrão, mas pode ser instalado com:

sudo apt install ncdu

E para executá-lo, de forma a varrer apenas os volumes da Raiz do sistema, usamos desta forma:

sudo ncdu -x /

A chave “-x”, assegura que nenhum outro volume ou partição montada serão varridas, o que é bom se você tiver vários discos montados, cada uma para um propósito diferente, como “/home”, “/usr” etc.

Listando os pacotes Snap e determinando seu consumo de espaço

Sabendo qual era pasta, é mais fácil de pensar uma solução. No caso da pasta de pacotes Snaps, a primeira coisa a fazer é descobrir quais pacotes estão instalados e se possível remover alguns que não sejam mais necessários. O que pode ser feito com o comando “snap list”.

Mas para ficar mais detalhado, existe uma chave especial “–all” que mostra não só os pacotes em uso, mas todos os instalados.

snap list --all

A listagem mostrava então que haviam 2 ou 3 versões antigas de programas instalados via “snap install”.

fig 1: Listagem de todos os pacotes snap instalados, incluindo os desativados

Note na listagem que há pacotes repetidos com versões diferentes e ainda, algumas estão marcadas como “disabled”.

Claro que os desenvolvedores do sistema Snappak possuem milhões de argumentos e justificativas boas para manter estas versões antigas, mas a verdade é que em geral elas só estão ali para consumir espaço no seu sistema.

Caso não tenha instalado o ncdu e ainda assim queira saber o quanto de espaço tudo isso ocupa, pode-se usar o comando “du” (Disk Usage) como segue:

sudo du -sh /var/lib/snapd

Limitando o número de versões

Antes de liberarmos espaço, a primeira coisa a fazer é definir um limite de versões que a suite snap manterá no sistema. O que pode ser feito com o comando:

sudo snap set system refresh.retain=2

Mas não se empolgue muito. O valor é limitado entre 2 e 20, como se vê abaixo.

fig 2: Alterando a quantidade de versões de pacotes Snap mantidas pelo sistema

Removendo pacotes de versões especificas

Agora que nosso sistema já possui uma limitação razoável para evitar exageros futuros, é hora de remover os pacotes desnecessários.

Usando o comando snap remove podemos informar o nome do pacote a a revisão indesejada, como no exemplo abaixo:

snap remove antares --revision 639

Observe que eu informei o número da revisão (terceira coluna da listagem na “fig 1”), não o número da versão (segunda coluna). 

Caso hajam muitos pacotes a serem removidos , certamente você não vai querer passar o dia repetindo este comando, então podemos facilitar as coisas passando uma lista que será trabalhada com AWK, Grep ou outras ferramentas de linha de comando e então encaminhadas para o comando “snap remove”.

Eu optei por remover todos os pacotes  com status “disabled” o que poupou-me de fazer uma lista manual, e o resultado é a linha de comando abaixo:

LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $3}' | while read NOME REVISAO; do sudo snap remove "$NOME" --revision="$REVISAO" ; done

Como ele só remove os pacotes marcado como “disabled” seu uso é seguro e não removerá pacotes que você realmente está usando.

Enquanto o script estiver rodando, você verá uma mensagem para cada pacote que acaba de ser removido do seu sistema.

Depois de vários testes para chegar a esta linha, eu acabei encontrando um script já pronto indicado na página https://www.linuxuprising.com/2019/04/how-to-remove-old-snap-versions-to-free.html que é muito parecido e com pouquíssimas mudanças., então fica ai o link com os créditos caso alguém queira mais informações.

Após isso, se você executar o comando ncdu, ou mesmo o comando du, na pasta de snaps, você verá que seu sistema liberou uma boa quantidade de espaço e no meu caso, meu sistema voltou a funcionar normalmente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.