获取 iSCSI 设备的目标 IP 地址

Posted

技术标签:

【中文标题】获取 iSCSI 设备的目标 IP 地址【英文标题】:Get target IP address of an iscsi device 【发布时间】:2017-05-24 09:24:26 【问题描述】:

假设我有一个 iSCSI 设备/dev/sdat,我怎么知道它的目标 IP 地址?

目标驱动是 SCST,启动器是 iSCSI。我只知道一个名为/dev/sdat 的设备,仅此而已。那么如何获取目标的IP地址呢?

【问题讨论】:

【参考方案1】:

好吧,我对此并不感到自豪,但它可以完成工作。至少对于完成工作的一些定义。

基本思想是这样的。您可以从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 $?

【讨论】:

我希望我知道如何在 Windows 上执行此操作

以上是关于获取 iSCSI 设备的目标 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

Target实现(IP SAN)

Linux从入门到精通——iscsi

win7自带的iSCSI发起程序能否挂载IP-San(RAID5)LINUX系统?

Linux下配置iSCSI服务器,实现资源共享

为ESXI 添加ISCSI存储设备 Linux服务器系统

ISCSI共享磁盘