如何处理占用大量存储空间的 snap 程序?

如何处理占用大量存储空间的 snap 程序?

我安装了 Ubuntu。我有一个分区磁盘,其中根/分区为 20 GB,/home分区为 60 GB。我以为这对于 Ubuntu 来说已经足够了,但是 snap 占用了大量的存储空间。

6,9 GiB [###       ] /snap                                                                                                                                                                                                                                          
5,8 GiB [###       ] /usr
3,9 GiB [##        ] /var
2,3 GiB [#         ] /opt

这是/snap文件夹:

1,7 GiB   [##########] /gnome-3-34-1804                                                                                    
1,2 GiB   [#######   ] /gnome-3-28-1804
868,0 MiB [#####     ] /kde-frameworks-5-core18
721,7 MiB [####      ] /postman
653,2 MiB [###       ] /gtk-common-themes
594,0 MiB [###       ] /core
393,8 MiB [##        ] /core20
337,6 MiB [#         ] /core18
293,4 MiB [#         ] /snap-store
238,8 MiB [#         ] /snapd
39,6 MiB  [          ] /canonical-livepatch
4,0 KiB   [          ] /bin
4,0 KiB   [          ]  README

我没有使用 KDE,它似乎是 GNOME 的旧版本。我可以删除它吗?

您对腾出空间还有其他想法吗?

答案1

您对腾出空间还有其他想法吗?

下面有一个脚本(它是从我用来对根分区进行常规“春季大扫除”的个人脚本中提取的),它可以从三个方向减少快照的整体大小:

  1. 减少系统中存储的最大修订数量(snap set system refresh.retain=2脚本行)
  2. 当您的快照修订超过上一点定义的最大数量时,清理最旧的修订(while脚本中的循环)
  3. 清理快照缓存目录(rm /var/lib/snapd/cache/*脚本中的命令)
#!/bin/bash

# Error status variables
STATUS_OK=0
STATUS_ERROR=1

# Color settings
YELLOW_COLOR="\033[1;33m"
RED_COLOR="\033[0;31m"
OFF_COLOR="\033[0m"

# Set English language
LANG=en_US.UTF-8

# Execute it as root user
if [ "${USER}" != root ]; then
  echo -e "${RED_COLOR}ERROR: must be root! Exiting...${OFF_COLOR}"
  exit "${STATUS_ERROR}"
fi

# Current status
USED_BEFORE="$(df -k / | awk 'NR>1 {print $3}')"

# snapd revisions clean
if [ -n "$(command -v snap)" ]; then
  # shellcheck disable=SC2162
  read -p "→ Do you want to remove unused snapd revisions? [Y/n] " KEY
  KEY="${KEY:0:1}" && KEY="${KEY,,}"
  if [ "${KEY}" = "y" ] || [ "${KEY}" = "" ]; then
    # remove unused snapd revisions
    echo "Removing unused snapd revisions..."
    snap set system refresh.retain=2
    # shellcheck disable=SC2162
    snap list --all | awk '/disabled/ {print $1, $3}' |
    while read SNAP_NAME SNAP_REV; do
      snap remove "${SNAP_NAME}" --revision="${SNAP_REV}";
    done
    if [ -d /var/lib/snapd/cache ] && [ -n "$(ls -A /var/lib/snapd/cache)" ]; then
      rm /var/lib/snapd/cache/*
    fi
    echo "Nothing unused to uninstall"
  else
    echo "Task skipped"
  fi
fi

# Current status
USED_AFTER="$(df -k / | awk 'NR>1 {print $3}')"

# Summary
echo -e "${YELLOW_COLOR}Freed up space: $(( (USED_BEFORE - USED_AFTER)/1024 )) MB${OFF_COLOR}"
exit "${STATUS_OK}"
  • 将上述代码保存在文件中,例如snap-cleanup.sh
  • 将其放在定义的文件夹中$PATH,例如$HOME/.local/bin
  • 使其可执行chmod +x $HOME/.local/bin/snap-cleanup.sh
  • 通过以下方式调用sudo bash $HOME/.local/bin/snap-cleanup.sh

总体而言,大小是 snap 格式的弱点,因为共享库/依赖项在每个 snap 中都是“重复的”。如果这对你来说确实是一个问题,你可以做的是使用应用程序的 .deb 版本(来自apt install)而不是 snap 版本。

您也可以完全删除snapd,但请考虑,对于 Ubuntu 的 GNOME 版本,以 snap 形式分发的软件包数量正在增加,并且其中一些软件包的决定不是由 Canonical 做出的,而是由软件包分发者自己做出的(例如,Firefox 的 Mozilla)。将来,删除snapd可能并非无害。

答案2

我认为 20 GB 对于目前的 Ubuntu 桌面来说已经不够了 —— 这会给你留下很少的空间来安装应用程序。

Snap 占用大量空间,默认情况下 Gnome 桌面以及其他几个应用程序都包含在 Snap 中。

为了确保安全,我不会建议桌面安装少于 100 GB 的空间,除非您愿意花费额外的时间来调整和优化磁盘空间。

对于您的其他问题:是的,您应该能够删除gnome-3-28-1804,并且kde-frameworks-5-core18不会出现任何问题。

相关内容