0
假設我有一個iSCSI設備/dev/sdat
,我如何知道它的目標IP地址?獲取iscsi設備的目標IP地址
目標驅動程序是SCST,啓動程序是iSCSI。我所知道的只是一個名爲/dev/sdat
的設備,僅此而已。那麼如何獲得它的目標IP地址呢?
假設我有一個iSCSI設備/dev/sdat
,我如何知道它的目標IP地址?獲取iscsi設備的目標IP地址
目標驅動程序是SCST,啓動程序是iSCSI。我所知道的只是一個名爲/dev/sdat
的設備,僅此而已。那麼如何獲得它的目標IP地址呢?
嗯,我並不爲此感到自豪,但它完成了工作。至少對於完成工作的一些定義。
其基本思想是這樣的。您可以從lsscsi -t
的輸出中獲得目標IQN。 (您將需要lsscsi
程序,如果你不已經擁有了它,我想你會發現它在任何種類的SCSI環境是必不可少的。)
# lsscsi -t
[2:0:0:0] disk iqn.2009-12.com.blockbridge:t-pjxfzufjkp-illoghjk,t,0x1 /dev/sda
[3:0:0:0] disk iqn.2009-12.com.blockbridge:t-pjxfzuecga-eajejghg,t,0x1 /dev/sdb
[4:0:0:0] disk iqn.2009-12.com.blockbridge:t-pjxfzufjjo-pokqaja,t,0x1 /dev/sdd
[5:0:0:0] disk iqn.2009-12.com.blockbridge:t-pjxfzufnfg-cqikkgl,t,0x1 /dev/sdc
然後,你可以喂到IQN的使用iscsiadm目標並在輸出中尋找目標地址。
# iscsiadm -m node -T iqn.2009-12.com.blockbridge:t-pjxfzufjkp-illoghjk | egrep 'node.conn.+address'
node.conn[0].address = 172.16.5.148
把它放在一起,你會得到這樣的腳本。當然,這是缺少各種錯誤處理,並且可能不處理大約23種不同的情況。但是,嘿......它適用於我的環境!
#!/usr/bin/bash
if [[ -z $1 ]]; then
>&2 echo "Usage: devip.sh <device>"
exit 1
fi
iqn=$(sudo lsscsi -t | grep "$1" | grep iqn | awk '{print $3}' | awk -F , '{print $1}')
if [[ -z "$iqn" ]]; then
>&2 echo "IQN not found for \"$1\"."
exit 1
fi
sudo iscsiadm -m node -T $iqn | egrep 'node.conn.+address' | awk -F ' *= *' '{print $2}'
exit $?