当前位置: 首页 > news >正文

Linux df/du 命令实战:5分钟定位磁盘空间占用超80%的根因

Linux磁盘空间排查实战:5分钟精准定位空间占用元凶

1. 磁盘空间告警的紧急排查流程

当服务器突然弹出"磁盘空间不足"的警告时,运维人员需要像急诊医生一样快速定位问题根源。以下是经过实战验证的排查决策树:

  1. 全局扫描:使用df -h查看各分区使用率,锁定问题分区
  2. 目录级分析:进入目标分区后执行du -sh * | sort -hr找出最大目录
  3. 深度钻取:对可疑目录执行du -ah | sort -rh | head -10列出具体大文件
  4. 特殊文件检查:用ls -lhS查看当前目录文件大小排序

典型排查场景示例

# 步骤1:确认根分区使用率已达95% $ df -h / Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 47G 1.2G 95% / # 步骤2:发现/var占用异常 $ cd / && sudo du -sh * | sort -hr 24G var 11G usr 5.2G home ... # 步骤3:定位到日志文件过大 $ cd /var && sudo du -ah | sort -rh | head -5 18G /var/log/nginx/access.log 1.2G /var/log/syslog 800M /var/log/kern.log ...

2. 高阶排查工具与技巧

2.1 可视化分析工具

对于复杂的空间占用问题,可以借助可视化工具生成直观报告:

# 安装ncdu工具 $ sudo apt install ncdu -y # 扫描指定目录 $ ncdu /var

ncdu会生成交互式界面,用ASCII条形图显示各目录占比,支持键盘导航深入查看。相比传统命令,它能:

  • 实时显示扫描进度
  • 允许删除文件而不退出工具
  • 按大小或名称排序
  • 显示隐藏目录占比

2.2 特殊文件类型处理

某些文件类型需要特殊处理方式:

文件类型特征处理命令
日志文件持续增长truncate -s 0 filename
核心转储以core开头gdb -c corefile分析后删除
孤立inodedu与df结果不一致lsof +L1查找被删除的大文件

2.3 自动化监控脚本

将以下脚本加入crontab实现每日空间检查:

#!/bin/bash THRESHOLD=80 CURRENT=$(df / --output=pcent | tail -1 | tr -d '% ') if [ "$CURRENT" -ge "$THRESHOLD" ]; then ALERT_MSG="[WARNING] Disk usage on / is ${CURRENT}%" echo "$ALERT_MSG" # 生成详细报告 REPORT_FILE="/tmp/disk_usage_$(date +%Y%m%d).log" echo "Top 10 directories:" > "$REPORT_FILE" du -h --max-depth=1 / 2>/dev/null | sort -hr | head -11 >> "$REPORT_FILE" # 这里可以添加邮件发送逻辑 else echo "[OK] Disk usage: ${CURRENT}%" fi

3. 典型场景解决方案

3.1 日志文件暴增

Nginx/Apache日志快速增长是常见问题,解决方案包括:

  1. 日志轮转配置(以Nginx为例):
# /etc/logrotate.d/nginx /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate invoke-rc.d nginx rotate >/dev/null 2>&1 endscript }
  1. 实时日志监控
# 监控日志文件增长 $ watch -n 60 'du -sh /var/log/nginx/access.log' # 按时间范围切割日志 $ sudo logrotate --force /etc/logrotate.d/nginx

3.2 数据库空间异常

PostgreSQL数据库可能出现数据目录膨胀:

-- 查询数据库大小 SELECT d.datname AS "数据库名", pg_size_pretty(pg_database_size(d.datname)) AS "大小" FROM pg_database d ORDER BY pg_database_size(d.datname) DESC; -- 查询表大小(含索引) SELECT table_schema || '.' || table_name AS "表名", pg_size_pretty(pg_total_relation_size('"'||table_schema||'"."'||table_name||'"')) AS "总大小" FROM information_schema.tables ORDER BY pg_total_relation_size('"'||table_schema||'"."'||table_name||'"') DESC;

对于表膨胀问题,建议定期执行VACUUM FULL(需停机窗口)或使用pg_repack工具在线重组。

4. 防御性运维策略

