磁盘空间爆满时需分三步处理:先用df -h和df -i确认满在哪及是否inode耗尽;再用du或ncdu定位大目录和大文件;最后按日志、缓存、Docker等场景安全清理,避免误删。

磁盘空间爆满时,不能直接删文件,得先搞清楚“谁占的、为什么占、能不能删”。核心是分三步走:确认满在哪 → 找出大头 → 安全释放空间。
一、确认是不是真满了,以及满在哪儿
先运行两条命令:
- df -h:看各挂载点使用率,重点关注 /、/var、/home、/data 这些挂载点的 Use%。超过 90% 就要警惕,100% 表示已写满。
- df -i:检查 inode 是否耗尽。即使磁盘还有空间,但显示 No space left on device,很可能是 inode 用光了——常见于 /tmp、/var/log 或容器日志目录堆了海量小文件。
二、定位占用空间的大目录和大文件
从根目录开始逐层下钻:
- 进根目录:cd /
- 查一级目录大小:du -sh --max-depth=1 * 2>/dev/null | sort -hr(例如输出里 20G /var 就说明问题大概率在 /var)
- 再进可疑目录,比如 cd /var,重复执行:du -sh * | sort -hr
- 找单个超大文件(如 >1G):find /var -type f -size +1G -exec ls -lh {} \;
更直观的方式是装 ncdu:sudo apt install ncdu(Ubuntu/Debian)或 sudo yum install ncdu(CentOS/RHEL),然后运行 sudo ncdu /,用方向键浏览,d 键可预览删除效果。
三、按场景安全清理,不误删、不丢数据
常见高危占用源及对应操作:
- /var/log/ 日志文件:用 find /var/log -name "*.log" -mtime +7 -delete 清理 7 天前日志;对正在写的超大日志,用 sudo truncate -s 0 /var/log/huge.log 清空内容(保留文件节点,避免服务报错)
- journald 日志:查用量 journalctl --disk-usage,清理旧日志 journalctl --vacuum-time=7d
- 包管理缓存:Ubuntu/Debian 执行 sudo apt clean && sudo apt autoremove;CentOS/RHEL 执行 sudo yum clean all && sudo yum autoremove
- Docker 占用:运行 docker system df 查看,再执行 docker system prune -f(清理停用容器、悬空镜像、未使用网络);加 --volumes 可清卷(慎用)
- 已删除但未释放的空间:运行 lsof +L1 或 lsof | grep deleted,找到持有已删大文件的进程,重启该服务(如 nginx、java 应用)即可释放空间
四、临时止血与长期预防
若磁盘已 100%,部分命令可能失败。可先做两件事快速腾出几十 MB:
- 清空 root 的 bash 历史:cat /dev/null > ~/.bash_history
- 清空 /tmp 下非活跃临时文件:sudo rm -f /tmp/*.tmp /tmp/*~(确认无进程正使用)
长期建议:配置 logrotate 自动轮转日志;监控磁盘使用率并设 85% 告警;定期跑 find / -xdev -type f -size +500M 掌握大文件分布;对 /var 和 /home 等关键分区单独挂载,避免互相影响。


















