RHEL 6 iSCSI LUN

RHEL 6 iSCSI LUN

我有一个 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 目标共享的。

我有几个问题:

  1. tgt-admin 是否仅显示当前未连接到启动器的 LUN?如果不是,为什么我的 4.00 TB 数据存储不再显示?

  2. 如何让第二个 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 都是可见的。

相关内容