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 主機本地儲存上的 vm 進行 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 測試?
這就是我發現的問題所在。由於公司合併而被取消該項目後,它又被扔回了我的盤子,我決定從頭開始。這次我創建了一個 LUN,RH_ISCSI_LV_001,並通過 iscsi 守護程序共享它。我能夠在 vSphere 中掛載和格式化它。
我再次解除安裝了 LUN 並停止 tgtd 進行編輯
/etc/tgt/targets.conf
以添加第二個測試 LUN,我將通過將其映射到使用 RDM 的來賓來進行性能測試。當我再次啟動 tgtd up 時,只顯示了 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 程序觸摸它。快速殺死 -9 及service tgtd start
更高版本,我的兩個 LUN 對 ESXi 都是可見的。