1. 从零开始掌握CentOS硬盘监控刚接手一台CentOS服务器时我总会先做两件事泡杯咖啡然后检查硬盘状态。这不是仪式感而是血泪教训换来的经验——曾经有台生产服务器因为磁盘写满导致数据库崩溃而报警邮件恰好被归到了垃圾箱。今天就分享这些救过我无数次的操作命令它们就像汽车仪表盘能让你随时掌握存储系统的健康状况。说到查看磁盘空间df -h绝对是入门必备。第一次看到这个命令输出时你可能觉得像在看天书/dev/mapper/centos-root、tmpfs、udev这些都是什么其实理解起来很简单想象你的服务器是个大房子每个挂载点就是不同功能的房间。-h参数让数字变得友好比如把1048576KB显示为1GB。我习惯加个-T参数显示文件系统类型这样能一眼看出是ext4还是xfs格式。但df有个盲区它只统计已挂载的空间。有次我新增了块2TB硬盘df死活不显示急得差点重装系统。后来发现是忘了挂载这时候就该lsblk出场了这个命令像X光机能透视服务器里所有块设备不管是否挂载。我最爱它的树状显示方式能清晰看到磁盘-分区-挂载点的层级关系。配合-f参数还能显示文件系统信息比df更底层。2. 磁盘分区管理的双刃剑说到分区管理fdisk和parted就像瑞士军刀里的主刀和剪刀。新手常问两者有什么区别简单说fdisk适合传统MBR分区最大支持2TBparted则能处理GPT分区支持2TB以上。有次我拿4TB硬盘做存储用fdisk死活只能认出2TB就是掉进了这个坑。实际操作中sudo fdisk -l的输出可能让人发懵。以/dev/sda为例看到Disk label type: dos说明是MBR分区gpt则是GPT分区。重点看Start和End列它们表示分区在磁盘上的物理位置。我有个小技巧用lsblk -f对照看能立即知道哪个分区对应哪个挂载点。parted命令更强大但也更危险它的修改是实时生效的记得第一次用parted时手抖删了个分区冷汗瞬间湿透后背。现在我会先用print all查看所有磁盘确认目标磁盘后再操作。对于LVM这种复杂情况parted的unit GB命令可以切换显示单位比fdisk直观得多。3. 深入I/O性能分析实战服务器卡顿但CPU内存都正常八成是磁盘I/O瓶颈。这时候iostat就是救命稻草。刚开始我看iostat的输出就像看股票大盘完全不懂门道。直到有次线上服务响应超时用iostat -dx 1 3才发现磁盘util长期100%这才找到真凶。解释下关键参数-d显示磁盘统计-x展示扩展信息数字1表示1秒刷新一次3表示采集3次。重点关注的列有%util设备繁忙百分比超过80%就要警惕awaitI/O平均等待时间(毫秒)数据库服务器最好10mssvctm设备处理I/O的平均时间最近排查一个MySQL慢查询问题时发现iostat显示await异常高但util很低。经过分析是RAID卡电池没电导致写缓存失效这个案例说明要结合多个指标判断。4. 高级监控与健康检查说到磁盘健康smartctl就像体检中心的CT机。需要先安装smartmontools包yum install smartmontools。我最常用的sudo smartctl -a /dev/sda会输出几十行信息重点关注这几个部分SMART整体健康状态PASSED/FAILED温度信息Current Drive Temperature重分配扇区计数Reallocated_Sector_Ct通电时间Power_On_Hours有次smartctl报错UDMA_CRC_Error_Count激增检查发现是SATA线接触不良。这类预警能提前几周发现潜在故障比硬盘突然宕机好太多。对于目录级空间分析du命令有个实用技巧du -h --max-depth1 / | sort -hr。这个组合拳能找出根目录下占用空间最大的前10个目录特别适合排查/var/log爆满的情况。--max-depth控制遍历深度sort -hr实现按人类可读数字逆序排列。5. 自动化监控方案搭建手动执行命令毕竟效率低我推荐把这些检查集成到监控系统。比如用crontab定期执行df -h并邮件报警0 * * * * df -h | grep -E 9[0-9]%|100% | mail -s Disk Alert adminexample.com更专业的做法是用Prometheus的node_exporter采集指标配合Grafana做可视化看板。我曾经给一个电商客户搭建的监控系统在磁盘util超过70%时自动扩容云盘完美解决了大促期间的存储瓶颈。最后分享个排查流程当收到磁盘告警时先用df确认具体挂载点用du定位大文件目录再用iostat分析I/O压力。如果是硬件问题smartctl的健康报告就是和供应商交涉的铁证。记住存储问题就像牙疼小洞不补迟早要根管治疗。