ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

disktree 全盘扫描实战:为什么从家目录扩展到整个磁盘只需要几秒

disktree 全盘扫描实战:为什么从家目录扩展到整个磁盘只需要几秒 disktree 全盘扫描实战为什么从家目录扩展到整个磁盘只需要几秒【免费下载链接】disktreeA treemap for finding and removing what fills your disk, for Omarchy. Rust GPUI.项目地址: https://gitcode.com/gh_mirrors/di/disktreedisktree 是一款用 Rust GPUI 构建的磁盘空间树状图treemap工具它把目录画成按真实磁盘占用大小排列的嵌套马赛克帮你找出磁盘被什么占满、标记该删的内容并安全清理。本文以一次真实的全盘扫描为例讲解 disktree 从家目录扩展到整个磁盘时为什么只需几秒就能完成而不是重新扫一遍全盘。先看一眼效果磁盘占用一张图看懂 ️界面上有几个关键区域详见 README.md顶部面包屑从/开始的完整路径。被扫根目录上方的条目是变暗的点击它就能把扫描范围扩大到那里中央马赛克颜色代表数据类型代码、缓存、媒体、Git、文档等斜纹表示可回收空间右侧面板当前选中的大小与占比、值得看一眼的清理建议、磁盘当前空闲量以及标记后的预计空闲量。开启全盘扫描的 3 种方式 ⚡从家目录出发想让 disktree 看到整个磁盘任选其一即可按g键直接跳转到家目录所在的磁盘根Omarchy 和 macOS 上就是/点击面包屑点击被扫根目录上方变暗的任一条目扫描范围会逐级扩大到那里命令行启动运行disktree --disk启动即扫描家目录所在的整块磁盘也可以直接disktree ~/src指定任意目录。 扩展完成后的新视图会自动定位到你出发的那个目录回退到小范围则只是普通的目录导航随时可来回切换。为什么扩展扫描只需要几秒很多人预期从~扩到/意味着重新扫描 390 万个文件截图底部可以看到scan 3.9M entries · 1.0 s。实际上扩展扫描只读取~之外的部分原因有三1. 记忆化复用已测过的子树直接搬运这是最关键的一步。扩展扫描时disktree 把已经测量好的树作为一个Known结构路径 共享的树节点交给新的遍历任务。当新扫描走到家目录时直接复用旧树不再逐文件读取复用逻辑在 scan.rsKnown注释写得很直白——widening from~to/only reads what is outside~触发入口在 state.rs 的widen_to它克隆当前树、生成Known再调用ScanHandle::spawn_with启动只扫增量部分的扫描端到端测试 widening_reuses_the_tree_it_has_and_reads_only_the_rest 专门验证了这一点子树被复用而非重走范围外的目录被真实扫描且视图自动选回来路。2. 并行扫描是底子即便要扫的新区域也很大disktree 的扫描器本身也是并行的沿用了 dust 的思路见 scan.rs 文件头注释每个目录带原子完成计数器只有当自身和所有子目录任务都结束后目录才构建最后一次性自底向上汇总大小并去重硬链接。多核并行意味着剩下的部分通常也就是秒级。3. 整个磁盘的范围被精确圈定扩展扫描只停留在家目录所在的那个卷按挂载源判定而非设备号。这带来两个好处自动跳过/proc、/sys、/run、tmpfs、/boot、其他磁盘、网络共享和自动挂载点按路径检查绝不会为了测量而挂载一块 NASbtrfs 快照子卷也会被排除——它们的文件与在线文件共享块计入就会把磁盘算两遍。所以全盘其实是这一块数据卷的全部可读内容范围可控、结果可信。扫描过程中的几个体感细节 ✅旧视图不闪烁扩展扫描进行时当前视图一直留在屏幕上直到更大的树落地才切换全程无空白无权限目录不瞎猜没有 root 时读不了的目录会被计入顶栏的不可读统计而不是估算一个数字硬链接只算一次两个名字指向同一个 inode只计一个文件的量所以删掉它能省出的空间是真实的删错有保护标记删除走审查流程默认进回收站永久删除永远先询问且系统目录/usr、/etc、/var/lib等会被直接拒绝详见 removal.rs。相关源码索引位置内容crates/disktree-core/src/scan.rs并行扫描器、进度上报、Known子树复用crates/disktree-app/src/state.rswiden_to扩展逻辑与g键行为crates/disktree-app/src/views.rs面包屑渲染与变暗条目扩大扫描crates/disktree-app/src/tests.rs扩展扫描复用子树的端到端测试crates/disktree-core/src/removal.rs删除保护规则及测试小结disktree 的全盘扫描并不是一次推倒重来的全盘遍历并行扫描器打底、记忆化复用让已测子树零成本并入、单卷圈定让范围精确可控——三者叠加从家目录扩展到整个磁盘自然只需要几秒。对于磁盘满了到底被什么占了这类问题这种即时反馈正是树状图工具最值钱的地方。【免费下载链接】disktreeA treemap for finding and removing what fills your disk, for Omarchy. Rust GPUI.项目地址: https://gitcode.com/gh_mirrors/di/disktree创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表