linux运维(三) Linux 服务器磁盘分析与清理实战指南

Linux 服务器磁盘分析与清理实战指南

适用于 CentOS / Ubuntu / Rocky 等常见发行版。本文总结自多次真实磁盘爆满排查经验,命令均可直接复制使用。


先说结论

指南可直接复制到 CSDN,命令均经实战验证。核心思路:df 看分区 → du 逐层下钻 → 定位元凶 → 迁移/清理 → 配自动任务防复发。

目录标题

  • [Linux 服务器磁盘分析与清理实战指南](#Linux 服务器磁盘分析与清理实战指南)
    • 先说结论
    • 一、快速定位:磁盘到底满在哪?
      • [1. 查看各分区使用率](#1. 查看各分区使用率)
      • [2. 找出最占空间的目录(根因定位)](#2. 找出最占空间的目录(根因定位))
      • [3. 查找大文件(>1G)](#3. 查找大文件(>1G))
    • 二、高频"爆盘"元凶清单
    • [三、MySQL 备份清理(最常见场景)](#三、MySQL 备份清理(最常见场景))
    • [四、Docker 清理](#四、Docker 清理)
      • [Docker 存储迁移到大数据盘](#Docker 存储迁移到大数据盘)
    • [五、/root 目录异常巨大](#五、/root 目录异常巨大)
    • [六、Conda / Python 环境清理](#六、Conda / Python 环境清理)
    • 七、日志清理
    • [八、LVM 分区扩容(空间分配不均时)](#八、LVM 分区扩容(空间分配不均时))
    • 九、自动化定期清理(防复发)
      • [每月清理脚本示例(CentOS/Ubuntu 通用)](#每月清理脚本示例(CentOS/Ubuntu 通用))
      • [加入 crontab(每月 1 号 02:00)](#加入 crontab(每月 1 号 02:00))
    • 十、排查检查清单(Checklist)
    • [附:Windows 侧常见爆盘(参考)](#附:Windows 侧常见爆盘(参考))

📋 请先执行

bash 复制代码
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. 查看各分区使用率

bash 复制代码
df -Th

重点关注 Use% 接近 90% 的分区。

2. 找出最占空间的目录(根因定位)

bash 复制代码
# 查看根目录下各文件夹大小
du -sh /* 2>/dev/null | sort -rh | head -20

# 逐层下钻,例如定位 /data
du -sh /data/* 2>/dev/null | sort -rh | head -20

# 继续下钻
du -sh /data/back/mysql/* 2>/dev/null | sort -rh | head -20

3. 查找大文件(>1G)

bash 复制代码
find / -type f -size +1G -exec ls -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/overlay2 overlay 挂载点大量占用 docker system prune
Conda/Python 环境 /usr/local/soft/pyminiconda 数百 GB 的 AI/ML 库 conda clean
日志文件 /var/log应用 logs 持续增长不轮转 logrotate + 手动清
应用缓存 缓存目录 累积型 定期清理

三、MySQL 备份清理(最常见场景)

现象

/data/back/mysql/data/ 下每天生成一个 3~4 GB 的日期文件夹,一年可占 1TB+。

保留策略 + 清理命令

bash 复制代码
# 只保留最近 90 天(3个月)的备份
find /data/back/mysql/data -maxdepth 1 -type d -name "202*" -mtime +90 -exec rm -rf {} +

# 查看当前共有多少天备份
ls -d /data/back/mysql/data/202* | wc -l

迁移到空闲分区(推荐)

/data 空间不足、而 / 有 1.4T 空闲时:

bash 复制代码
# 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 -maxdepth 1 -type d -name "202*" -mtime +90 -exec rm -rf {} +

⚠️ 务必先修改备份脚本路径再移动,否则备份任务会写失败。


四、Docker 清理

bash 复制代码
# 查看 Docker 各类型占用
docker system df

# 删除所有未使用镜像/容器/网络(不删挂载卷)
docker system prune -a

# 连挂载卷一起删(谨慎!会丢数据)
docker system prune -a --volumes

# 清理构建缓存
docker builder prune

Docker 存储迁移到大数据盘

bash 复制代码
systemctl stop docker
mkdir -p /data/docker
rsync -aP /var/lib/docker/ /data/docker/
mv /var/lib/docker /var/lib/docker.bak
ln -s /data/docker /var/lib/docker
systemctl start docker
docker info | grep "Docker Root Dir"

五、/root 目录异常巨大

现象

du -sh /root 返回数百 GB,明显异常。

排查

bash 复制代码
du -sh /root/* 2>/dev/null | sort -rh | head -20

处理

  • /root/data 多为误放的应用数据 → 移动到 /data 或大数据盘
  • /root/logs 多为日志 → 清理或配置 logrotate
bash 复制代码
# 移动误存数据
mv /root/data /data/old_root_data

# 清理日志(确认无用后)
rm -rf /root/logs/*.log

六、Conda / Python 环境清理

bash 复制代码
# 清理 conda 缓存、未使用包
conda clean -a

# 清理 pip 缓存
pip cache purge

# 删除不需要的虚拟环境
conda env remove -n 环境名

/usr/local/soft/py 占用 800GB,多为 AI 框架(PyTorch/TensorFlow),确认无用的环境直接删除。


七、日志清理

bash 复制代码
# 系统日志
journalctl --vacuum-size=100M   # 限制 journal 日志大小

# 手动清理指定日志
rm -f /var/log/*.log.*
rm -f /var/log/messages-*

# 配置自动轮转(编辑后生效)
vim /etc/logrotate.conf

八、LVM 分区扩容(空间分配不均时)

当根分区满、但 /home 很空(常见于 CentOS 默认分区):

bash 复制代码
# 查看卷组剩余空间
vgs

# 从 home 减 20G 给 root(示例)
lvreduce -L -20G /dev/centos/home
lvextend -L +20G /dev/centos/root
xfs_growfs /          # xfs 文件系统在线扩容

⚠️ 缩容有风险,操作前务必备份数据。


九、自动化定期清理(防复发)

每月清理脚本示例(CentOS/Ubuntu 通用)

bash 复制代码
cat > /opt/cleanup_disks.sh << 'EOF'
#!/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-size=200M
echo "$(date) cleanup done" >> /var/log/cleanup.log
EOF
chmod +x /opt/cleanup_disks.sh

加入 crontab(每月 1 号 02:00)

bash 复制代码
crontab -e
# 添加:
0 2 1 * * /opt/cleanup_disks.sh

十、排查检查清单(Checklist)

  • df -Th 找出高占用分区
  • du -sh /* 逐层定位大目录
  • 检查 MySQL 备份是否过量
  • 检查 /root/home 是否误存数据
  • 检查 Docker 占用并清理
  • 检查日志是否轮转
  • 修改备份脚本路径(迁移后)
  • 配置自动清理 cron 任务
  • 确认重要数据已备份再删除

附:Windows 侧常见爆盘(参考)

位置 典型占用 处理
C:\Users\...\AppData\Local\LiteSandbox\logs 单文件可达 156GB 停止占用进程后删除
D:\Program Files\Notepad++\...\notepad-back SQL 备份数 GB~10GB+ 确认后删除
休眠文件 hiberfil.sys 数 GB powercfg -h off

💡 核心思路df 看分区 → du 逐层下钻 → 定位元凶 → 迁移或清理 → 配自动任务防复发。

相关推荐
桑榆41643 分钟前
双系统(Windows + Ubuntu)安装流程
linux·windows·ubuntu
jerryinwuhan5 小时前
《系统部署与运维》开篇 课程介绍
运维
ltl7 小时前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux
我是谁??7 小时前
Ubuntu22.04更换清华源
linux·运维·服务器
圣殿骑士-Khtangc8 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
Shell运维手记8 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
朴马丁8 小时前
国际与国产PLM在精细化工赛道的布局:2026年主要厂商技术特色
大数据·运维·人工智能·流程行业plm·化工新材料
这个DBA有点耶9 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
Elastic 中国社区官方博客9 小时前
Elasticsearch:使用 AI Agent 来创建 workflow
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·全文检索
测试运维日常笔记10 小时前
Linux系统安装配置TigerVNC服务器完整指南
linux·运维·服务器