df -h定位满分区后,用ncdu -x交互扫描可快速精准找出磁盘空间占用元凶,比手动du高效准确;需注意挂载点、inode检查、删除确认及lsof验证句柄释放。

磁盘快满了,直接跑 df -h 看哪块分区撑爆了,再用 ncdu 交互式扫描,比 du -sh /* 手动翻十遍快得多、准得多。
df -h 看哪块盘真满了
别跳过这步——很多“根目录满”其实是 /var 或 /home 单独挂载的子分区撑满,df -h 输出里 Use% 列超过 90% 的才是真问题点。注意看 Mounted on 列,比如显示 /var 占用 98%,那就别扫 /,直接扫 /var。
-
df -h /只看根,但可能误导;优先用df -h全局扫一遍 - 如果看到
/dev/sdb1挂在/data下且已满,就别碰/,直接sudo ncdu /data -
df -i一起跑下,inode 耗尽也会导致“磁盘满”假象(常见于大量小文件场景)
ncdu 扫描时必须加 -x 参数
不加 -x,ncdu / 会跨挂载点钻进 /proc、/sys、/run 甚至外接硬盘或 NFS,结果混乱、扫描慢、还可能误删。加了 -x 才真正限制在当前文件系统内。
-
sudo ncdu -x /:只扫根文件系统,不进/boot、/home等独立挂载点 -
ncdu -x /var:适合/var单独挂载的服务器,避开/var/lib/docker外的干扰 - 扫描中按
d删除前,务必确认路径——/var/log/journal可删,/var/lib/dpkg绝对不能动
大文件和重复文件得分开查
ncdu 擅长找“大目录”,但对散落在各处的单个大文件(比如 /tmp/core.xxx 或用户家目录里的 ISO 镜像)不敏感;重复文件更得靠专用工具,不能靠肉眼判断。
- 找单个 >500MB 文件:
find / -type f -size +500M 2>/dev/null -exec ls -lh {} + | sort -k5 -hr | head -10 - 查重复文件用
fdupes(轻量)或rdfind(支持跨目录排序),别用rm -rf直接删,先-dry-run看列表 -
fdupes -r /home比fdupes /home更安全,递归但不跨文件系统
删完空间不释放?先看 lsof
文件删了但 df 显示空间没回来,八成是某个进程还占着被删文件的句柄。这时候 rm 只是 unlink,磁盘块没真释放。
-
lsof +L1直接列出所有“已删除但仍有进程打开”的文件(+L1 是关键) - 常见罪魁:
rsyslogd、dockerd、java进程,对应杀掉或重启服务即可 - 别盲目
kill -9,先lsof -p PID确认它到底在读哪个已删文件
真正卡住人的不是不会命令,而是扫错范围、删错路径、或者删完忘了检查句柄——这三步漏掉任何一环,清理就等于白干。


















