ZoL 块设备 (zvol) 导出 iSCSI - LIO 因逻辑单元通信失败/读/写失败而失败

ZoL 块设备 (zvol) 导出 iSCSI - LIO 因逻辑单元通信失败/读/写失败而失败

我有一个使用 ZoL 的 Ubuntu(20.04.2 -5.4.0-52-generic #57-Ubuntu SMP)存储设置,其中加密的块设备通过 iSCSI 导出到另一个 Ubuntu(18.04.5 - 4.15.0-135-generic),在那里它被格式化为 LVM xfs 设备。设置工作正常,直到重新安装服务器(因为它有问题并且无法升级任何软件包)并且客户端进行了 NIC 升级(2 x 10G - LACP)。重新安装后,它工作正常(读写)大约三天,然后失败了。存储挂载点不再可访问,出现 i/o 错误。我检查了连接性(网络和 iscsi),没有问题,iscsi 会话仍然连接并登录。我尝试了 xfs_repair,但它在写入阶段(5、6 和 7)失败了。 zfs 使所有设备都在线,并且执行了清理,没有任何错误,用 smartctl 检查,所有磁盘都没有问题。dd 工作正常(读取和写入),但是任何其他类型的写入都会失败。

在客户端我收到以下错误消息:

[  387.103390] sd 7:0:0:0: [sde] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[  387.103417] sd 7:0:0:0: [sde] tag#0 Sense Key : Not Ready [current] [descriptor]
[  387.103423] sd 7:0:0:0: [sde] tag#0 Add. Sense: Logical unit communication failure
[  387.103437] sd 7:0:0:0: [sde] tag#0 CDB: Write(16) 8a 00 00 00 00 00 00 00 08 08 00 00 00 01 00 00

存储上的配置如下:

targetcli shell version 2.1.51
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- name-disk ................................... [/dev/zvol/tank/dataset-name/name-iscsi (67.0TiB) write-thru activated]
  | |   o- alua ................................................................................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | o- fileio ................................................................................................. [Storage Objects: 0]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 1]
  | o- iqn.2003-01.org.linux-iscsi.storage-name.x8664:sn.0e03591de8ee .............................................. [TPGs: 1]
  |   o- tpg1 .................................................................................................. [gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 0]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 .............................. [block/name-disk (/dev/zvol/tank/dataset-name/name-iscsi) (default_tg_pt_gp)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ..................................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]
  o- vhost ............................................................................................................ [Targets: 0]
  o- xen-pvscsi ....................................................................................................... [Targets: 0]

对于每个写入命令,在存储上我都会在 dmesg 中看到类似这样的错误:

[  316.061150] bio error: 00000000970258be,  err: 3
[  316.061153] bio error: 00000000a3caa1b4,  err: 3
[  316.061161] bio error: 00000000b8d1298b,  err: 3
[  316.061166] bio error: 000000001e0ef7b8,  err: 3
[  316.061168] bio error: 00000000a6d861a8,  err: 3
[  316.061185] bio error: 00000000a58973e3,  err: 3
[  316.061206] bio error: 00000000c05c3fc4,  err: 3
[  316.061210] bio error: 000000000ddb63f1,  err: 3
[  316.061213] bio error: 0000000060438ff5,  err: 3
[  316.061218] bio error: 00000000cd469a8e,  err: 3
[  316.061223] bio error: 000000000b873ec9,  err: 3
[  316.061227] bio error: 00000000730b5a09,  err: 3
[  316.061230] bio error: 00000000652b9a7c,  err: 3
[  316.061233] bio error: 00000000969b8d13,  err: 3
[  316.061237] bio error: 0000000079fd9679,  err: 3

在客户端我有这个版本:

 iscsiadm --version
iscsiadm version 2.0-874

我还尝试使用 Ubuntu 20.04 将 iscsi 目标导出到其他客户端,但遇到了同样的问题,这让我认为它来自存储。我从保存文件中恢复了 targetcli 配置,甚至重新安装了存储,但无济于事。我已经在线搜索了一个多星期,但找不到解决方案。我还发现我有这个警告:

WARNING: PV /dev/PV-name in VG VG-name is using an old PV header, modify the VG to update.

所以我尝试了:

$vgck --updatemetadata VG

它从 VG 中删除了元数据,但由于同样的问题,无法再写入元数据。

其他可能不相关的检查,我在存储上设置了 MTU=9000,并将其从 netplan 配置中删除。

如果我遗漏了什么,请告诉我。任何想法我都感激不尽。

答案1

我终于发现了导致这种情况的原因。显然是配额被绕过了,存储已满,我不知道为什么,也不知道具体是怎么回事。我添加了另一个 zfs 池(将磁盘移到更大的机箱中),从原始池中删除了 refreserved,这样我就可以对其进行快照,然后 zfs 将快照发送到新池。此后,我能够修复 LVM 和 XFS 元数据,并重新安装包含数据的块设备。

相关内容