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?


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:

# Removes old revisions of snaps
set -eu

LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
| improve this answer | |
  • It successfully removed all old versions, but no space is added to my disk! – mtoloo Jul 25 '18 at 15:15
  • Check dir /var/lib/snapd/snaps/ before and after running this script. Should have free up some space - if really removed some snaps. It should show messages like snap-name removed, eg gtk-common-themes removed. – PeterM Sep 24 '18 at 18:30
  • 1
    There are some hardlinks in /var/lib/snapd/cache so you must delete those too to free up space. You can safely remove the cache with sudo rm /var/lib/snapd/cache/* – rubo77 Jun 4 '19 at 2:00
  • why the "CLOSE ALL SNAPS BEFORE RUNNING THIS"? – rubo77 Jan 13 at 19:29

Starting from snap 2.34 and later, you can set the maximum number of a snap’s revisions stored by the system by setting the refresh.retain option. The refresh.retain value can only be a number between 2 and 20 and has a default value of 3.

$ sudo snap set system refresh.retain=2 
| improve this answer | |
  • 1
    after doing this, moving from the default 3 to a new setting of 2, when are the current versions purged? – Tim Richardson Nov 14 '18 at 23:36
  • I think the old snaps will be purged when new version installed. As you may already know, snap updates installed apps automatically depending on refresh.timer option, so you don't have to do the update manually – Mustapha Hadid Nov 15 '18 at 6:12
  • But how to check how many my computer need? Example: refresh.retain=3 is good for 4Gb RAM or need more? – Peter Krauss Aug 9 '19 at 20:46
  • 2
    @PeterKrauss It depends on your storage device capacity. It has nothing to do with your RAM capacity whatsoever. – Mustapha Hadid Aug 10 '19 at 11:56

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.

| improve this answer | |
  • 6
    This should be run from a user that can add snaps. On Ubuntu Core, the admin user works, on normal Ubuntu, a sudo -i session might be needed, or the snap remove might need to be run with sudo. – Gert van den Berg Feb 4 '19 at 17:06
  • @rubo77 pointed out that it does assume an English locale. Running it in a sub-shell (to not mess with the main shell's locale env variables) after doing export LC_ALL=en_US.UTF-8 beforehand should assure that. (It can also be set before the snap command, but I'm not sure if the removes later on might need to be translated as well) – Gert van den Berg Jun 4 '19 at 7:03
  • Just add LANG=c before the whole line works fine on German consoles – rubo77 Jun 4 '19 at 11:26
  • @rubo77 It should likely actually be LANG=C (or LC_ALL=C) for the default locale. Lowercase c might work due to C being the default for an invalid locale. (LC_MESSAGES is likely the minimal setting) (I don't want to edit the post for a setting that many users don't need though...) (You compare the errors of LANG=c locale with LANG=C locale) – Gert van den Berg Jun 4 '19 at 12:07
  • 1
    @anon58192932 The # prompt indicates that that the commands should be run from a root shell. (It is a common convention and also what \$ in the prompt variables will give) Also see the first comment. – Gert van den Berg Jul 6 at 7:26

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  5     stable    spotify    disabled
spotify  6     stable    spotify    disabled
spotify  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.

| improve this answer | |

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.