说明:文中主机名、序列号、盘符等均已做脱敏处理,示例盘符与序列号请替换为实际环境值。

一、故障现象

某天收到告警,业务目录读写异常。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,文件系统只读/卸载保护

四、处理流程总结

  1. 看 dmesg:定位 XFS 报错设备(sdf)和 RAID 卡报告的物理槽位(EID:Slt)
  2. 看 lsblk:确认盘符消失,比对挂载点空缺确认是哪一块数据盘
  3. 看 storcli:用 /c0/eall/sall show 找对应 EID:Slot 的 State(应为 Offln 或 JBOD 异常)
  4. 换盘后认盘:确认新盘被识别为新盘符(本例 sdn)
  5. 序列号比对:用 lsblk -o NAME,SERIAL,HCTL 与 storcli 中 EID:Slt 行的 DID/序列号核对,确保换的是正确槽位
  6. smartctl 验证:旧盘做 smartctl -a 留档,确认 UNC/Reallocated Sector 故障证据
  7. 重建文件系统:新盘 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 点亮故障盘定位灯,避免拔错盘。
文章作者: emporer
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux!
喜欢就支持一下吧