导航菜单
登录 注册

今天网站监控突然报警,提示网站无法访问。登录宝塔面板查看后发现,服务器磁盘空间已经被占满了。

第一步:快速定位大文件

为了找到占用空间的文件,我写了一个简单脚本,用来查找服务器上大于指定大小的文件。运行后很快就找到了几个体积异常大的日志文件。

查找结果如下:

root@s01 ~# find_large_files.sh / 100
[I] 正在搜索 / 下大于 100MB 的文件...
============================================================
大小       路径
============================================================
3.1G       /www/wwwlogs/tts.xiamp.net.log
1.8G       /www/wwwlogs/xiamp.net.log
657M       /www/server/data/mysql-bin.000007
642M       /backups/xxxx.tgz
...

可以看到,占用空间最多的是网站访问日志,其中单个日志文件已经达到数 GB。

脚本的下载地址:

https://github.com/benzBrake/VPSReady/raw/refs/heads/main/.utils/find_large_files.sh

下载后执行,并传入需要扫描的目录和文件大小阈值即可。

解决当前问题后,为了避免日志文件继续无限增长,还需要配置日志轮转。

第二步:配置 logrotate 日志轮转

使用 logrotate 可以自动对日志进行切割、压缩和清理,避免单个日志文件不断增大。

以下是针对 /www/wwwlogs/ 目录的日志轮转配置:

/www/wwwlogs/*.log {
    daily
    rotate 14
    compress
    delaycompress
    notifempty
    missingok
    size 100M
    create 644 www www
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 $(cat /var/run/nginx.pid)
        fi
    endscript
}

/www/wwwlogs/*.log/*.log {
    daily
    rotate 7
    compress
    delaycompress
    notifempty
    missingok
    size 50M
    create 644 www www
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 $(cat /var/run/nginx.pid)
        fi
    endscript
}

配置说明

daily
每天执行一次日志轮转。

rotate
设置保留的日志备份数量,超过数量的旧日志会被删除。

size
当日志文件达到指定大小时触发轮转,避免单个日志文件过大。

compress
旧日志会自动压缩,减少磁盘占用。

postrotate
日志切割完成后通知 Nginx 重新打开日志文件,保证日志继续正常写入。

总结

这次服务器空间被占满的原因是日志文件长期增长没有清理。通过两步可以解决问题:

  1. 使用脚本快速定位大文件
  2. 配置 logrotate 自动管理日志

这样既能快速处理当前问题,也能避免之后再次出现磁盘被日志占满的情况。

2026年03月16日,星期一,在这里每天60秒读懂世界!
上一篇
Linux 防火墙封锁特定国家/地区 IP 访问指定端口
下一篇