Ubuntu22.04(禁用)彻底删除Snap以及出现“rm: 无法删除"XXX":只读文件系统”的解决方案

发布时间 2023-08-24 19:22:02作者: JOJO-Young

  Ubuntu22.04(禁用)彻底删除Snap以及出现”rm: 无法删除"XXX":只读文件系统“的解决方案

导语

  Snaps 是 Ubuntu 的母公司 Canonical 于 2016 年 4 月发布 Ubuntu 16.04 LTS(Long Term Support,长期支持版)时引入的一种容器化的软件包格式。自 Ubuntu 16.04 LTS 起,Ubuntu 操作系统可以同时支持 Snap 及 Debian 这两种格式的安装包。

  Snap 虽然有一定的优点(请自行搜索),但是不足之处更多。Snap 软件包体积庞大,snapd 进程会导致系统重启等待,并且可能导致卡顿,禁用为佳。

  特别是服务器版用不上这种软件包,默认是安装的,必须彻底删除。Ubuntu 22.04 桌面版中两个关键的程序:软件商店和 Firefox 使用了 Snap 软件包,卡顿明显。

删除Snap的方法

  方法一、方法二删除结果相同。

  但是方法二更为彻底,删掉了缓存下的snapd包文件等。

方法一:

  在你的系统中打开一个终端,使用以下命令查看已经安装的 Snap 软件包的列表。它显示了 Snap 软件包,比如 Firefox,软件商店,主题以及其它默认已经安装的核心软件包。

snap list

  按照以下的顺序移除 Snap 软件包。首先移除 Firefox。然后是软件商店,和用以上命令看到的你的系统中的其它软件包。

sudo snap remove --purge firefox
sudo snap remove --purge snap-store
sudo snap remove --purge gnome-3-38-2004
sudo snap remove --purge gtk-common-themes
sudo snap remove --purge snapd-desktop-integration
sudo snap remove --purge bare
sudo snap remove --purge core20
sudo snap remove --purge snapd

  最后,通过 apt 命令移除 Snap 服务。

sudo apt remove --autoremove snapd

方法二:

删掉所有的已经安装的 Snap 软件

for p in $(snap list | awk '{print $1}'); do
  sudo snap remove $p
done

  一般需要执行两次(桌面版三次),提示如下则正确执行:

snap "Name" is not installed
core20 removed
snapd removed

  再次执行,提示如下,表明已经删除干净:

No snaps are installed yet. Try 'snap install hello-world'.

删除 Snap 的 Core 文件

sudo systemctl stop snapd
sudo systemctl disable --now snapd.socket

for m in /snap/core/*; do
   sudo umount $m
done

删除 Snap 的管理工具

sudo apt autoremove --purge snapd

删除 Snap 的目录

rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd
sudo rm -rf /var/cache/snapd

禁止apt安装snapd

  即使你用以上命令移除了 Snap 软件包,但是如果你没有关闭 apt 触发器,sudo apt update 命令会再一次将 Snap 安装回来。要关闭它,我们需要在 /etc/apt/preferences.d/ 目录下创建一个 apt 设置文件 nosnap.pref 来关闭 Snap 服务。

sudo gedit /etc/apt/preferences.d/nosnap.pref

  添加以下的命令行,并保存该文件。

Package: snapd
Pin: release a=*
Pin-Priority: -10

  最终效果如下图:

出现“ rm: 无法删除"XXX":只读文件系统 ”的解决方案 

  对于那些在Ubuntu 22.04中出现错误的情况:

$ sudo snap remove --purge firefox
error: cannot perform the following tasks:
- Remove data for snap "firefox" (1943) (unlinkat /var/snap/firefox/common/host-hunspell/en_ZA.dic: read-only file system)

  首先验证使用以下命令验证/var/snap/firefox/common/host hunspell是否确实挂载在ext4文件系统。

lsblk-fe7-o+ro

  如果情况属实,可使用如下命令停用Firefox服务。

$ sudo systemctl stop var-snap-firefox-common-host\\x2dhunspell.mount
$ sudo systemctl disable var-snap-firefox-common-host\\x2dhunspell.mount 
Removed /etc/systemd/system/default.target.wants/var-snap-firefox-common-host\x2dhunspell.mount.
Removed /etc/systemd/system/multi-user.target.wants/var-snap-firefox-common-host\x2dhunspell.mount.

  不会再出现“ rm: 无法删除"XXX":只读文件系统 ”的问题,可将对应文件删除。