获取 iscsi 设备的目标 IP 地址



假设我有一个iSCSI设备/dev/sdat,我怎么知道它的目标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 $?

最新更新