如何刪除已安裝的舊版本快照

如何刪除已安裝的舊版本快照

我是快照使用的新手,我的系統上安裝了很少的應用程序,當運行命令時我注意到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維護我的系統的東西嗎?

答案1

這是一個簡短的腳本,它將刪除全部舊版的快照。這只會保留當前的活動版本,這應該會為您回收一些磁碟空間:

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

之所以出現“關閉快照”,是因為您在更新之前可能沒有重新啟動應用程式。因此,您可能實際上正在執行一個要被腳本刪除的修訂版。

答案2

的一個版本另一個答案的腳本,作為單行程式碼,沒有依賴性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一個與該[[結構相容的外殼。

答案3

從snap v2.34及更高版本開始,您可以透過設定選項來設定為每個套件儲存的snap修訂的最大數量refresh.retain——它只能是一個數字2 到 20 之間並有一個預設值 3

sudo snap set system refresh.retain=2 

答案4

程式碼@popey 分享了他們的答案實際上有時會失敗,因為一些損壞的軟體包沒有版本資訊。所以我修改了程式碼來克服這個問題。

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

相關內容