网宝
新闻中心 / / 正文

Linux 服务器磁盘空间查看与清理实战

2026-02-07 20:55
技术部
← 返回

磁盘空间不足是 Linux 服务器最常见、最容易导致服务中断的故障之一(尤其是 /var 爆满后 journald、docker、mysql、nginx 日志等会直接卡死)。 本篇聚焦服务器真实场景中最有效的查看 → 定位 → 清理 → 预防全流程,强调实用性和安全性,避免盲目 rm -rf 造成更大灾难。

1. 先快速判断整体磁盘使用情况(3 个最常用命令)

 
 
命令 核心价值 推荐写法 何时优先用
df -h 整体分区使用率、人性化大小、一目了然 df -hT(显示文件系统类型) 第一眼判断哪个分区快满了
df -h --output 更精确的字段控制 df -h --output=source,fstype,size,used,avail,pcent,target 需要复制到表格或监控脚本时
du -sh /* 根目录下每个一级目录占用多少 `du -sh /* 2>/dev/null sort -hr`
 

典型输出解读示例:

  • /var 占 78% → 继续深挖 /var
  • / 根分区 92% → 必须立即处理,否则系统随时只读挂起

2. 定位具体占用大户(层层递进的 4 层定位法)

第 1 层:根目录一级子目录排序 du -sh /* 2>/dev/null | sort -hr | head -15

最常见前三名:

  1. /var
  2. /home(用户下载、代码、虚拟机镜像)
  3. /usr(软件安装过多)

第 2 层:锁定嫌疑目录后继续下钻 示例:/var 占大头 du -sh /var/* 2>/dev/null | sort -hr | head -10

常见子目录:

  • /var/log
  • /var/lib/docker
  • /var/cache
  • /var/lib/mysql / mariadb / postgresql
  • /var/tmp

第 3 层:锁定具体罪魁祸首

  • 日志:du -sh /var/log/* | sort -hr
  • Docker:du -sh /var/lib/docker/* | sort -hr
  • 缓存:du -sh /var/cache/* | sort -hr

第 4 层:找出具体大文件(跨文件系统最强工具)

text
 
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null | sort -hr
# 或更安全只搜特定分区
find /var -xdev -type f -size +100M -printf '%s %p\n' | sort -nr | head -20
 
 

-xdev 参数非常重要:防止 find 跨挂载点搜索其他磁盘,浪费时间。

3. 服务器最常见的 8 类空间占用与安全清理方法

 
 
占用来源 典型路径 安全清理方式(优先级从高到低) 注意事项与风险点
系统日志 /var/log/*.log / journal journalctl --vacuum-time=2weeks logrotate 强制执行 不要直接 rm 日志文件,容易导致服务卡住
Docker 镜像/容器/卷 /var/lib/docker docker system prune -a --volumes docker image prune -a 先确认没有重要镜像,-a 会删全部未使用镜像
包管理器缓存 /var/cache/apt / /var/cache/dnf apt clean / apt autoclean dnf clean all 可随时清理,几乎零风险
临时文件 /tmp /var/tmp rm -rf /tmp/* (重启后自动清理的更安全) 确认没有程序正在使用
旧内核 /boot apt autoremove 或 package-cleanup --oldkernels 至少保留当前 + 上一个内核
用户下载/缓存 /home/*/Downloads / .cache 手工删除或 ncdu 交互式清理 用户数据,谨慎操作
数据库 binlog / wal /var/lib/mysql / postgresql 调整 retention 或 手工 purge binary logs 误删会导致数据不可恢复
大型应用日志 /var/log/nginx / /opt/app/logs logrotate 配置 + 手工 > file.log 清空不删文件 清空前确认服务支持 reopen
 

4. 推荐的清理安全顺序(降低误删风险)

  1. 先 df -h 确认哪个分区最紧急
  2. du -sh /* → 锁定前 3 名目录
  3. 进入嫌疑目录后 du -sh * | sort -hr 继续下钻
  4. 发现日志 → journalctl --vacuum-size=500M 或 --vacuum-time=1month
  5. 发现 docker → docker system df → docker system prune --all --force --volumes(谨慎)
  6. 发现缓存 → apt/dnf/yum clean
  7. 最后用 find 找全局大文件(>1GB)手工确认删除
  8. 清理完成后立即 df -h 验证效果

5. 交互式神器:ncdu(强烈推荐安装)

text
 
# Ubuntu/Debian
apt install ncdu

# Rocky/Alma/Fedora
dnf install ncdu
 
 

使用方式:

  • ncdu /
  • 上下箭头浏览目录
  • d 删除(会二次确认)
  • ? 查看帮助

优点:可视化、直观、支持跨分区统计、误删概率低得多。

6. 预防再次爆盘的 6 条生产建议

  1. 分区规划合理 /var 单独大分区(或 LVM 逻辑卷可扩容)
  2. 日志自动清理 journald.conf:SystemMaxUse=2G / MaxRetentionSec=90day logrotate 配置 daily + size 100M + rotate 7
  3. Docker 定期清理 crontab 每周跑 docker system prune -f
  4. 监控告警 df 使用率 >85% 发告警(Zabbix/Prometheus node_exporter + alertmanager)
  5. tmpfs 化 /tmp fstab 加入 tmpfs 挂载,限制大小
  6. 大文件扫描定时任务 每周 find / -xdev -type f -size +1G -ls > /root/bigfiles-$(date +%F).txt

总结思维模型

磁盘爆满排查口诀: “先 df 看全局 → du 找分区 → find 锁定文件 → 针对性清理 → 验证 + 预防”

最危险的操作永远是:不看清楚就 rm -rf /var/log/* 或 /var/lib/docker/* 养成“先统计 → 确认 → 备份或移走 → 再删”的习惯,能避免 99% 的误删灾难。

 

熟练掌握以上方法后,你就能在大多数情况下把磁盘从 98% 降到 60% 以内,且不影响业务连续性。

QQ客服 提交工单