服务器硬盘突然满了?多半是这几个文件
服务器硬盘突然爆满?先查这几个位置,新手也能清理
接手一台服务器没多久,突然收到告警说硬盘快满了?
别慌。服务器硬盘突然满了,多半是几个常见文件或目录在偷偷吃空间,不需要什么高深技术,按下面几步就能找到并清理。
准备条件
- SSH客户端(Windows用Putty或Terminal,Mac/Linux直接开终端)
- 服务器root密码或sudo权限
- 或者你有宝塔面板的登录权限
逐步定位大文件
方法一:Linux命令行(最通用)
用 df -h 查看各分区使用情况,找到占用高的挂载点(比如 / 或 /home)。
然后切换到那个目录,执行以下命令找出最大的前10个目录:
cd /
sudo du -sh /* | sort -rh | head -10
解释:du -sh 显示每个目录的总大小,sort -rh 按大小倒序,head -10 只看前10个。
如果要找单个大文件,用 find:
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh
这会列出所有大于100MB的文件,并按大小排序。
方法二:宝塔面板(适合新手)
登录宝塔后台 -> 左侧“文件” -> 直接点击磁盘使用率图表,或切换到“根目录/”。
在文件列表右上角点击“查看大文件”,宝塔会自动扫描并列出最大的文件/目录。
多半是这几个文件在吃空间
- 系统日志(
/var/log)
常见如 /var/log/syslog、/var/log/messages、/var/log/nginx/access.log。
日志可能持续写,长时间不轮转就会撑爆。
- 软件包缓存(
/var/cache/apt或/var/cache/yum)
Ubuntu/Debian的 apt-get 下载的deb包默认保留,CentOS的yum缓存也占地方。
- 备份文件(
/backup或自定义目录)
很多用户定时备份但没设置自动删除旧备份,积少成多。
- 邮件队列(
/var/spool/mail或/var/mail)
如果服务器发送了失败邮件,会堆积在队列里,每个用户目录下都可能产生大文件。
- Docker/容器文件(
/var/lib/docker)
如果跑Docker,未清理的镜像、容器日志、卷都很占空间。
清理与预防措施
- 日志:执行
sudo journalctl --vacuum-size=200M清理systemd日志;手动删除旧日志文件(建议先备份)。 - 缓存:Ubuntu用
sudo apt clean,CentOS用sudo yum clean all。 - 备份:第一时间删除不需要的备份,或者设置保留最近3份的脚本。
- 邮件队列:用
sudo mailq查看队列,然后删除/var/spool/mail/*或根据用户清空。 - Docker:
docker system prune -a清理所有未使用的镜像、容器和网络。
避坑指南与高频问题
Q:直接删文件会不会影响服务?
删除正在写入的日志文件会导致服务报错。建议先 service nginx stop 再删,或使用 > /var/log/nginx/access.log 清空文件内容而不是删文件。
Q:为什么删了文件空间没释放?
原因是进程仍占用该文件句柄。运行 lsof | grep deleted 找到进程并重启(如 systemctl restart rsyslog)即可释放。
Q:如何防止下次再满?
- 配置 logrotate 定期轮转日志。
- 设置 crontab 定时清理缓存和旧备份。
- 监控告警:宝塔面板自带“磁盘使用率”告警,或安装
ncdu定时扫描。
效果验证
- 再次执行
df -h对比前后使用率。 - 如果清理后剩余空间明显增加,说明操作成功。
- 检查关键服务是否正常运行(访问网站、SSH连接等)。
如果你正在处理服务器硬盘突然满了的问题,建议先按本文步骤完整执行,再根据自己的环境微调;
遇到异常时优先回看避坑和高频问题部分。