Cómo eliminar la versión anterior de las instantáneas instaladas

Cómo eliminar la versión anterior de las instantáneas instaladas

Soy nuevo en el uso de complementos, tengo pocas aplicaciones instaladas en mi sistema, algo que noto cuando ejecuto el comando df -hencontré montadas diferentes versiones del mismo complemento:

/dev/loop0       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/7
/dev/loop1        82M    82M     0 100% /var/lib/snapd/snap/core/4110
/dev/loop7       198M   198M     0 100% /var/lib/snapd/snap/polarr/3
/dev/loop2        82M    82M     0 100% /var/lib/snapd/snap/core/4206
/dev/loop3       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/6
/dev/loop10      137M   137M     0 100% /var/lib/snapd/snap/gravit-designer/5

Mi pregunta es por qué siguen ahí, la única forma que encontré para quitar el viejo es quitar e instalar nuevamente el complemento.

¿Existe algo así como prunepara mantener mi sistema?

Respuesta1

Aquí hay un breve script que eliminarátodoVersiones antiguas de instantáneas. Esto solo mantendrá la versión activa actual, lo que debería recuperar algo de espacio en el disco:

#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
    done

Las "Cerrar instantáneas" están ahí porque es posible que no hayas reiniciado una aplicación antes de actualizarla. Por lo tanto, es posible que en realidad esté ejecutando una revisión que el script debe eliminar.

Respuesta2

Una versión delguión de otra respuesta, como una sola línea, sin la awkdependencia:

snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then snap remove "$snapname" --revision="$rev"; fi; done

Es probable que esto requiera bashun shell compatible con la [[construcción.

Respuesta3

A partir de snap v2.34 y posteriores, puede establecer el número máximo de revisiones instantáneas almacenadas para cada paquete configurando la refresh.retainopción: solo puede ser un númeroentre 2 y 20y tiene unvalor predeterminado de 3.

sudo snap set system refresh.retain=2 

Respuesta4

El código@popey compartió su respuestaEn realidad, a veces falla porque algunos paquetes rotos no tienen la información de la versión. Entonces modifiqué el código para superar esto.

#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

snapsToRemove=$(LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $2, $3}')

while read snapname version revision; do
    if [[ "$revision" == *[a-zA-z]* ]]; then
        # Version field is empty. Revision is in second field
        revision=$version
    fi
        snap remove "$snapname" --revision="$revision"
done <<< $snapsToRemove

información relacionada