关于lsblk显示多个snapd和core20挂载版本的疑问及清理咨询
嗨,我来帮你理清这个Snap旧版本挂载和清理的问题~
首先得说下为什么你会看到多个loop挂载:Snap的机制就是每个版本会单独以squashfs镜像的形式存储,当前在用的版本会通过current软链接指向,旧版本暂时保留是为了方便回滚,或者有些依赖它的应用还没更新。不过确实这些旧挂载会在lsblk里显示,看着有点烦,也占点资源。
针对你的两个问题,我分点说:
能不能阻止旧版本挂载?
其实那些被标记为disabled的旧版本理论上不会被自动挂载,但有时候可能因为系统残留或者某些小bug还挂着。如果遇到这种情况,你可以先手动卸载挂载点,比如:
sudo umount /snap/core20/1782
不过手动卸载只是临时的,最好的办法是直接移除旧版本,这样它们就再也不会被挂载了——毕竟留着不用的版本也没意义。
能不能手动删除旧的/snap/core20/1782这类目录?
绝对不建议手动删! 这些目录不是普通的文件目录,是Snap挂载的squashfs镜像设备。手动删除会破坏Snap的内部依赖关系,轻则导致Snap命令出错,重则影响所有基于Snap的应用运行,甚至没法回滚到稳定版本。一定要用Snap官方提供的命令来清理,安全又彻底。
正确的清理操作步骤
- 先查看所有已安装的Snap版本,找出那些标记为
disabled的旧版本:
snap list --all
输出里会明确显示每个Snap包的所有版本状态,你要找的core20/1782和snapd/17954应该会标着disabled。
- 单独移除某个旧版本,比如移除core20的1782:
sudo snap remove core20 --revision=1782
同理,移除snapd的17954:
sudo snap remove snapd --revision=17954
- 要是想一次性清理所有未使用的旧版本,可以用这条命令自动处理:
sudo snap remove --purge $(snap list --all | awk '/disabled/{print $1,"--revision=" $3}')
它会自动筛选出所有disabled的版本并彻底移除。
额外小技巧:减少默认保留的旧版本数量
Snap默认会保留2个旧版本,如果你想进一步精简,可以修改配置让它只保留1个:
sudo snap set system refresh.retain=1
这样以后更新Snap时,只会留下最近的一个旧版本,减少空间占用和多余挂载。
操作前记得确认下这些disabled版本确实没被任何应用依赖(一般来说disabled就是没在使用的),放心操作就行~
备注:内容来源于stack exchange,提问作者loptap

