You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

`snap list --all`无法显示/var/lib/snapd/snaps中全部快照及旧快照清理残留问题咨询

snap list --all无法显示/var/lib/snapd/snaps中全部快照及旧快照清理残留问题咨询

嗨,我来帮你梳理下这个问题的原因和解决办法~

为什么snap list --all看不到所有快照文件?

snap list --all只会显示snapd正常管理的有效快照,那些没出现在列表里的.snap文件,大概率是以下情况:

  • 之前删除旧版本快照时,snapd因为异常(比如操作中断、系统崩溃)没彻底清理的残留文件;
  • 下载中断的不完整快照(比如你看到的partial目录就是用来存放未完成下载的);
  • 损坏的快照文件,snapd无法识别,所以没纳入管理列表。

能不能直接删除这些残留文件?

可以,但要谨慎核对后再操作,避免误删正在使用的快照:

  1. 先确认这些文件对应的版本确实不在snap list --all的输出里。比如你看到的chromium_2556.snap,执行snap list --all chromium如果只显示2642版本,那这个旧文件就可以安全删除;
  2. partial目录里的内容全是未完成的下载,完全可以直接删除,不会影响任何已安装的snap应用;
  3. 绝对不要删除当前正在使用的快照(比如snap list里没有disabled标记的版本对应的文件),否则会导致应用崩溃。

为什么你的清理脚本没删干净?

你用的脚本只针对标记为disabled的快照,但那些残留的文件对应的版本可能已经被完全移除(不在snap list --all里了),自然不会被脚本匹配到。这里提供一个更稳妥的脚本,可以自动找出所有未被snapd管理的快照文件:

# 生成snapd管理的所有快照文件名(格式:名称_版本号.snap)
managed_snaps=$(snap list --all | awk '{if(NR>1) print $1 "_" $3 ".snap"}')

# 遍历/var/lib/snapd/snaps下的所有.snap文件
for snap_file in /var/lib/snapd/snaps/*.snap; do
    filename=$(basename "$snap_file")
    # 检查当前文件是否在管理列表中
    if ! echo "$managed_snaps" | grep -q "$filename"; then
        echo "发现未被管理的残留快照:$filename"
        # 确认无误后,把下面的注释去掉执行删除
        # sudo rm "$snap_file"
    fi
done

运行这个脚本时,先看输出的文件列表是不是都是你确认要删除的,没问题再取消注释执行删除。

额外提醒

如果之后还频繁出现这类残留问题,可以尝试更新snapd到最新版本(sudo snap refresh snapd),新版本的snapd在快照清理逻辑上会更稳定,减少异常残留的概率。

备注:内容来源于stack exchange,提问作者spraff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:44:38