M HYPE SPLASH
// news

How to remove old version of installed snaps

By Michael Henderson

I'm newbiew with snap usage, I have few apps installed on my system, something that I notice when run the command df -h I found mounted different versions of the same snap

/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

my question is why they keep there, the only way I found to remove the old is remove and install again the snap, there's something like prune to maintain my system?

1

5 Answers

Here's a short script which will remove all old versions of snaps. This will only keep the current active version, which should recover you some disk space:

#!/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
6

Starting from snap v2.34 and later, you can set the maximum number of snap revisions stored for each package by setting the refresh.retain option—it can only be a number between 2 and 20 and has a default value of 3.

sudo snap set system refresh.retain=2 
4

A version of the script from another answer, as a one-liner, without the awk dependency:

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

This likely requires bash or a compatible shell with the [[ construct.

8

The snapd docs on versions state that the outdated revisions should be automatically removed so that no more than the last two revisions are installed. However, I also saw more than two versions of my snaps installed.

You can list all the revisions with snap list --all to see something like:

Name Version Rev Tracking Developer Notes
core 16-2.31.2 4206 stable canonical core,disabled
core 16-2.32.3 4407 stable canonical core,disabled
core 16-2.32.5 4486 stable canonical core
spotify 1.0.70.399.g5ffabd56-26 5 stable spotify disabled
spotify 1.0.72.117.g6bd7cc73-35 6 stable spotify disabled
spotify 1.0.77.338.g758ebd78-41 13 stable spotify -

You can remove individual revisions with snap remove spotify --revision=5.

This is safe even for the disabled revisions of core and other dependencies, and snap remove with an explicit --revision=... even prevents you from removing non-disabled snaps.

1

The code @popey shared in their answer actually fails sometimes as some broken packages don't have the version info. So I modified the code to overcome this.

#!/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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy