![如何刪除已安裝的舊版本快照](https://rvso.com/image/1557624/%E5%A6%82%E4%BD%95%E5%88%AA%E9%99%A4%E5%B7%B2%E5%AE%89%E8%A3%9D%E7%9A%84%E8%88%8A%E7%89%88%E6%9C%AC%E5%BF%AB%E7%85%A7.png)
我是快照使用的新手,我的系統上安裝了很少的應用程序,當運行命令時我注意到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