< 返回

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

    2026-02-07 20:55 作者:技术部 阅读量:9

    磁盘空间不足是 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% 以内,且不影响业务连续性。

    联系我们
    返回顶部