![Cómo eliminar la versión anterior de las instantáneas instaladas](https://rvso.com/image/1557624/C%C3%B3mo%20eliminar%20la%20versi%C3%B3n%20anterior%20de%20las%20instant%C3%A1neas%20instaladas.png)
Soy nuevo en el uso de complementos, tengo pocas aplicaciones instaladas en mi sistema, algo que noto cuando ejecuto el comando df -h
encontré 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 prune
para 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 awk
dependencia:
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 bash
un 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.retain
opció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