news 2026/7/6 12:15:14

Linux df/du 命令实战:5分钟定位磁盘空间占用95%的根因(附排查脚本)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux df/du 命令实战:5分钟定位磁盘空间占用95%的根因(附排查脚本)

Linux磁盘空间快速排查实战:从基础命令到自动化脚本

当服务器磁盘空间告急时,系统管理员往往需要在最短时间内定位问题根源。本文将带你从基础命令开始,逐步构建一套完整的磁盘空间排查体系,最终形成一个自动化分析脚本,帮助你在5分钟内快速定位磁盘占用95%的罪魁祸首。

1. 磁盘空间排查基础:df与du命令解析

在Linux系统中,dfdu是磁盘空间分析的两把利剑,它们各司其职却又相辅相成。

df命令(Disk Filesystem)用于查看文件系统的整体磁盘使用情况。一个典型的用法是:

df -hT

这里的参数组合会产生清晰易读的输出:

  • -h:以人类可读格式显示(KB、MB、GB)
  • -T:显示文件系统类型

典型输出示例:

Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 50G 47G 1.2G 98% /

du命令(Disk Usage)则用于分析具体目录和文件的磁盘占用情况。最常用的组合是:

du -sh /*

这个命令会显示根目录下所有一级子目录的总大小:

  • -s:只显示总计大小
  • -h:人类可读格式

关键区别

命令作用范围最佳使用场景
df文件系统级别快速查看哪个分区空间不足
du目录/文件级别定位具体占用空间的位置

提示:当df显示空间不足但du统计的总和远小于分区大小时,可能存在文件已被删除但进程仍占用的情况(下文会详细说明)

2. 进阶排查技巧:定位大文件与特殊场景

2.1 快速找出大文件

组合使用findsort命令可以高效定位大文件:

find / -type f -size +100M -exec ls -lh {} + 2>/dev/null | sort -k5 -rh

这个命令的执行逻辑:

  1. 从根目录开始查找大于100MB的普通文件(-type f -size +100M)
  2. 以易读格式列出文件详情(ls -lh)
  3. 按文件大小降序排序(sort -k5 -rh)

2.2 处理已删除但未释放的空间

当发现df显示的已用空间远大于du统计结果时,可能是被删除的文件仍被进程占用。使用lsof命令可以找出这些"幽灵文件":

lsof | grep deleted | sort -k7 -rn

输出示例:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 12345 root 1w REG 253,1 536870912 123456 /var/log/app.log (deleted)

处理方案:

  1. 重启相关进程(最彻底)
  2. 清空文件内容:truncate -s 0 /proc/[pid]/fd/[fd]

2.3 特殊目录分析

某些目录需要特别关注:

  • /var/log:系统日志目录
  • /tmp:临时文件
  • Docker存储目录:/var/lib/docker
  • 数据库数据目录:如PostgreSQL的/var/lib/pgsql

针对日志文件的快速分析:

du -ah /var/log | sort -rh | head -20

3. 自动化排查脚本开发

将上述命令整合成一个自动化脚本disk_analyzer.sh

#!/bin/bash # 磁盘空间分析工具 v1.2 THRESHOLD=90 # 空间使用百分比阈值 TOP_N=10 # 显示前N个大目录/文件 # 检查root权限 if [ "$(id -u)" -ne 0 ]; then echo "请使用root权限运行此脚本" >&2 exit 1 fi # 1. 检查各分区使用情况 echo -e "\n\033[1;34m=== 分区空间使用情况 ===\033[0m" df -hT | awk 'NR==1 || $6+0>'$THRESHOLD'' # 2. 检查inode使用情况 echo -e "\n\033[1;34m=== Inode使用情况 ===\033[0m" df -i | awk 'NR==1 || $5+0>'$THRESHOLD'' # 3. 分析根目录空间占用 echo -e "\n\033[1;34m=== 根目录空间占用TOP $TOP_N ===\033[0m" du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -n $TOP_N | awk '{printf "%-10s %s\n", $1, $2}' # 4. 查找大文件 echo -e "\n\033[1;34m=== 大文件查找(>100MB) ===\033[0m" find / -type f -size +100M -exec du -h {} + 2>/dev/null | sort -rh | head -n $TOP_N # 5. 检查被删除未释放的文件 echo -e "\n\033[1;34m=== 被删除但未释放的文件 ===\033[0m" lsof -nP | grep -i deleted | sort -k7 -nr | head -n $TOP_N | awk '{printf "%-10s %-10s %s\n", $2, $3, $NF}' # 6. 特殊目录检查 echo -e "\n\033[1;34m=== 特殊目录检查 ===\033[0m" for dir in /var/log /tmp /var/lib/docker; do [ -d "$dir" ] && echo -e "\n$dir:" && du -sh $dir/* done

脚本功能说明

  1. 分区空间检查:突出显示使用率超过阈值的分区
  2. Inode检查:防止大量小文件耗尽inode
  3. 根目录分析:快速定位占用最大的子目录
  4. 大文件查找:找出超过100MB的文件
  5. 幽灵文件检测:找出已删除但未释放空间的文件
  6. 特殊目录检查:重点分析常见问题目录

注意:运行此脚本需要root权限,因为它需要访问系统所有目录

4. PostgreSQL数据库空间专项排查

数据库往往是磁盘空间的大户,这里以PostgreSQL为例介绍专项排查方法:

4.1 数据库大小查询

SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) as size FROM pg_database ORDER BY pg_database_size(pg_database.datname) DESC;

4.2 表空间分析

SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) as size FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC LIMIT 10;

4.3 WAL日志管理

PostgreSQL的WAL日志可能占用大量空间,检查命令:

du -sh /var/lib/postgresql/12/main/pg_wal/

调整WAL日志保留策略:

ALTER SYSTEM SET wal_keep_segments = 32; -- 保留32个段文件 SELECT pg_reload_conf(); -- 重载配置

5. 实用清理策略与注意事项

5.1 安全清理原则

  1. 日志文件:使用logrotate管理而非直接删除
  2. 临时文件:确认不再使用后再清理
  3. 数据库文件:使用SQL命令清理而非直接删除文件

5.2 常用清理命令

日志文件轮转

logrotate -f /etc/logrotate.conf

清理旧内核(CentOS/RHEL):

package-cleanup --oldkernels --count=2

Docker系统清理

docker system prune -af

5.3 预防措施

  1. 设置磁盘空间监控告警
  2. 对重要分区保留10-20%的缓冲空间
  3. 对大目录设置配额限制
  4. 定期执行预防性维护
# 添加cron任务定期检查 0 3 * * * /usr/local/bin/disk_analyzer.sh > /var/log/disk_check.log

通过本文介绍的方法和脚本,你可以在磁盘空间告急时快速定位问题根源。记住,预防胜于治疗,建立完善的监控和维护机制才是解决磁盘空间问题的长久之计。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 12:15:16

ONNX Runtime 1.17 GPU 安装避坑:CUDA 12.4 与 cuDNN 8.9 版本匹配 3 步验证法

ONNX Runtime GPU 部署实战:从版本匹配到性能调优的全链路指南当深度学习模型从训练阶段转入生产环境时,推理引擎的选择直接决定了服务响应速度和资源利用率。作为微软开源的跨平台高性能推理引擎,ONNX Runtime 凭借其对 ONNX 格式模型的广泛…

作者头像 李华
网站建设 2026/7/6 12:13:45

TongWeb systemd服务配置进阶:3个关键参数调优与多域部署实战

TongWeb systemd服务配置进阶:3个关键参数调优与多域部署实战在Linux生产环境中,TongWeb作为企业级应用服务器,其稳定性和性能表现往往取决于systemd服务的精细配置。本文将深入解析Typeforking、TimeoutSec0和PIDFile这三个关键参数的优化策…

作者头像 李华
网站建设 2026/7/6 12:10:49

Windows 10/11 双网卡路由表配置:3条命令实现内外网分流,避免0.0.0.0冲突

Windows双网卡路由表配置:3条命令实现内外网智能分流在企业办公环境中,经常需要同时访问内网资源和互联网资源。传统切换网络的方式效率低下,而双网卡同时工作又容易出现路由冲突。本文将深入解析Windows路由表机制,提供一套简洁高…

作者头像 李华
网站建设 2026/7/6 12:10:21

Linux Chrome 代理自动化:2种桌面入口修改与1个ALPM钩子脚本

Linux Chrome 代理配置自动化:桌面入口修改与ALPM钩子脚本实战1. 为什么需要系统级代理配置在日常使用Linux桌面环境时,许多用户都会遇到一个共同的痛点:每次启动Chrome浏览器都需要手动输入代理参数。这不仅降低了工作效率,也容易…

作者头像 李华
网站建设 2026/7/6 12:10:18

FalconFS未来路线图:下一代AI存储技术的发展趋势与规划

FalconFS未来路线图:下一代AI存储技术的发展趋势与规划 【免费下载链接】FalconFS A high-performance distributed file system designed for AI workloads. 项目地址: https://gitcode.com/openeuler/FalconFS 前往项目官网免费下载:https://ar…

作者头像 李华