Under the Sun with Paddy

第 84 期 · 2026年10月10日

让 Agent 清理磁盘:工具选型、安全边界与实测结果

免责声明:本文记录包含真实删除文件的命令。删除不可逆(部分场景可走回收站)。如果你想跟做:先备份重要数据;每条删除命令先以只读或 dry-run 模式执行,并人工审查文件清单;删除前逐条确认。Agent 负责扫描、汇总与执行,删除的最终决定权与全部责任在使用者本人。文中工具均为第三方免费/开源软件,与作者无利益关系。

开头:C 盘红了

9 月 17 日,这台 Windows 11 的 C 盘可用空间剩 7.02GB(总 475GB,使用率 99%),E 盘剩 11.7GB(总 476GB,使用率 98%)。

清理前空间

浏览器更新包下载到一半失败。常规操作是打开某安全卫士一键清理,这次换了个做法:让 Agent 来干。

但不是一句「帮我把空间清出来」然后放权。边界先划死:

  • Agent 负责体力活:选型调研、下载工具、只读扫描、解析输出、聚合统计、写测评报告
  • 人负责所有删除的拍板:删什么、按什么规则删、什么时候删

整个流程里,Agent 没有不经确认删过一个文件。

一、工具选型:先分工,再选工具

清理磁盘其实是两类活:

  • 系统盘(C:)的缓存与垃圾:规则库驱动,要的是「扫得准、删得稳、有审计」
  • 数据盘(E:)的重复文件与残留:算法驱动,要的是「内容级判定、可编程、跨盘符」

Agent 给出的候选清单与分工:

工具类别分工许可
MangoDisk 1.1.2 CLI缓存清理C 盘缓存与垃圾GPL-3.0
czkawka 12.0.2 CLI重复/空目录/大文件E 盘去重与整理MIT
Bulk Crap Uninstaller 6.3卸载器全机卸载残留盘点开源
BleachBit / dust / ncdu / fclones / DISM备选本次未启用开源

下文只展开实际启用的三个。

二、系统盘缓存:MangoDisk CLI

MangoDisk(Tauri 2 + Rust,GPL-3.0)本是桌面应用,本次用的是它的 CLI。

流程两步,先只读后执行:

# 只读扫描(不改任何文件)
./MangoDisk-1.1.2-windows-cli.exe clean --format json --include-full-paths --no-progress

# 实际清理(仅推荐集,人工确认后才执行)
./MangoDisk-1.1.2-windows-cli.exe clean --apply --selection recommended --yes --format json --include-full-paths --no-progress

结果:

指标数值
只读扫描耗时约 95 秒
推荐清理集31 条规则 / 约 22.2GB
实际释放19.58GiB(预期 19.60,达成 99.9%)
处理文件项72,054 项,失败 116 项
C 盘可用空间8.7GB → 28GB

最大单项是 uv(Python 包管理器)缓存 14.95GB,其次是 DirectX 着色器缓存 3.96GB、Adobe 媒体缓存 491MB。

安全设计是这个工具的强项,五点值得记录:

  1. 默认只读,clean 不带 --apply 不动任何文件
  2. 非交互终端强制要求 --yes,实测缺参返回错误码 4
  3. 清理前扫描运行中的进程,被占用的规则整条 blocked 并列出进程名(chrome.exe、msedge.exe 都在列)
  4. 每条规则带风险分级:safe(纯临时文件)/ recoverable(可再生缓存,有重新下载成本)
  5. 清理记录落盘 history.json,可审计;规则库是开源的声明式 TOML,每条规则可追溯

对国产应用的覆盖是意外亮点:微信渲染缓存清了 285MB、腾讯会议 69MB、企业微信 0.26MB——且只动渲染与诊断缓存,聊天记录和接收的文件完全不碰。清理工具若误碰微信聊天文件就是事故,这条边界划得对。

三、数据盘去重:czkawka CLI

E 盘是数据盘,476GB 用了 98%。MangoDisk CLI 固定只扫系统盘,这一块交给 czkawka(Rust,MIT)——一个内容级去重工具,用 BLAKE3 哈希判定「内容相同」,而不是文件名或尺寸。

命令与结果:

扫描项耗时结果
重复文件(尺寸预筛)12.6s196,332 个候选 / 63,285 组(候选,非可删)
重复文件(哈希精确)8 分 14 秒51,921 个冗余副本 / 33,006 组 / 可回收 18.84GiB
空目录7.0s应用宝、迅雷等残留空目录
大文件 TOP303.8s最大 1.75GiB,顺带暴露模拟器双份虚拟磁盘
临时文件3.5s一批 macOS 残留 .DS_Store

Agent 没有直接信工具自报的数字,而是写了个十几行的聚合脚本,从 JSON 原始记录独立重算:20,226,656,219 字节 = 18.84GiB,与工具自报完全一致;「51,921 冗余副本 = 组内文件 84,927 − 组数 33,006」,口径自洽。不信工具的汇总,用自己的代码复算一遍,这是 Agent 干这类活的基本动作。

重复重灾区 TOP5:

