我有一个 RHEL 系统设置为 iSCSI 目标,通过 /etc/tgt/targets.conf 中的以下配置通过一个目标共享 2 个 lun(我按照 /etc/tgt/targets.conf 中注释掉的示例构建):
<target iqn.2014-04.com.local.box:ESXi.target1>
backing-store /dev/ESXi_VG/ESXi_LUN_01 #LUN01
backing-store /dev/ESXi_VG/TEST_LUN_01 #LUN02
</target>
这些旨在作为数据存储共享给一对 ESXi 主机。
我最初在 vg ESXi_VG 上为数据存储创建了一个 4.00 TB LVM 逻辑卷;但我意识到我需要第二个 LUN 才能通过 RDM 对存储在 ESXi 主机本地存储上的虚拟机进行 Iops 测试。为此,我在同一个卷组上创建了第二个 5.00 GB LVM 逻辑卷,并在我上面显示的目标配置中添加了第二个 LUN 的 LUN 条目。然后,我在 ESXi 主机上卸载了 4.00 Tb LUN,并重新启动了 tgtd。
我现在看到了一些奇怪的东西。首先,这是 tgt-admin -s 命令的输出,用于显示当前 LUN:
[root@box ~]# tgt-admin -s
Target 1: iqn.2014-04.com.local.box:ESXi.target1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 5369 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/ESXi_VG/TEST_LUN_01
Backing store flags:
Account information:
ACL information:
ALL
如您所见,只显示了 1 个 LUN,而不是 2 个 - 并且显示的 LUN 只是我后来添加的 5.00 GB LUN。如果我删除或注释掉 LUN 条目,它只会显示 LUN 0、控制器,而不是 LUN 1。
但是,ESXi 仍然可以看到 4.00 TB LUN,并且可以对其进行挂载、格式化等。但它看不到 5.00 GB 分区,尽管它是通过同一个 iSCSI 目标共享的。
我有几个问题:
tgt-admin 是否仅显示当前未连接到启动器的 LUN?如果不是,为什么我的 4.00 TB 数据存储不再显示?
如何让第二个 LUN 出现在 ESXi 中,以便我可以通过 RDM 将其安装到 VM 进行 iops 测试?
答案1
我发现问题出在这里。由于公司合并,我被调离了这个项目,这个项目又落到我的手上,我决定从头开始。这次我创建了一个 LUN,RH_ISCSI_LV_001,并通过 iscsi 守护进程将其共享出去。我能够在 vSphere 中挂载和格式化它。
我再次卸载了 LUN,并停止了 tgtd 进行编辑/etc/tgt/targets.conf
,以添加第二个测试 LUN,我将通过使用 RDM 将其映射到客户机来进行性能测试。当我再次启动 tgtd 时,只显示了 1 个 LUN。
我推测这可能是由于 VMware 格式化 LUN 后 tgtd 无法读取该 LUN 造成的问题,因此我尝试使用 lvremove 来销毁它。它抛出了 ioctl 错误(device-mapper: remove ioctl on failed: Device or resource busy
)并且无法删除。
经过一番挖掘之后,我运行了命令lsof /dev/ESXi_VG/RH_ISCSI_LV_001
并发现 pid 2251 是阻塞进程。很快ps -ef
,我了解到 tgtd 在某个时候没有完全关闭,并且由于没有什么可以阻止第二个 tgtd 进程启动(显然),它保留了 LUN 的“所有权”,从而阻止了我生成的每个连续的 tgtd 进程接触它。快速 kill -9 及service tgtd start
之后,我的两个 LUN 对 ESXi 都是可见的。