CentOS硬盘资源监控与排查:从基础查询到深度诊断

CentOS硬盘资源监控与排查:从基础查询到深度诊断 1. 当硬盘告警响起时快速定位问题凌晨三点手机突然响起刺耳的警报声——服务器磁盘空间不足了。这种场景对运维人员来说再熟悉不过。面对这种情况我们首先需要快速了解系统的整体磁盘使用情况。最常用的命令当属df -h这个命令能立即告诉我们哪些挂载点空间紧张。我习惯加上--total参数这样可以一目了然地看到整体使用情况df -h --total输出结果会显示每个挂载点的总容量、已用空间、可用空间以及使用百分比。当某个分区的使用率达到80%以上时就该引起警惕了。不过要注意df显示的是文件系统层面的信息有时候和实际物理磁盘的对应关系并不直观。这时候就需要lsblk命令出场了。这个命令以树状结构展示块设备之间的关系能清楚地看到哪些分区属于哪块物理磁盘lsblk -o NAME,MAJ:MIN,RM,SIZE,RO,FSTYPE,MOUNTPOINT我特别喜欢lsblk的-f参数它能同时显示文件系统类型和UUID这在排查挂载问题时特别有用。有一次我遇到一个服务器重启后某个分区没挂载的情况就是用这个命令快速找到了对应的UUID然后修正了/etc/fstab文件。2. 深入分析磁盘使用细节当我们知道哪个分区空间不足后下一步就是要找出占用空间的文件。这时候du命令就派上用场了。我最常用的组合是du -h --max-depth1 /path/to/directory | sort -h这个命令会显示指定目录下各子目录的大小并按人类可读的格式排序。--max-depth1参数控制只显示一级子目录避免信息过载。如果发现某个目录特别大可以逐步深入du -h --max-depth1 /var/log | sort -h du -h --max-depth1 /var/log/nginx | sort -h在实际工作中我经常遇到/var/log目录爆满的情况。这时候除了清理日志文件外还应该考虑设置日志轮转。对于Web服务器/var/www目录也是需要重点监控的对象。有时候你会发现du和df显示的总量对不上这通常是因为有文件被删除但进程仍在使用。这时候可以用lsof命令查找被删除但仍被占用的文件lsof L13. 磁盘性能瓶颈诊断磁盘空间问题解决后我们还需要关注磁盘性能。iostat是监控磁盘I/O性能的利器。我常用的参数组合是iostat -dx 1 5这个命令会每隔1秒输出一次磁盘I/O统计共输出5次。重点关注%util列它表示设备的繁忙程度。如果这个值持续高于80%说明磁盘可能已经成为性能瓶颈。iotop是另一个很实用的工具它能实时显示各个进程的磁盘I/O使用情况iotop -o这个命令特别适合找出那些疯狂读写磁盘的进程。有一次我用它发现了一个失控的日志收集进程占用了大量磁盘I/O资源。4. 磁盘健康状态深度检查作为负责任的系统管理员我们不仅要关注磁盘的使用情况还要关心磁盘的健康状况。smartctl是检查磁盘SMART信息的标准工具smartctl -a /dev/sda这个命令会输出磁盘的详细健康报告。重点关注以下几个指标Reallocated_Sector_Ct重映射扇区数Current_Pending_Sector待重映射扇区数Uncorrectable_Error_Cnt不可纠正错误数如果这些值不为零特别是持续增长时说明磁盘可能即将出现故障。我建议定期收集这些数据并建立基线这样更容易发现异常变化。对于RAID阵列mdadm命令可以提供额外的健康信息mdadm --detail /dev/md0这个命令会显示RAID阵列的详细状态包括哪些磁盘处于活动状态、重建进度等信息。5. 自动化监控方案手动执行这些命令虽然有效但在管理多台服务器时就不现实了。我通常会设置以下自动化监控方案使用cron定期执行df和smartctl将结果保存到日志文件配置sysstat包收集系统性能数据设置告警阈值当磁盘空间或健康状态达到临界值时自动通知一个简单的监控脚本示例#!/bin/bash THRESHOLD90 CURRENT$(df / --outputpcent | tail -1 | tr -d %) if [ $CURRENT -gt $THRESHOLD ]; then echo Warning: Root partition is ${CURRENT}% full | mail -s Disk Space Alert adminexample.com fi对于更复杂的监控需求可以考虑使用PrometheusGrafana或者Zabbix等专业监控工具。这些工具不仅能监控磁盘使用率还能跟踪历史趋势帮助我们预测未来的存储需求。6. 常见问题排查经验在实际工作中我遇到过各种奇怪的磁盘问题。以下是几个典型案例案例1df显示磁盘已满但du找不到大文件。这通常是因为某个进程持有已删除文件的句柄。解决方法lsof | grep deleted找到相关进程后可以重启该进程释放空间。案例2磁盘I/O性能突然下降。除了用iostat检查外还要注意是否有人在跑大型数据库查询或者备份任务。iotop可以帮助定位问题进程。案例3SSD性能下降。SSD在接近满容量时性能会显著下降。建议保持至少20%的剩余空间并定期执行fstrimfstrim -v /案例4RAID阵列降级。这种情况需要立即处理避免第二块磁盘故障导致数据丢失。mdadm命令可以查看阵列状态并启动重建。7. 磁盘管理最佳实践根据多年经验我总结了以下磁盘管理的最佳实践合理分区将系统文件、日志文件、用户数据分开存放避免一个分区爆满影响整个系统。监控预警设置合理的监控阈值在问题发生前得到预警。定期维护每月检查磁盘健康状态清理不必要的文件。容量规划根据业务增长趋势提前规划存储扩容。备份策略确保重要数据有可靠的备份方案。对于关键业务系统我建议使用LVM逻辑卷管理来管理磁盘空间。LVM允许在线调整分区大小大大提高了灵活性# 扩展逻辑卷 lvextend -L 10G /dev/vg01/lv_root # 调整文件系统大小 resize2fs /dev/vg01/lv_root最后要提醒的是所有磁盘操作都要谨慎特别是在生产环境。修改分区表或者调整文件系统大小前一定要先备份重要数据。我曾经见过有人误操作导致整个数据库丢失的惨剧这种教训一定要引以为戒。