目录冗余量典型原因
E:\Game5.89GiB五个游戏共用同一版 nw.dll(80.5MB×5)
E:\MC3.94GiBMinecraft 多版本整合包
E:\Program Files2.77GiB模拟器组件整套双份(system.vhd 1.61GiB)
E:\Code2.57GiB项目里复制的 SDK/zip
E:\STEAM1.29GiB游戏资源

四、卸载残留:Bulk Crap Uninstaller

第三条线是卸载残留。Bulk Crap Uninstaller(开源)扫出全机 522 个卸载程序、合计 442.41GB,其中筛出 16 条「卸载程序丢失」的孤儿条目,合计 13.54GB——程序本体早已不在,注册表里的卸载入口还挂着。

Bulk Crap Uninstaller 无效项 MangoDisk 清理前

这类条目删的是注册表残留,不删硬盘文件,风险低但脏活。逐条人工过目后批量处理。

五、Agent 踩的坑(本篇最有价值的部分)

工具测评的完整笔记会另发,这里只挑 Agent 实际撞上的四个坑。

坑一:czkawka 的退出码会撒谎。

对「文件名不同、尺寸相同、内容不同」的文件执行去重扫描,正确结论是「无重复」。czkawka 的输出确实是「Not found any duplicates.」,退出码却是 11——而 11 在有真重复时也是 11。为了实锤这个缺陷,Agent 自造了一对同尺寸不同内容的文件(f1、f2,各 1MB,哈希人工复核不同),复测依旧:输出无重复,退出码 11。

根因是退出码反映的是中间阶段(同尺寸候选存在),不是最终哈希判定。任何写 czkawka dup && 后续动作 的脚本,遇到分卷压缩包、固定长度记录这类「同尺寸不同内容」的常见文件必然误报。结论:脚本化使用不能信它的退出码,必须解析 JSON。

坑二:「保最新」的删除策略不懂哪份是正本。

czkawka 的 -D AEN(保留组内最新)在 dry-run 里给出的计划包括:删除正在使用的 Telegram.exe 主程序,保留更新器临时目录里的副本。内容等价没错,位置语义荒谬。在软件目录里,「保最新」是危险的默认——正确姿势是程序目录改用硬链接(-D HARD),文档/下载目录才用删到剩一份。

坑三:MangoDisk 的两档选择表达不了真实需求。

--selection 只有 recommended 和 all 两档。本机 all 比 recommended 多 16.3GB(pip 5.7G、gradle 5.2G、npm 1.4G、JetBrains 1.5G……),但 all 里混着项目内的 target/、dist/ 构建产物,删了伤增量构建。理性的选择是「清包管理器缓存、留项目构建产物」,CLI 表达不了这个集合。最终决策:本次只执行 recommended,开发缓存留给各工具原生命令(pip cache purge 等)。

坑四:先干 92 秒活,再报错。

非交互模式下缺 --yes,MangoDisk 会先跑完完整扫描(实测 92 秒)才返回错误码 4。参数校验本可以毫秒级完成。Agent 第一次验证防护逻辑时就白付了一次全盘扫描。

六、结果与遗留

目标结果
C 盘缓存(MangoDisk)实删 19.58GiB,可用空间 8.7GB → 28GB
E 盘重复文件(czkawka)鉴别出 18.84GiB 上界;分三档处置(见下)
卸载残留(BCU)盘点出 16 条孤儿条目 13.54GB,逐条人工过目
空目录 / .DS_Store顺手项,量小

E 盘的 18.84GiB 是上界,不是能删的量。内容相同不等于可以删——五个游戏目录里各有一份 nw.dll,删任何一份都会破坏对应游戏。最终按三档处置:

  1. 低风险直接删(约 3.4GiB):模拟器组件缓存的双份镜像、更新器临时残留
  2. 人工挑选:同一份 PPTX 的 4 个副本散在三个目录,哪份是终稿只有人知道
  3. 改硬链接(可再省 5~8GiB,待做):游戏 DLL 与整合包,硬链接保留所有路径且省空间

原始产物全部留档:两次扫描的 JSON、删除计划、聚合脚本、测评笔记、前后截图,共一个目录。出了问题可回溯。

七、让 Agent 干这类活的六条规矩

  1. 只读先行。任何清理工具先跑只读扫描,人看完报告再谈删除
  2. dry-run 人审。删除类操作必须有 dry-run 模式,清单逐条过目——czkawka 的 dry-run 就是在这一步拦下了「删正本留副本」的荒谬计划
  3. 分级删除。低风险(纯临时文件)可批量;中风险(可再生缓存)看重新下载成本;高风险(程序目录、项目产物、文档)逐条人工判断
  4. 不信退出码,解析 JSON。两个工具都在退出码上有缺陷,唯一可靠的是机器可读输出里的逐条状态
  5. 独立复核。Agent 自己写脚本重算工具的汇总数字,对上了才采用
  6. 全程留档。扫描结果、删除计划、执行结果、复核脚本,一个目录全存——这是「Agent 干活」与「黑箱一键清理」的本质区别

这六条的共性只有一条:Agent 的输出永远是建议,删除键在人手里。

工具清单

广告位
广告位
广告位
广告位
广告位
广告位

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注