Skip to content

Latest commit

 

History

32 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Strata

中文 · 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。

About

看清 Windows 磁盘空间是什么时候、被什么东西吃掉的。按天记录目录体积变化,装好当天就能看到过去几天的增长。纯标准库,零运行时依赖。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages