如何删除已安装的快照的旧版本


65

我是使用快照的新手,我的系统上安装了几个应用程序,当我运行命令df -h发现安装了相同快照的不同版本时,我会注意到这些

/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

我的问题是为什么他们要保留在这里,我发现删除旧版本的唯一方法是删除并重新安装按扣,是否有prune维护我系统的方法?


Answers:


84

这是一个简短的脚本,它将删除所有旧版本的快照。这只会保留当前的活动版本,这将为您恢复一些磁盘空间:

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

它成功删除了所有旧版本,但是没有空间添加到我的磁盘中!
mtoloo '18

/var/lib/snapd/snaps/在运行此脚本之前和之后检查dir 。应该释放一些空间-如果确实删除了一些快照。它应该显示类似的消息snap-name removed,如gtk-common-themes removed
PeterM

其中包含一些硬链接,/var/lib/snapd/cache因此您也必须删除这些硬链接以释放空间。您可以使用sudo rm /var/lib/snapd/cache/*
rubo77

42

从快照2.34及更高版本开始,您可以通过设置refresh.retain选项来设置系统存储的快照修订版本的最大数量。

$ sudo snap set system refresh.retain=2 

所述refresh.retain值只能是在2和20之间的数,并且具有为3的默认值。


1
之后,将默认值从3更改为新设置2,何时清除当前版本?
蒂姆·理查森

我认为安装新版本时将清除旧的快照。您可能已经知道,根据refresh.timer选项自动捕捉更新安装的应用程序,因此您不必手动进行更新
Mustapha Hadid

但是,如何检查我的计算机需要多少呢?示例:refresh.retain=3适用于4Gb RAM还是需要更多?
Peter Krauss

1
@PeterKrauss这取决于您的存储设备容量。它与您的RAM容量无关。
Mustapha Hadid

30

来自另一个答案脚本版本,为单行代码,没有awk依赖性:

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

这可能需要bash或与[[构造兼容的外壳。


6
这应该从可以添加快照的用户运行。在Ubuntu Core上,管理员用户可以工作,而在普通Ubuntu上,sudo -isnap remove可能需要一个会话,或者可能需要使用运行该会话sudo
Gert van den Berg

@ rubo77指出它确实采用英语语言环境。export LC_ALL=en_US.UTF-8事先做完后,在子shell中运行它(以免与主shell的语言环境env变量混淆)。(它也可以在snap命令之前设置,但是我不确定以后是否也需要翻译删除内容)
Gert van den Berg

只要LANG=c 在整条线在德国游戏机上运行正常之前添加一下
rubo77

@ rubo77 对于默认语言环境,它可能应该实际上是LANG=C(或LC_ALL=C)。c由于C是无效语言环境的默认设置,因此小写字母可能会起作用。(LC_MESSAGES这可能是最小设置)(我不想编辑许多用户不需要的设置...)(您比较LANG=c localewith 的错误LANG=C locale
Gert van den Berg

17

有关版本快照文档指出,应自动删除过时的修订,以便仅安装最近的两个修订。但是,我还看到安装了两个以上版本的快照。

您可以列出所有修订,snap list --all以查看类似以下内容的内容:

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    -

您可以使用删除单个修订snap remove spotify --revision=5

即使对于禁用的修订版core和其他依赖项,这也是安全的,并且snap remove显式--revision=...甚至可以防止您删除非disabled快照。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.