雷灵模板

服务器磁盘占满怎么办?Linux 一键定位大文件与日志清理思路(含命令)

avatar

雷灵

🤖AI摘要
文章讲解服务器磁盘占满的排查与清理方案,先用df确认分区与inode占用,再用du和find定位大目录与大文件。重点给出日志清理思路,包含常见日志目录、删除旧日志、清空超大日志及logrotate轮转配置。还涵盖临时文件与缓存清理、Docker空间回收、数据库与业务目录排查,并建议建立长期防护如监控告警、定时巡检和分区规划,附带一键排查脚本用于快速处理磁盘告警。

服务器磁盘占满怎么办?Linux 一键定位大文件与日志清理思路(含命令)

服务器磁盘占满会导致业务异常、日志写入失败、数据库停服等问题。下面给出一套实用、可落地的排查与清理方案,包含常用命令与清理思路,帮助你快速释放空间并建立长期防护。


一、先确认磁盘使用情况

1. 查看磁盘分区占用

df -h

重点关注使用率接近 90% 以上的分区。

2. 查看 inode 是否耗尽

df -i

如果 inode 用完,即使磁盘还有空间也无法写入文件,需清理小文件。


二、快速定位大文件/大目录

1. 查看根目录下各目录占用

du -h --max-depth=1 / | sort -hr

可快速定位占用最大的一级目录。

2. 进入占用最大的目录继续细分

du -h --max-depth=1 /var | sort -hr

3. 一键查找大文件(按大小排序)

find / -type f -size +500M -exec ls -lh {} \; | awk '{print $NF, $5}' | sort -hr -k2

将阈值 500M 改成需要的大小,如 100M


三、日志清理思路与命令

1. 常见日志目录

  • /var/log
  • /data/logs
  • /usr/local/nginx/logs
  • /var/lib/docker/containers

2. 查看日志占用

du -h --max-depth=1 /var/log | sort -hr

3. 清理旧日志(保留 7 天)

find /var/log -type f -mtime +7 -name "*.log" -exec rm -f {} \;

4. 清空超大日志(不中断进程)

: > /var/log/nginx/access.log

不删除文件,仅清空内容,避免服务报错。

5. 使用 logrotate 自动轮转(建议)

检查配置:

cat /etc/logrotate.conf

针对自定义日志可创建:

vim /etc/logrotate.d/custom

示例:

/data/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

四、定位临时文件与缓存

1. 清理临时目录

rm -rf /tmp/*

2. 清理软件缓存(以 yum 为例)

yum clean all

3. 清理系统缓存(谨慎)

sync; echo 3 > /proc/sys/vm/drop_caches

五、Docker 占用过高的处理

1. 查看 Docker 占用

docker system df

2. 清理无用镜像与容器

docker system prune -a

六、数据库与业务文件排查

  • MySQL 数据文件:/var/lib/mysql
  • MongoDB 数据:/var/lib/mongo
  • 业务上传目录:/data/uploads
  • 备份目录:/backup

建议使用:

du -h --max-depth=1 /var/lib | sort -hr

七、建立长期防护方案

  1. 日志自动轮转:使用 logrotate 配置自动清理
  2. 空间监控报警:如 Prometheus + Alertmanager
  3. 定期巡检脚本:结合 cron 定时检查
  4. 分区合理规划:业务日志与系统分区分离

八、常用排查脚本(可直接用)

#!/bin/bash
echo "===== 磁盘使用情况 ====="
df -h
echo ""
echo "===== 最大目录 ====="
du -h --max-depth=1 / | sort -hr | head -n 10
echo ""
echo "===== 大文件(>500M) ====="
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null | awk '{print $NF, $5}' | sort -hr -k2 | head -n 20

结语

服务器磁盘占满并不可怕,关键是快速定位问题根源、合理清理日志和缓存、建立自动化防护机制。本文的命令与思路覆盖了大多数 Linux 线上场景,建议收藏备用,遇到磁盘告警时可迅速处理并降低风险。

黔ICP备2022004976号
powered by 雷灵模板