服务器磁盘空间占满排查清理手册:从入门到实操

为什么服务器磁盘会突然占满?

很多新手站长或自己搭服务器的朋友,经常遇到这样的场景:网站突然打不开、SSH 登录报错、上传文件提示“磁盘空间不足”。
服务器磁盘空间占满后,不仅网站服务会异常,甚至系统都可能崩溃。
别急,这篇文章就是专门写给零基础用户的实操教程,跟着一步步做,你也能学会怎样定位和清理问题。

从连接服务器开始

在动手清理之前,先确认你能登录服务器。
推荐使用 SSH 客户端(如 Xshell、PuTTY 或 Mac 终端),通过服务器 IP 和 root 密码或密钥登录。
如果你用的是宝塔面板、1Panel 等管理工具,也可以直接用面板的“终端”功能执行命令。

登录后,先运行一个最简单的命令看看整体情况:

df -h

这条命令会列出所有分区的总大小、已用、可用和使用百分比。
重点看 / 根分区或 /home/data 这类存放网站数据的挂载点。
使用率达到 90% 以上就要立刻处理了。

小技巧:如果 df -h 显示正常,但系统仍然报空间不足,可能是 inode 耗尽。再跑一条 df -i 查看 inode 使用情况,如果使用率接近 100% 说明小文件太多,清理方向就变成了删大量零碎文件。

找到占用磁盘空间的元凶

光知道哪个分区满了还不够,需要定位到具体目录甚至文件。
du 命令来层层排查。

  1. 查看根目录下各个目录的大小
   cd /
   du -sh * | sort -rh | head -10

du -sh * 统计每个文件和目录的大小,sort -rh 按人类可读格式排序(大的在前),head -10 只看前 10 个。
一般排在前面的会是 /var/usr/home/tmp 等。

  1. 深入分析最大目录

假设发现 /var 很大,就继续:

   cd /var
   du -sh * | sort -rh | head -10

重复这个过程,直到找到具体的“罪魁祸首”。
常见的大户包括:

  • 日志文件/var/log/ 下的 messages、syslog、nginx 访问日志等。
  • Docker 日志/var/lib/docker/containers/ 下的 json.log 文件。
  • 系统缓存/tmp/var/cache
  • 核心转储(core dump)/var/crash/core
  • 网站文件:如果网站放在 /home/www,可能是备份、图片或旧项目占用。
  1. 查找大于指定大小的文件

如果你不想逐层扒,也可以直接暴力搜索超过 100MB 的文件:

   find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -rh | head -20

这条命令会列出根下所有超过 100MB 的常规文件,大小从大到小排。
注意 2>/dev/null 忽略权限错误。

清理时别踩这些坑

很多人拿到命令就急着删文件,结果把系统搞崩了。
下面几个避坑点一定要记住:

  • 不要直接删除正在被占用的日志文件:删除后只是文件名没了,但进程还在写旧 inode,空间不会释放(用 df 看还是一样满)。此时需要先清空文件而不是删除:> /var/log/nginx/access.log 或者 truncate -s 0 /var/log/nginx/access.log
  • 查看已删除但仍被占用的文件:有时你明明删了文件,空间却没变,是因为有进程还在使用它。执行:
  lsof | grep '(deleted)'

找到对应的进程 ID,然后重启该进程(例如 systemctl restart nginx)或 kill 掉它。

  • 清理系统日志要谨慎:可以用 logrotate 管理日志轮转,不要手动清空 /var/log 下的所有文件。例如保留最近 7 天的日志:
  find /var/log -type f -name "*.log" -mtime +7 -delete

或者用 journalctl --vacuum-size=200M 限制 systemd 日志总大小。

  • Docker 容器日志特别大:进入容器日志目录 /var/lib/docker/containers,找到 容器ID/容器ID-json.log,直接清空:truncate -s 0 /var/lib/docker/containers/*/*-json.log。或者在 Docker 启动参数里设置日志限制。

确认空间已释放

清理完成后,再次运行 df -h 看目标分区的使用率是否下降。
如果数字没变,检查上面提到的已删除未释放文件,或者 inode 是否已满。
如果 inode 满,需要找到包含大量小文件的目录删除(比如邮件队列 /var/spool/postfix/maildrop)。

建议再跑一遍 du -sh /* | sort -rh 对比之前的占用,确认最大的那几个目录已经变小。
最后重启相关服务(比如 nginx、php-fpm)确保旧文件句柄释放。

常见高频问题解答

Q:为什么我删了文件,硬盘空间还是满的?
A:多半是某个进程还在用这个已删除的文件。用 lsof | grep deleted 找出进程并重启即可。

Q:我的宝塔面板显示空间满,怎么在面板里清理?
A:宝塔的“文件”里可以直接查看目录大小,也可以在“工具箱-日志清理”里一键清理系统日志。不过更推荐用 SSH 执行上述命令,更彻底。

Q:有没有自动清理的办法?
A:可以设置 cron 定时任务,比如每天凌晨清理 7 天前的日志,或者使用 logwatch 报告。但新手建议先手动操作一遍,再考虑自动化。

总结

服务器磁盘空间占满排查清理并不难,核心就是:先用 df -h 确认分区,再用 du -sh * 逐层或 find 直接找出大文件,然后针对日志、缓存、Docker 等常见大户进行清理。
遇到空间不释放就检查已删除未释放文件。
牢记这几个命令和避坑点,你就能独立解决大部分磁盘满的问题。
如果你按照本文一步步操作后问题依旧,不妨重新检查一下 inode 使用情况,或者看看是否挂载了外部存储没有释放快照。
希望这篇教程能帮你轻松应对磁盘告警。

分享到:
上一篇
服务器内存爆满清理与优化方案:服务器内存爆满怎么办?从诊断到
下一篇
服务器带宽跑满溯源异常流量:服务器带宽跑满怎么办?手把手教你
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意