如何清理 Snap 保留的舊軟件包以釋放磁盤空間
我的 Ubuntu 測試系統(tǒng)中出現(xiàn)磁盤空間不足。因此,我通過 GNOME 的磁盤使用分析器進行調查,以找出哪個軟件包正在消耗寶貴的 SSD 空間。除了通常的緩存和主目錄,令我驚訝的是,我發(fā)現(xiàn) Snap 和 Flatpak 消耗了大量的存儲空間。
Snap size – before cleanup
我始終堅持一個規(guī)則:除非必要,否則不要使用 Snap 或 Flatpak。這主要是因為它們的安裝大小和一些其他問題。我更喜歡原生 deb 和 rpm 包。多年來,我在這個測試系統(tǒng)中安裝和移除了一些 Snap 包。
問題出現(xiàn)在卸載后。Snap 在系統(tǒng)中保留了一些殘留文件,而一般用戶不知道。
所以我打開了 Snap 文件夾 /var/lib/snapd/snaps,發(fā)現(xiàn) Snap 會保留以前安裝/卸載的軟件包的舊版本。
例如,在下圖中,你可以看到 GNOME 3.28、3.34 和 Wine 這些都被刪除了。但它們還在那里。這是因為 Snap 設計上在正確卸載后保留已卸載軟件包的版本。
Files under snaps directory
或者,你可以在終端中使用:
snap list all
對于保留的版本數(shù)量,默認值為 3。這意味著 Snap 會保留每個軟件包的 3 個舊版本,包括當前安裝版本。如果你對磁盤空間沒有限制,這是可以的。
但是對于服務器和其他場景,這很容易遇到成本問題,消耗你的磁盤空間。
不過,你可以使用以下命令輕松修改計數(shù)。該值可以在 2 到 20 之間。
sudo snap set system refresh.retain=2
清理 Snap 版本
在 SuperUser 的一篇文章中,Canonical 的前工程經(jīng)理 Popey 提供了一個??簡單的腳本?? 可以清理舊的 Snap 版本并保留最新版本。
這是我們將用來清理 Snap 的腳本。
#Removes old revisions of snaps
#CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu
LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $3}' |
while read snapname revision; do
snap remove "$snapname" --revision="$revision"
done
將上述腳本以 .sh 格式保存在目錄中(例如 clean_snap.sh),賦予其可執(zhí)行權限并運行。
chmod +x clean_snap.sh
當我運行腳本時,它減少了很多磁盤空間。該腳本還將顯示要刪除的包的名稱。
Executing the script
Snaps size after cleanup
結束語
關于 Snap 的設計效率如何,人們總是爭論不休。許多人說,它的設計是糟糕的,是臃腫的,且消耗系統(tǒng)資源。該論點的某些部分是正確的,我不會否認。如果正確實施和增強,沙盒應用的整個概念就很棒。我相信,與 Snap 相比,F(xiàn)latpak 做得更好。
也就是說,我希望這可以幫助你清理一些磁盤空間。盡管它只在 Ubuntu 中進行了測試,但它應該適用于所有支持 Snap 的 Linux 發(fā)行版。