XFS metadata I/O error 磁盘异常掉线故障定位实录
说明:文中主机名、序列号、盘符等均已做脱敏处理,示例盘符与序列号请替换为实际环境值。
一、故障现象
某天收到告警,业务目录读写异常。dmesg 中看到 XFS 报 metadata I/O error,并触发强制 shutdown:
[Sun Oct 18 06:37:35 2026] XFS (sdf): metadata I/O error in "xlog_iodone" at daddr 0x280336250 len 64 error 5
[Sun Oct 18 06:37:35 2026] XFS (sdf): xfs_do_force_shutdown(0x2) called from line 1238 of file fs/xfs/xfs_log.c. Return address = ffffffffc0d69810
[Sun Oct 18 06:37:35 2026] XFS (sdf): Failing async write on buffer block 0x3000062c8. Retrying async write.
...
[Sun Oct 18 06:37:35 2026] XFS (sdf): writeback error on sector 13364188224
[Sun Oct 18 06:37:35 2026] XFS (sdf): writeback error on sector 10741593136
紧接着 RAID 控制器(megaraid_sas)报告物理盘 OFFLINE:
[Sun Oct 18 06:37:40 2026] megaraid_sas 0000:37:00.0: 1840 (845591299s/0x0001/FATAL) - JBOD 15 for PD 0b(e0xfc/s5) is now OFFLINE
[Sun Oct 18 06:39:23 2026] megaraid_sas 0000:37:00.0: 1843 (845591408s/0x0004/CRIT) - Enclosure PD fc(c None/p1) phy bad for slot 5
关键信息:Enclosure 0xfc, Slot 5 这块盘被 RAID 卡标记为 OFFLINE,且 phy bad,提示物理链路/盘体异常。
二、定位步骤
1. 确认故障盘符
从 XFS 日志看出问题设备是 sdf,但 lsblk 已经看不到 sdf,说明盘已经掉线被内核移除:
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10.9T 0 disk /data1
sdb 8:16 0 10.9T 0 disk /data2
sdc 8:32 0 10.9T 0 disk /data3
sdd 8:48 0 10.9T 0 disk /data4
sde 8:64 0 10.9T 0 disk /data5
sdg 8:96 0 10.9T 0 disk /data7 ← sdf 已消失,原本应为 /data6
sdh 8:112 0 10.9T 0 disk /data8
...
可以看到 /data6 对应的盘符缺失,确认 sdf 完全掉线。
2. 新盘插入后识别新设备
更换新盘后,内核重新识别到一块 Toshiba 12T 盘,被分配为 sdn:
[Sun Oct 18 14:28:45 2026] scsi 0:2:21:0: Direct-Access ATA TOSHIBA MG09ACA1 GF07 PQ: 0 ANSI: 6
[Sun Oct 18 14:28:45 2026] sd 0:2:21:0: [sdn] 23437770752 512-byte logical blocks: (12.0 TB/10.9 TiB)
[Sun Oct 18 14:28:45 2026] sd 0:2:21:0: [sdn] Attached SCSI disk
3. 通过 sysfs 找到 SCSI HCTL 地址
ls -l /sys/class/scsi_device/0:2:21:0/device/block/
drwxr-xr-x 7 root root 0 Oct 18 14:20 sdn
确认新盘 sdn 对应 SCSI 地址 0:2:21:0(H:B:T:L)。
4. 获取新盘的型号与序列号
lsblk -d -o NAME,SIZE,MODEL,SERIAL,HCTL /dev/sdn
NAME SIZE MODEL SERIAL HCTL
sdn 10.9T TOSHIBA MG09ACA1 XXXXXXXXXXXX 0:2:21:0
序列号已脱敏,实际定位时用它与备件/出库单核对。
5. 用 storcli 反查物理槽位
将 SCSI 地址与 RAID 卡物理设备对应起来:
./storcli64 /c0/eall/sall show
---------------------------------------------------------------------------------
EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type
---------------------------------------------------------------------------------
251:0 2 Onln 0 2.182 TB SAS HDD N N 512B AL15SEB24EQY U -
251:1 3 Onln 0 2.182 TB SAS HDD N N 512B AL15SEB24EQY U -
252:0 0 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:1 7 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:2 8 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:3 9 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:4 10 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:5 11 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:6 13 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:7 12 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:8 1 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:9 4 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:10 5 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
252:11 6 Onln - 10.914 TB SATA HDD N N 512B TOSHIBA MG09ACA12TEY U JBOD
重点:原故障盘是 Enclosure 252 (0xfc), Slot 5, DID 5,与 dmesg 中 PD 0b(e0xfc/s5) 完全对应。
6. 用 smartctl 查看旧盘健康状态(若能识别)
如果旧盘还能识别(例如插到备机),用 smartctl 看 SMART 数据:
smartctl -a /dev/sdX
故障盘典型特征:
ATA Error Count不为 0,错误日志中存在大量UNC at LBA = 0x...(Uncorrectable Error,无法读取的坏扇区)Reallocated_Sector_Ct、Current_Pending_Sector、Offline_Uncorrectable任意一个非 0 都属于高危SMART overall-health即便显示 PASSED,也不能完全信任,以错误日志和 Pending Sector 为准
本例旧盘的部分 SMART 错误日志(脱敏后):
ATA Error Count: 22 (device log contains only the most recent five errors)
Error 22 occurred at disk power-on lifetime: 10377 hours
40 43 00 a8 8c 57 40 Error: UNC at LBA = 0x00578ca8 = 5737640
多个 UNC 错误说明盘片已经出现物理坏块,无法靠重试恢复。
7. 检查 VD/RAID 状态
./storcli64 /c0/vall show
确认其它 RAID 组(如系统盘 RAID1)状态 Optl,故障只影响 JBOD 直通盘,缩小影响范围。
三、故障定位结论
| 项 | 值 |
|---|---|
| 故障盘符 | /dev/sdf(已掉线) |
| 挂载点 | /data6 |
| RAID 卡物理位置 | Enclosure 252 (0xfc), Slot 5, DID 5 |
| 盘体型号 | TOSHIBA MG09ACA12TEY 12TB |
| 故障原因 | 盘片出现大量 UNC 不可恢复读错误,RAID 卡检测到 phy bad,将盘 OFFLINE |
| 文件系统影响 | XFS 因 metadata 写失败触发 xfs_do_force_shutdown,文件系统只读/卸载保护 |
四、处理流程总结
- 看 dmesg:定位 XFS 报错设备(
sdf)和 RAID 卡报告的物理槽位(EID:Slt) - 看 lsblk:确认盘符消失,比对挂载点空缺确认是哪一块数据盘
- 看 storcli:用
/c0/eall/sall show找对应 EID:Slot 的 State(应为Offln或JBOD异常) - 换盘后认盘:确认新盘被识别为新盘符(本例
sdn) - 序列号比对:用
lsblk -o NAME,SERIAL,HCTL与 storcli 中 EID:Slt 行的 DID/序列号核对,确保换的是正确槽位 - smartctl 验证:旧盘做
smartctl -a留档,确认 UNC/Reallocated Sector 故障证据 - 重建文件系统:新盘
mkfs.xfs,按原/etc/fstab挂载回/data6,恢复业务数据
五、几个关键命令速查
# 1. 内核日志看 XFS / RAID 错误
dmesg -T | egrep -i 'xfs|megaraid|error|offline'
# 2. 当前盘符与挂载
lsblk -o NAME,SIZE,MODEL,SERIAL,HCTL,MOUNTPOINT
# 3. 通过 SCSI 地址查块设备
ls -l /sys/class/scsi_device/*/device/block/
# 4. RAID 卡查看所有物理盘
storcli64 /c0/eall/sall show
# 5. 查看指定槽位详情
storcli64 /c0/e252/s5 show all
# 6. SMART 健康检查
smartctl -a /dev/sdX
smartctl -l error /dev/sdX # 仅看错误日志
# 7. XFS 文件系统修复(掉线恢复后,必要时)
xfs_repair /dev/sdX
六、经验总结
- XFS 的
metadata I/O error+xfs_do_force_shutdown几乎都是底层块设备故障的直接信号,第一时间看 dmesg 里的 megaraid/smart 信息,不要先去修文件系统。 - JBOD 模式下,盘坏了 RAID 卡会直接
OFFLINE,OS 层盘符消失。换盘后盘符可能变化(本例从sdf变为sdn),挂载建议用/dev/disk/by-path/或 UUID。 - SMART 整体
PASSED不代表健康,ATA Error Count+UNC才是金标准。 - 生产环境换盘前,务必用
storcli /c0/eEID/sSlt start locate点亮故障盘定位灯,避免拔错盘。
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Emporer-Linux!
喜欢就支持一下吧