所有操作前先完成以下准备,避免故障扩大,所有示例中的/dev/sdb1、/mnt/data请替换为自身环境对应的块设备和挂载点:
物理机直接查看服务器前面板硬盘指示灯,红灯常亮/闪烁代表对应插槽硬盘物理故障;云服务器直接登录厂商控制台,查看云盘/本地盘的健康状态告警,有官方告警直接提工单更换存储介质。
执行命令查看系统内核日志,判断是否存在链路或硬件IO错误: ``` dmesg | grep -iE "sas|ata|scsi|io error|medium error" ``` 返回结果包含reset link、I/O error、medium error字样,即可判定为硬件链路或磁盘本身故障。
df -i查看inode使用率,100%代表inode耗尽,即使磁盘有剩余空间也无法写入数据mount | grep /mnt/data查看挂载状态,返回ro代表分区变为只读模式,属于文件系统异常df -h查看磁盘使用率,100%代表空间耗尽带RAID组的服务器先执行命令查看RAID状态:
```
storcli /c0 show all | grep -i "state"
```
返回Degraded代表RAID组降级,执行以下命令找到故障盘插槽号:
```
storcli /c0/eall/sall show | grep -i failed
```
记录故障盘的Enclosure ID和Slot ID,支持热插拔的服务器直接拔出故障盘插入同规格新盘,自动重建无需额外操作,手动重建命令为:
```
替换xxx为对应Enclosure ID和Slot ID
storcli /c0/exxx/sxxx start rebuild
```
无RAID的单盘服务器直接更换新盘后,执行mkfs.ext4 /dev/sdb1格式化后重新挂载即可,所有换盘操作前必须尽可能备份现有可读数据。

逐层定位占用inode过高的目录: ``` 从根目录开始排查,逐层进入子目录重复执行 for i in /; do echo $i; find $i | wc -l; done ``` 一般为大量小文件(如临时缓存、分片日志)占用,批量删除7天以上的无用小文件: ``` 替换为对应高占用目录路径 find /path/to/large/inode/dir -type f -mtime +7 -delete ``` 如果业务本身需要存储大量小文件,备份数据后重新格式化分区指定更大inode配额: ``` 每8KB分配1个inode,默认值为16KB,可按需调整 mkfs.ext4 -i 8192 /dev/sdb1 ``` 格式化操作会清空全部分区数据,必须提前完成全量备份。
首先终止占用分区的进程,卸载分区: ``` 替换为对应挂载点 fuser -km /mnt/data umount /dev/sdb1 ``` 执行文件系统修复: ``` fsck.ext4 -y /dev/sdb1 ``` fsck操作存在极低概率丢失数据,操作前必须备份分区元数据,修复完成后重新挂载并验证: ``` mount /dev/sdb1 /mnt/data touch /mnt/data/test.txt && rm /mnt/data/test.txt ``` 无报错即为修复完成。
插入新盘后创建物理卷,加入现有卷组: ``` 替换为新盘设备名 pvcreate /dev/sdc 替换为自身卷组名,可通过vgs命令查看 vgextend centos /dev/sdc ``` 扩展逻辑卷并扩容文件系统: ``` 替换为自身逻辑卷路径,可通过lvs命令查看 lvextend -l +100%FREE /dev/mapper/centos-root xfs文件系统用以下命令 xfs_growfs /dev/mapper/centos-root ext4文件系统用以下命令 resize2fs /dev/mapper/centos-root ```
df -h && df -i确认空间、inode使用率正常mount | grep /mnt/data确认挂载状态为rw读写模式dd if=/dev/zero of=/mnt/data/test bs=1M count=100 && dd if=/mnt/data/test of=/dev/null,无报错即为正常,测试完成后删除test文件storcli /c0 show all | grep -i rebuild查看重建进度,状态变为Optimal即为完全恢复如果修复过程中出现数据无法读取的情况,第一时间只读挂载分区避免二次写入: ``` mount -o ro /dev/sdb1 /mnt/tmp ``` 安装ddrescue工具克隆源盘数据到新盘后再做修复操作: ``` yum install -y ddrescue /dev/sdd1为新的空分区,容量不小于源盘 ddrescue /dev/sdb1 /dev/sdd1 /tmp/rescue.log ```
dmesg | grep -i error排查潜在IO错误











易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图