linux - 获取iscsi设备的目标IP地址

标签 linux iscsi linux-scst

假设我有一个 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 并在目标地址的输出中 grep 。

# 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 $?

关于linux - 获取iscsi设备的目标IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44154274/

相关文章:

linux - open-iscsi 是如何用 3.x 内核编译的?

networking - iSCSI 数据包 header

linux - 是否可以获取另一台 Linux 机器的 iSCSI 启动器 IQN?

linux - 加载内核模块时出现未知符号

linux - 根据大小和出现次数将文件拆分为多个文件

linux - 在 Ubuntu 中将目录添加到 PATH

c# - Linux 下 AutoResetEvent 的 C++ 等价物是什么?

java - JAVA中的多线程