从零排查:阿里云ECS CentOS服务器磁盘突然爆满?手把手教你用命令行定位‘元凶’

张开发
2026/4/9 3:12:12 15 分钟阅读

分享文章

从零排查:阿里云ECS CentOS服务器磁盘突然爆满?手把手教你用命令行定位‘元凶’
从零排查阿里云ECS CentOS服务器磁盘突然爆满手把手教你用命令行定位‘元凶’凌晨三点手机突然响起刺耳的告警声——阿里云监控提示你的生产环境服务器磁盘使用率超过95%。这种场景对于运维人员来说无异于午夜惊魂。本文将带你像资深系统工程师一样思考用最基础的Linux命令层层剥茧不仅快速释放空间更从根本上理解磁盘占用的排查逻辑。1. 紧急响应建立全局视角当磁盘爆满告警响起时切忌直接删除文件。正确的第一步是建立整体空间分布认知。打开终端输入这个经典组合df -hT你会看到类似这样的输出Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 50G 48G 1.2G 98% / devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm关键解读点Use%确认哪个挂载点真正爆满通常是根目录/Type文件系统类型影响后续处理方式如ext4/xfsAvail计算剩余空间的绝对数值判断紧急程度注意云服务器常见陷阱是未单独挂载/data等目录导致所有数据堆积在根分区。这也是为什么50G的云盘比想象中更容易耗尽。2. 深度扫描定位空间黑洞知道问题分区后接下来要找出具体的空间吞噬者。这里需要分层次排查2.1 一级目录快速筛查du -sh /* 2/dev/null | sort -rh | head -10这个命令组合的智慧在于du -sh /*扫描根下所有一级目录大小2/dev/null屏蔽无权限目录的报错干扰sort -rh按人类可读数字逆序排序head -10只显示前10个最大目录典型输出示例24G /var 12G /home 5.4G /usr 1.2G /opt2.2 逐层钻取技术假设/var最大继续深入du -sh /var/* 2/dev/null | sort -rh | head -5可能发现18G /var/log 4.1G /var/lib 800M /var/cache直到定位到具体的大文件find /var/log -type f -size 500M -exec ls -lh {} \;3. 特殊场景处理技巧3.1 幽灵文件之谜已删除但未释放的空间有时候df显示磁盘已满但du统计却少很多。这通常是进程仍持有已删除文件的文件描述符。用这个命令揪出元凶lsof L1 | grep deleted输出示例nginx 1234 root 1w REG 253,0 10G 123456 /var/log/nginx.access.log (deleted)解决方案重启持有文件的进程如systemctl restart nginx或者清空文件内容truncate -s 0 /proc/1234/fd/13.2 日志文件的智能处理对于常见的日志爆炸问题推荐更优雅的解决方案# 安装logrotate yum install -y logrotate # 创建nginx日志轮转配置 cat /etc/logrotate.d/nginx EOF /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 nginx adm sharedscripts postrotate /bin/kill -USR1 cat /run/nginx.pid 2/dev/null 2/dev/null || true endscript } EOF4. 存储架构优化建议临时解决问题后应该建立长效机制4.1 分区规划最佳实践目录建议大小分离原因文件系统/20-30G系统基础ext4/var单独分区日志波动xfs/home按需分配用户数据ext4/data剩余空间业务数据xfs4.2 监控命令自动化创建定期检查脚本/usr/local/bin/disk_check.sh#!/bin/bash THRESHOLD80 CURRENT$(df / --outputpcent | tail -1 | tr -d %) if [ $CURRENT -ge $THRESHOLD ]; then echo WARNING: Disk usage $CURRENT% on $(hostname) | \ mail -s Disk Alert adminexample.com # 自动清理7天前日志 find /var/log -name *.log -mtime 7 -delete fi设置每天检查chmod x /usr/local/bin/disk_check.sh echo 0 3 * * * root /usr/local/bin/disk_check.sh /etc/cron.d/disk-check5. 高级诊断工具链5.1 可视化分析工具对于复杂的空间占用问题可以安装ncdu进行交互式分析yum install -y ncdu ncdu /var操作提示按n按文件名排序按s按文件大小排序按d删除选中文件5.2 文件类型统计了解哪些类型文件最占空间find /var -type f -printf %s\t%p\n | \ awk -F. !a[$NF]{print $NF} | \ xargs -I {} find /var -name *\.{} -exec du -ch {} | \ grep total$5.3 磁盘健康检查最后别忘了检查磁盘本身健康状况yum install -y smartmontools smartctl -a /dev/vda | grep -i reallocated\|pending\|uncorrectable关键指标解读Reallocated_Sector_Ct重映射扇区数0需警惕Current_Pending_Sector待映射扇区应立即备份Temperature_Celsius温度异常可能加速损坏

更多文章