轻量服务器系统盘占用过高是常见问题,尤其在长期运行或部署应用后容易出现。以下是详细的排查和处理方法:
一、检查当前磁盘使用情况
df -h
查看各分区的使用情况,确认系统盘(通常是 / 或 /dev/vda1)是否确实占用过高。
二、查找大文件或目录
使用 du 命令定位占用空间大的目录:
du -sh /* | sort -hr | head -10
这会列出根目录下占用空间最大的前10个目录。
进一步深入某个目录:
du -sh /var/* | sort -hr | head -5
du -sh /home/* | sort -hr | head -5
du -sh /root/* | sort -hr | head -5
三、常见高占用原因及处理方案
1. 日志文件过大(尤其是 /var/log)
- 查看日志大小:
du -sh /var/log/* - 清理旧日志:
# 删除特定日志(如 nginx、mysql、syslog 的旧日志) sudo truncate -s 0 /var/log/syslog sudo truncate -s 0 /var/log/auth.log sudo rm /var/log/*.log.* # 删除压缩的旧日志 - 使用
logrotate配置自动轮转(推荐长期解决)。
2. 软件包缓存过多(Ubuntu/Debian)
sudo apt clean # 清理下载的安装包
sudo apt autoremove # 删除无用依赖
CentOS/RHEL:
sudo yum clean all # 或 dnf clean all
3. 临时文件堆积(/tmp 或 /var/tmp)
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
⚠️ 注意:确保没有正在运行的服务依赖这些临时文件。
4. Web服务日志或缓存(如 Nginx、Apache)
- 检查 Nginx 日志:
du -sh /var/log/nginx/* - 清理访问日志:
sudo truncate -s 0 /var/log/nginx/access.log sudo truncate -s 0 /var/log/nginx/error.log - 考虑关闭不必要的日志,或配置日志轮转。
5. 数据库日志或数据(如 MySQL/MariaDB)
- 检查慢查询日志、错误日志是否过大。
- 清理二进制日志(binlog):
SHOW BINARY LOGS; RESET MASTER; -- 小心使用,会删除所有 binlog - 或设置过期时间:
SET GLOBAL expire_logs_days = 7;
6. Docker 容器/镜像堆积
如果你使用了 Docker:
docker system df # 查看占用
docker system prune -a # 清理无用镜像、容器、卷(谨慎操作)
7. 用户上传文件或备份文件
检查 /home、/root、网站目录(如 /var/www/html)是否有大量上传文件、备份 .tar.gz、.sql 文件等。
示例清理:
find /root -name "*.tar.gz" -type f -size +100M -exec ls -lh {} ;
# 确认后删除
rm /root/backup_old.sql
四、优化建议(防止再次占满)
-
定期清理脚本
编写定时任务自动清理日志和缓存:crontab -e添加:
0 3 * * 6 /usr/bin/apt clean && /usr/bin/apt autoremove -y -
挂载独立数据盘
如果经常存储数据(如网站、数据库、备份),建议:- 购买并挂载云硬盘作为数据盘。
- 将
/var/www、/var/lib/mysql等迁移到数据盘。
-
启用日志轮转
确保/etc/logrotate.conf正常工作,避免日志无限增长。 -
监控磁盘使用
安装监控工具如ncdu、glances,或使用云厂商提供的监控服务。
五、紧急扩容方案(云服务商支持)
如果无法通过清理释放足够空间,可考虑:
- 系统盘扩容(阿里云、腾讯云、华为云等支持在线扩容)
- 在控制台升级系统盘容量。
- 登录服务器执行扩容命令(如
growpart+resize2fs或xfs_growfs)。
示例(ext4 文件系统):
sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1
六、总结步骤
| 步骤 | 操作 |
|---|---|
| 1 | df -h 查看占用 |
| 2 | du -sh /* | sort -hr 找大目录 |
| 3 | 清理日志、缓存、临时文件 |
| 4 | 删除无用软件包和依赖 |
| 5 | 检查 Docker、数据库、网站备份 |
| 6 | 设置自动清理和监控 |
| 7 | 必要时扩容系统盘 |
如你提供具体系统(Ubuntu/CentOS)、用途(建站/数据库等),我可以给出更精准的清理建议。
云小栈