4.1 空间预分配机制

通过LVM实现弹性扩容:

# 查看卷组剩余空间 $ vgs # 扩展逻辑卷 $ lvextend -L +10G /dev/mapper/vg-root # 调整文件系统 $ resize2fs /dev/mapper/vg-root

4.2 关键目录配额设置

对用户目录设置磁盘配额:

# 1. 编辑/etc/fstab,添加usrquota参数 /dev/sda1 /home ext4 defaults,usrquota 0 2 # 2. 重新挂载并初始化配额 $ mount -o remount /home $ quotacheck -cum /home $ quotaon /home # 3. 为用户设置配额 $ edquota -u username

4.3 自动化清理策略

使用systemd定时器实现智能清理:

# /etc/systemd/system/disk-cleanup.service [Unit] Description=Weekly disk cleanup [Service] Type=oneshot ExecStart=/usr/local/bin/cleanup_script.sh # /etc/systemd/system/disk-cleanup.timer [Unit] Description=Run cleanup weekly [Timer] OnCalendar=weekly Persistent=true [Install] WantedBy=timers.target
http://www.gsyq.cn/news/1646623.html

相关文章:

  • 统信 UOS 20 虚拟机性能调优:4项关键参数设置提升30%流畅度
  • Nginx 1.20.1 生产环境平滑升级实战:CentOS 7 下 5 步修复 CVE-2021-23017
  • UltraISO 9.6.6.33 制作 Windows 11 启动盘:FAT32 转 NTFS 解决 4GB 文件写入难题
  • Linux Nvidia 多卡进程清理:fuser 与 kill 指令的 3 种组合与 2 个关键误区
  • OpenAI Realtime API实时语音交互系统深度实践指南
  • CentOS 7 嵌套虚拟化实战:在KVM虚拟机中部署Xen 4.x的3步配置
  • Ubuntu移动硬盘即插即用系统:从分区到引导修复的完整避坑指南
  • 图像增强实战:从灰度变换到视觉优化
  • Linux 磁盘扩容后处理:fdisk 与 parted 工具实战对比与5步操作指南
  • Bash 环境变量与 PATH 配置:Ubuntu 22.04 下 5 个实用自定义技巧
  • OpenAI o3深度解析:推理模型如何重塑AI应用开发与智能体范式
  • MacBook Pro M3 系列外接 4K 显示器 5 个关键设置:从 HiDPI 到色彩匹配
  • Linux echo 命令 5 个高级转义符实战: 退格、 回车的 3 种脚本应用
  • Windows 10 家庭版 Administrator 账户救急:PE 环境下 3 步解锁与密码重置
  • Jboss安全配置实战:从弱口令防护到网站根目录加固
  • Linux 日志分析实战:grep 组合 awk/sed 实现 5 类复杂多关键字过滤
  • STM32驱动WS2812B灯带:SPI+DMA实现高效灯光控制
  • CentOS 7.6 Swap 分区动态调整:从 1.2G 扩容至 2.2G 的 8 步操作实录
  • Wand-Enhancer完整指南:快速免费解锁WeMod专业版功能的终极解决方案
  • YOLO目标检测演进史:从v1到v13,如何解决速度、精度与部署难题
  • 为什么文件明明是 UTF-8,PowerShell 里还是中文乱码?一篇讲透 Codex、Claude 等 AI 编码工具下的排查与修复
  • 前缀和题解:多加一个哨兵,少掉一堆边界判断
  • WinBtrfs终极指南:如何在Windows上无缝读写Linux Btrfs文件系统
  • DeepL Chrome扩展:5分钟实现专业级浏览器划词翻译的完整指南
  • Windows 11 右键菜单管理:Git Bash 等3类工具的自定义与清理
  • 美加墨世界杯:大模型预测翻车,却在营销与应用场景中大放异彩!
  • Wig/BigWig 格式实战:3步从BAM文件生成UCSC基因组浏览器轨迹
  • Linux Swap 分区实战:CentOS 7.6 下 3 种方法动态调整 1-8GB 交换空间
  • C++和C中const的区别详解
  • Windows与Mac系统锁屏密码重置全攻略