linux运维(三) Linux 服务器磁盘分析与清理实战指南
Linux 服务器磁盘分析与清理实战指南适用于 CentOS / Ubuntu / Rocky 等常见发行版。本文总结自多次真实磁盘爆满排查经验命令均可直接复制使用。先说结论指南可直接复制到 CSDN命令均经实战验证。核心思路df 看分区 → du 逐层下钻 → 定位元凶 → 迁移/清理 → 配自动任务防复发。目录标题Linux 服务器磁盘分析与清理实战指南先说结论一、快速定位磁盘到底满在哪1. 查看各分区使用率2. 找出最占空间的目录根因定位3. 查找大文件1G二、高频爆盘元凶清单三、MySQL 备份清理最常见场景现象保留策略 清理命令迁移到空闲分区推荐四、Docker 清理Docker 存储迁移到大数据盘五、/root 目录异常巨大现象排查处理六、Conda / Python 环境清理七、日志清理八、LVM 分区扩容空间分配不均时九、自动化定期清理防复发每月清理脚本示例CentOS/Ubuntu 通用加入 crontab每月 1 号 02:00十、排查检查清单Checklist附Windows 侧常见爆盘参考 请先执行1. 查看 /root 下到底是什么du-sh/root/*2/dev/null|sort-rh|head-20# 2. 查看 MySQL 备份内容du-sh/data/back/mysql/*2/dev/null|sort-rh|head-20一、快速定位磁盘到底满在哪1. 查看各分区使用率df-Th重点关注Use%接近90%的分区。2. 找出最占空间的目录根因定位# 查看根目录下各文件夹大小du-sh/*2/dev/null|sort-rh|head-20# 逐层下钻例如定位 /datadu-sh/data/*2/dev/null|sort-rh|head-20# 继续下钻du-sh/data/back/mysql/*2/dev/null|sort-rh|head-203. 查找大文件1Gfind/-typef-size1G-execls-lh{}\;2/dev/null|head-20二、高频爆盘元凶清单根据实战统计90% 的 Linux 磁盘爆满来自以下几类元凶典型路径特征处理MySQL 每日备份/data/back/mysql/data/2026xxxx按日期每天一个文件夹每个数 GB迁移 保留策略/root 误存数据/root/data、/root/logs/root 本应只有几 GB却达数百 G移走或清理Docker 镜像/容器/var/lib/docker/overlay2overlay 挂载点大量占用docker system pruneConda/Python 环境/usr/local/soft/py、miniconda数百 GB 的 AI/ML 库conda clean日志文件/var/log、应用 logs持续增长不轮转logrotate 手动清应用缓存缓存目录累积型定期清理三、MySQL 备份清理最常见场景现象/data/back/mysql/data/下每天生成一个 3~4 GB 的日期文件夹一年可占 1TB。保留策略 清理命令# 只保留最近 90 天3个月的备份find/data/back/mysql/data-maxdepth1-typed-name202*-mtime90-execrm-rf{}# 查看当前共有多少天备份ls-d/data/back/mysql/data/202*|wc-l迁移到空闲分区推荐当/data空间不足、而/有 1.4T 空闲时# 1. 在空闲分区创建新目录mkdir-p/mysql_backup/data# 2. 迁移历史备份数据量大建议后台执行mv/data/back/mysql/data/* /mysql_backup/data/# 3. 修改备份脚本中的路径关键# 将脚本里 /data/back/mysql/data 改为 /mysql_backup/data# 4. 在新位置设置 90 天自动清理find/mysql_backup/data-maxdepth1-typed-name202*-mtime90-execrm-rf{}⚠️务必先修改备份脚本路径再移动否则备份任务会写失败。四、Docker 清理# 查看 Docker 各类型占用dockersystemdf# 删除所有未使用镜像/容器/网络不删挂载卷dockersystem prune-a# 连挂载卷一起删谨慎会丢数据dockersystem prune-a--volumes# 清理构建缓存dockerbuilder pruneDocker 存储迁移到大数据盘systemctl stopdockermkdir-p/data/dockerrsync-aP/var/lib/docker/ /data/docker/mv/var/lib/docker /var/lib/docker.bakln-s/data/docker /var/lib/docker systemctl startdockerdockerinfo|grepDocker Root Dir五、/root 目录异常巨大现象du -sh /root返回数百 GB明显异常。排查du-sh/root/*2/dev/null|sort-rh|head-20处理/root/data多为误放的应用数据 → 移动到/data或大数据盘/root/logs多为日志 → 清理或配置logrotate# 移动误存数据mv/root/data /data/old_root_data# 清理日志确认无用后rm-rf/root/logs/*.log六、Conda / Python 环境清理# 清理 conda 缓存、未使用包conda clean-a# 清理 pip 缓存pip cache purge# 删除不需要的虚拟环境condaenvremove-n环境名若/usr/local/soft/py占用 800GB多为 AI 框架PyTorch/TensorFlow确认无用的环境直接删除。七、日志清理# 系统日志journalctl --vacuum-size100M# 限制 journal 日志大小# 手动清理指定日志rm-f/var/log/*.log.*rm-f/var/log/messages-*# 配置自动轮转编辑后生效vim/etc/logrotate.conf八、LVM 分区扩容空间分配不均时当根分区满、但/home很空常见于 CentOS 默认分区# 查看卷组剩余空间vgs# 从 home 减 20G 给 root示例lvreduce-L-20G/dev/centos/home lvextend-L20G /dev/centos/root xfs_growfs /# xfs 文件系统在线扩容⚠️ 缩容有风险操作前务必备份数据。九、自动化定期清理防复发每月清理脚本示例CentOS/Ubuntu 通用cat/opt/cleanup_disks.shEOF #!/bin/bash # 保留 MySQL 备份 90 天 find /mysql_backup/data -maxdepth 1 -type d -name 202* -mtime 90 -exec rm -rf {} # 清理 Docker docker system prune -a -f # 清理journal日志 journalctl --vacuum-size200M echo $(date) cleanup done /var/log/cleanup.log EOFchmodx /opt/cleanup_disks.sh加入 crontab每月 1 号 02:00crontab-e# 添加021* * /opt/cleanup_disks.sh十、排查检查清单Checklistdf -Th找出高占用分区du -sh /*逐层定位大目录检查 MySQL 备份是否过量检查/root、/home是否误存数据检查 Docker 占用并清理检查日志是否轮转修改备份脚本路径迁移后配置自动清理 cron 任务确认重要数据已备份再删除附Windows 侧常见爆盘参考位置典型占用处理C:\Users\...\AppData\Local\LiteSandbox\logs单文件可达 156GB停止占用进程后删除D:\Program Files\Notepad\...\notepad-backSQL 备份数 GB~10GB确认后删除休眠文件hiberfil.sys数 GBpowercfg -h off核心思路df看分区 →du逐层下钻 → 定位元凶 → 迁移或清理 → 配自动任务防复发。