Files
teamai-global/skills/reclaim-cluster-disk/SKILL.md
T
NightStar 3d3dd79df0 Add 39 shared skills from local agent inventory
Sources: ~/.openclaw/skills, ~/.agents/skills, workshop-skills, workspace/skills
2026-09-10 16:54:57 +08:00

3.4 KiB
Raw Blame History

name, description
name description
reclaim-cluster-disk 集群磁盘占用高/要腾空间时,按安全顺序回收:journal、apt、docker、tmp、用户缓存(三台机通用)。

集群磁盘回收

触发:用户说「磁盘占用高」「清一下磁盘」「腾空间」「巡检一下,关注磁盘占用」。

三台机:襄阳2c4g(本机直接跑)、十堰电信4c8g(ssh 十堰电信4c8g <cmd>)、阿里云(ssh aliyun <cmd>)。

1. 先量

df -h /                                          # 每台,先记基线
du -x -h --max-depth=1 / | sort -rh | head -15   # 一级大目录;很慢(>40s),用后台 process 轮询
du -x -h --max-depth=1 /var/lib /root | sort -rh | head -20

典型结论:/var/lib(containerd + k3s)是最大头但属运行必需;真正被忽略的是 journal、包缓存、/tmp、用户缓存。

2. 按风险从低到高回收

  1. 归档日志:journalctl --vacuum-size=200M(实测两台各回收 2.1G / 2.6G,只删已归档的)
  2. 包缓存:apt-get clean(实测 ~135M / 196M)
  3. 宿主机 docker(只对跑 docker 的机器;阿里云是 podman 模拟,看 podman system df): docker system df 看 RECLAIMABLE → docker image prune -a -f → docker builder prune -a -f(实测 776M + 1.3G;使用中的镜像会被自动跳过)
  4. /tmp 里的过期包:确认无用再删(实测 searxng-image.tar、etcd.tar.gz、etcdctl)
  5. 用户缓存:rm -rf ~/.cache/uv ~/.cache/ms-playwright ~/.npm(实测 ~1.6G;会重新下载,可接受)
  6. 不用的自装服务(可选):systemctl --user disable --now <unit> → pkill -9 -f <name> → 删 /usr/local/lib/<name>、/usr/local/bin/<name>*、~/.<name>、~/.config/systemd/user/<unit>.service(实测 hermes-agent 按此顺序清干净)
  7. 核验:df -h / 前后对比,逐台回报数字(实测 十堰 80%→59%、襄阳 61%→47%;阿里云本来就干净,没动)

破坏性步骤(prune、rm -rf)先列清单、拿到用户确认再执行。

3. 不要动

  • K3s 镜像不在 docker 里:docker image prune 动不到 K3s 的 containerd。查 K3s 镜像必须带命名空间: ctr -a /run/k3s/containerd/containerd.sock -n k8s.io images list(漏 -n k8s.io 得到空表,实测)。这些镜像都被运行中的 Pod 引用,没有「闲置镜像」可清。
  • PVC 数据是活数据:/var/lib/rancher/k3s/storage/*(booklib / gitea / koishi)不能删。
  • 别 purge 旧内核:apt-get purge linux-image-X-generic 会连带删 linux-image-virtual / linux-virtual 元包、还要装 linux-image-unsigned-X(实测 dry-run)——每台只留 2 个内核已是精简状态,保持不动。
  • 用户手动停的容器别删(例如十堰的 serene_northcutt)。

4. 镜像能共享吗(常问)

不能。K3s/containerd 没有共享镜像存储:Pod 调度到哪台,哪台本地 containerd 就必须有一份;imagePullPolicy: IfNotPresent + nodeSelector 固定调度,能让每个镜像只落在需要的节点。各节点镜像清单用上面的 ctr -n k8s.io 命令查(这些机器上没装 crictl)。发现非调度节点上的冗余业务镜像(例:阿里云只跑 headlamp 却存着 searxng/blog 镜像)先别自动清——节点本地没镜像时 Pod 起不来,清理前要确认没有调度可能。