gdu:交互式目录磁盘占用分析
用 gdu 高速扫描目录树、定位大目录与大文件,并通过 -x 和 --no-delete 安全地分析服务器根文件系统。
#howto
#growing
#ops
#linux
#linux
[!info] related notes
- 总体流程:Linux 磁盘占用检查与分析
- 文件系统总览:duf:文件系统与挂载点磁盘总览
- 文件系统命令:Linux 文件系统命令
gdu:交互式目录磁盘占用分析
定位
gdu 是 Go 编写的高速磁盘占用分析器,主要回答:
这个文件系统里的空间到底被哪些目录和文件占了?
它尤其适合 SSD,并利用并行扫描提高速度。
duf 找到“哪个盘满”
↓
gdu 找到“哪个目录大”
↓
业务工具判断“能不能删”
安装
优先使用发行版包;如果仓库版本缺失或较旧,可直接使用官方 release binary。
官方 Linux amd64 示例:
curl -L https://github.com/dundee/gdu/releases/latest/download/gdu_linux_amd64.tgz | tar xz
chmod +x gdu_linux_amd64
sudo mv gdu_linux_amd64 /usr/local/bin/gdu
ARM64 主机应下载对应架构的 release,不要照抄 amd64 文件名。
最推荐的服务器分析命令
sudo gdu -x --no-delete /
其中:
-x/--no-cross:不要跨文件系统边界;--no-delete:禁用交互界面的删除操作;/:从根文件系统开始分析。
这两个保护参数非常重要。
为什么要 -x
服务器可能存在:
/mnt/nfs
/workspace/gcp-dev-01 # SSHFS
/run
/proc
/sys
如果跨文件系统扫描,可能把远程服务器、网络盘或特殊文件系统一起算进去,既慢又容易误判。
为什么要 --no-delete
gdu 默认交互模式支持 d 删除选中项。生产服务器做诊断时,分析和删除应分离:
先找出来
→ 判断数据类型与 owner
→ 再用专用命令清理
而不是在扫描器里顺手删除。
交互操作
↑ / k 上移
↓ / j 下移
Enter / l 进入目录
← / h 返回上级
s 按大小排序
n 按名称排序
? 帮助
如果没有 --no-delete:
d 删除文件或目录
e 清空目录
因此生产环境建议默认加 --no-delete。
非交互模式
找最大的 N 项:
gdu -n -t 30 /
显示更新时间:
gdu -n -M /
分析最近一段时间产生的数据:
gdu -n --min-age 30d /
也可以把分析结果存到数据库或 JSON,便于后续比较。
与 du / ncdu 的关系
| 工具 | 特点 |
|---|---|
du | 最通用,适合脚本,但手工下钻体验弱 |
ncdu | 成熟经典的交互式分析器 |
gdu | Go 实现,SSD 上通常扫描更快,交互能力强 |
一个典型排查
duf /
sudo gdu -x --no-delete /
如果看到:
/var 39G
/srv 28G
/home 28G
继续进入 /srv:
/srv/hermes-personal 28G
→ data 27G
→ profiles/memoflow 16G
→ opencode.db 9G
这就是从“盘快满”逐步定位到“具体业务文件”的过程。