我有一个使用 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 元数据,并重新安装包含数据的块设备。