中文 · English
看清 C 盘和 D 盘的空间是什么时候、被什么东西吃掉的。
磁盘分析工具满地都是,但它们只回答"现在谁占得多"。真正想知道的往往是另一个问题:这三天多出来的 40 GB 是哪来的? Strata 按天记录每个目录的体积变化,像地层一样一层层堆起来,所以你翻的是时间轴,不是文件树。
- 纯 Python 标准库,运行时零第三方依赖
- 本地网页界面,只监听
127.0.0.1,数据不出本机 - 装好当天就能看到过去几天的增长(见下面的两层历史)
- 直读 NTFS MFT,百万文件的盘全盘扫描 20~25 秒;拿不到权限就自动退回普通遍历
- 界面支持中英文。第一次打开跟着浏览器语言走,顶栏那个按钮(上面写的是「按下去会变成哪种语言」)可以改,改了会记住
刚装好的工具没有历史数据,这是这类程序的通病。Strata 用两层数据绕过去,并且在界面上从不把两者混在一起:
回溯层 retro |
实测层 measured |
|
|---|---|---|
| 来源 | 按文件创建时间把现存文件分到各天 | 相邻两次快照相减 |
| 装好就有 | 是 | 否,要等第二次快照 |
| 看得见删除 | 看不见 | 看得见 |
| 含义 | 那天写入、现在还在盘上的量 | 真实净变化 |
| 图上样式 | 斜纹填充 | 实心填充 |
回溯层的盲区是真实存在的,而且两个方向都会偏:
- 偏小:上周下了个 10 GB 的文件、昨天删了,它在回溯层里查无此人。
- 偏大:那天删掉的是更早创建的文件,回溯层完全看不见,于是净减的日子它也只画成正的。本机实测过一天:回溯说
+8.35 GB,实测说-0.74 GB,差 9 GB。
把回溯值按天加起来也不是「这段时间涨了多少」——它等于「现存字节里创建日落在窗口内的部分」,是真实净增的上界(一个字节都没删过时才取等)。所以界面上回溯只报「近 N 天写入还在盘上多少」,净变化只由实测层来说。跑够两天以后,实测层接手。
管理员权限下还会读 USN 变更日志,把删除事件也补进实测层。
给别人用:下载 Releases 里的 Strata.exe,双击。会弹 UAC(要读 MFT),然后自动开浏览器。
从源码跑(Python 3.11+,Windows):
python -m strata不带参数等于 serve --admin:提权、启动 http://127.0.0.1:8731、开浏览器。
其它子命令:
python -m strata scan --drives C: D: # 只扫一次,不开界面
python -m strata schedule on --at 12:30 # 注册每日快照计划任务
python -m strata doctor # 体检:权限、盘、库、日志、计划任务每天至少要有一次快照,时间轴才长得出来,所以建议把计划任务开着。schedule on 用的是 Windows 任务计划程序,不留后台进程。
- 地层树图:方块面积是体积,颜色是这段时间的增减。点进去下钻,右键在资源管理器里打开。
- 每日增减:每天净变化的时间轴。
Ctrl + 滚轮缩放,按住拖动平移,0回到全景。碰上某天暴涨几十 GB 把其它天压成一根线时,按L切对数轴(以 1 MB 为底,0 也画得出来)。 - 热点榜:增长最多的目录,按归属层聚合,不会出现
Users套Users\alice套下去的重复条目。
一个 SQLite 库:%LOCALAPPDATA%\Strata\strata.db。日志同目录。程序目录和临时目录里不写任何数据,所以 exe 换个地方放不影响历史。
删掉那个目录就等于重置,不影响磁盘上的实际文件 —— Strata 只读盘,从不删你的东西。
PYTHONPATH=src python -m unittest discover -s tests -t . -q
python tools/build_exe.py # 打包 dist/Strata.exe
python tools/verify_exe.py # 拉起 exe 跑一遍接口和路由设计说明在 docs/plan.md,包括为什么快照按目录而不按文件存、MFT 解析踩过的坑。
- 只支持 Windows NTFS。MFT 和 USN 那两条路径依赖 NTFS 结构,别的文件系统会退回普通遍历。
- 回溯层依赖文件创建时间。有些安装器会重写这个时间戳,那部分增长的日期就是错的。
- 回溯层记的是文件现在的大小,挂在它的创建日上。所以一个去年建、上周涨到 50 GB 的虚拟磁盘或数据库文件,那 50 GB 会全算在去年那天 —— 上周的柱子里看不到它。日志、镜像、pack 文件这类「原地长大」的东西都吃这个亏,只有实测层才看得见。
- 未做验证:MFT / USN 代码路径的单元测试用的是合成样本,尚未在多种真实硬件上跑过。
GPL-3.0。见 LICENSE。