Remove Snap in Xubuntu 20.04
最近把手邊的機器換上 Xubuntu 20.04,但開機過程中馬上遭遇兩個錯誤。
Failed to activate swapfile
第一個錯誤是 systemd 抱怨無法啟用 swap。看起來安裝時如果沒有另外切一個獨立的 swap 分割區,系統會自動在根目錄添加一個 1.5GB 的檔案作為 swap file。 但 swap file 如果是放在 Btrfs 上有些限制需要注意,否則就會啟用失敗。
systemd[1]: Failed to activate swap /swapfile.
首先是 kernel 版本,Btrfs 在 Linux-5.0 之前為了躲問題,故意不實作支援 swapfile 所需的函式12,後來由 Facebook 的 Omar Sandoval 解決了3 。 其次是 swap file 不能開啟 Copy-on-Write 或 Compression,否則也會失敗。
Xubuntu 20.04 已經採用 Linux-5.4,因此不是版本問題。問題在於 Xubuntu 自動建立的 swapfile 並沒有關閉 CoW,重新建立一個即可。
# rm /swapfile
# touch /swapfile
# chattr +C /swapfile
# chmod 600 /swapfile
# fallocate -l 1599283200 /swapfile
# mkswap /swapfile
# swapon /swapfile
Failed to mount Mount unit for <snap-app>
第二個問題則是幾個神秘的 Mount unit 掛載失敗,原因是以為沒用到就把 Squashfs 關了,原來系統背後的 snap 有偷偷在使用。
Failed to mount Mount unit for core18
Failed to mount Mount unit for gtk-common-themes
Snap 是 Canonical 主推的軟體包裝方式,可以解決相依行問題並且自帶 sandboxing,缺點就是肥了一點。 類似機制的競爭對手還有 Flatpak 和 AppImage 。 Ubuntu 自 16.04 已開始內建 snap,到了 19.10 也悄悄地把 Chromium 轉換成 snap 形式,所以這次升級直接放棄安裝。但系統內仍然以下 snap packages。
$ Snap list
Name Version Rev Tracking Publisher Notes
core18 20200311 1705 latest/stable canonical✓ base
gtk-common-themes 0.1-36-gc75f853 1506 latest/stable canonical✓ -
snapd 2.44.3 7264 latest/stable canonical✓ snapd
直接移除也不影響系統運作:
$ sudo snap remove gtk-common-themes
$ sudo snap remove core18
$ sudo apt purge gnome-software-plugin-snap
$ sudo apt purge snapd squashfs-tools
最後檢查一下相關的目錄 /snap
, /var/snap
, /var/lib/snapd
,應該都被清掉了。
cccheng at 2020-05-04 1588550400