VPLEX:由于存储阵列的 SCSI 检查条件 3/11/0,磁盘标记为硬件无效
Summary: 由于来自底层存储阵列的 scsi 感知代码 3/11/0,VPLEX 将磁盘标记为无效。
Symptoms
当 VPLEX 对底层存储阵列 LUN 执行读取请求,并且阵列无法在 LUN 的该块上处理 I/O,这会触发 3/11/0 检查条件(阵列上有坏块)时触发此事件。
这种情况常见于读取 I/O 繁重的情况,例如:
- VPLEX 数据区/设备迁移
- 备份作
- 数据库完整性检查
VPLEX 存储卷标记为“hardware-dead”,但在存储阵列接口上显示运行状况良好。
cli 命令的输出示例 ll /clusters/cluster-2/storage-elements/storage-volumes/storage-volume name>
VPlexcli:/> ll /clusters/cluster-2/storage-elements/storage-volumes/VNX_LUN_25
/clusters/cluster-2/storage-elements/storage-volumes/VNX_LUN_25:
Name Value
----------------------------- ------------------------------------------------
application-consistent false
block-count 1073741824
block-size 4K
capacity 4T
description -
free-chunks []
health-indications [hardware dead] <<
health-state critical-failure <<
io-status dead <<
itls 0x50001442a03c0810/0x5006016b08603879/9,
0x50001442a03c0811/0x5006016308603879/9,
largest-free-chunk 0B
locality -
operational-status error <<
provision-type legacy
storage-array-name EMC-CLARiiON-123456789
storage-volumetype normal
system-id VPD83T3:xxxxxxxxxxxxxxxxxxxxx
thin-capable false
thin-rebuild true
total-free-space 0B
underlying-storage-block-size 512
use unusable <<
used-by [extent_VNX_LUN_25]
vendor-specific-name DGC
VPLEX 设备/数据区迁移(移动作业)卡在某个百分比处。
cli 命令的输出示例 ll data-migrations/device-migrations/<device_migration_name>
VPlexcli:/> ll data-migrations/device-migrations/D__Migrate_LUN_1
/data-migrations/device-migrations/D__Migrate_LUN_1:
Name Value
--------------- ----------------------------
from-cluster cluster-1
percentage-done 7
source device_VNX_LUN25_1
source-exported -
start-time -
status error <<
target device_SYMM_DEV1234_1
target-exported -
to-cluster cluster-2
transfer-size 2M
type full
主机看到 VPLEX 存储离线或标记为失效,VPLEX 存储卷也被标记为严重故障或硬件失效。
固件日志中记录的示例数据,amf/45 disk VPD83T3:xxxxxxxxxxxxxxx: read failure: marking this in-use disk dead
VPLEX 固件日志显示 3/11/0 的流式或间歇性 scsi/27(检查条件)及 SCSI 感知代码条目,转换为”Medium Error - unrecovered read error“
事件期间固件日志中注明的输出示例,2016/06/09 02:46:23.67: scsi/27 tgt VPD83T3:6006016011663200b058c25a984de511 cmd 0x28 status 0x2 valid 0 resp 0x70 seg 0x0 bits 0x0 key 0x3 info 0x0 alen 10 csi 0x0 asc 0x11 ascq 0x0 fru 0x0 sks 0x0
2016/06/09 02:46:23.68: scsi/27 tgt VPD83T3:6006016011663200b058c25a984de511 cmd 0x28 status 0x2 valid 0 resp 0x70 seg 0x0 bits 0x0 key 0x3 info 0x0 alen 10 csi 0x0 asc 0x11 ascq 0x0 fru 0x0 sks 0x0
2016/06/09 02:46:23.69: scsi/27 tgt VPD83T3:6006016011663200b058c25a984de511 cmd 0x28 status 0x2 valid 0 resp 0x70 seg 0x0 bits 0x0 key 0x3 info 0x0 alen 10 csi 0x0 asc 0x11 ascq 0x0 fru 0x0 sks 0x0
要确认此问题,必须始终满足以下条件:key = 0x3asc = 0x11ascq = 0x0
Cause
当 VPLEX 向存储阵列发送 I/O 读取请求 (0x28) 时,阵列无法成功处理 I/O 请求,并使用检查条件 3/11/0 响应“无法恢复的读取错误”。
VPLEX 尝试从存储阵列上的坏块读取,由于存储阵列无法处理此 I/O,VPLEX 会将存储标记为无效。
这不是特定于阵列或阵列代码的。
导致这种情况的原因在 VPLEX 外部,是具有 LUN 的存储阵列上的问题。
Resolution
向 VPLEX 发送 scsi 检查条件 3/11/0 的存储阵列必须由相应的阵列供应商进行调查。由于存储阵列上的“无法恢复读取”问题,阵列无法处理读取 I/O 请求,从而触发此问题。
必须联系 VNX 支持。
可以在 VPLEX 管理服务器上运行以下 cli 命令,以获取受 3/11/0 检查条件影响的前 50 个逻辑单元的列表:grep "key 0x3 " /var/log/VPlex/cli/firmware.log_* | awk '{print $3,$5,$18,$19,$26,$27,$28,$29}' | sort | uniq -c | sort -nr | head -50
示例:
service@ManagementServer:~> grep "key 0x3 " /var/log/VPlex/cli/firmware.log_* | awk '{print $3,$5,$18,$19,$26,$27,$28,$29}' | sort | uniq -c | sort -nr | head -50
388408 scsi/27 VPD83T3:60060160116632000000000000000001 key 0x3 asc 0x11 ascq 0x0
45135 scsi/27 VPD83T3:60060160116632000000000000000002 key 0x3 asc 0x11 ascq 0x0
44451 scsi/27 VPD83T3:60060160116632000000000000000003 key 0x3 asc 0x11 ascq 0x0
35412 scsi/27 VPD83T3:60060160116632000000000000000004 key 0x3 asc 0x11 ascq 0x0
30158 scsi/27 VPD83T3:60060160116632000000000000000005 key 0x3 asc 0x11 ascq 0x0
24589 scsi/27 VPD83T3:60060160116632000000000000000006 key 0x3 asc 0x11 ascq 0x0
21579 scsi/27 VPD83T3:60060160116632000000000000000007 key 0x3 asc 0x11 ascq 0x0
如果这是非 EMC 阵列,请联系相应的阵列供应商,以解决存储阵列上存在的问题。
Additional Information
这是存储阵列上的块层问题,只能通过对存储阵列本身采取措施来解决。
这不是 VPLEX 问题,而是 VPLEX 报告从后端阵列看到的症状。
在此处
使用“storage-volume resurrect --force”。此命令强制无效存储卷在 VPLEX 中显示为“活动”,而不考虑其当前 IO 状态或底层存储阵列上的问题。
此命令强制存储卷重新联机,直到底层存储阵列的下一个 IO 失败。
当主机请求底层存储阵列上发生 3/11/0 问题的同一数据块时,存储卷将再次标记为无效。
这是预期行为,并不表示存在 VPLEX 问题。
直接从存储阵列向主机呈现有问题的存储卷(绕过 VPLEX)可能会让主机使用一些数据。但是,此作会直接向主机呈现可能的数据损坏。主机继续出现 3/11/0 检查条件问题,无法从特定数据块读取数据。