29.12. iSCSI Initiator与Target设定

iSCSI是一种通过网络共享存储的方式。与在文件系统级别工作的NFS不同,iSCSI在块设备级别工作。

iSCSI术语中,共享存储的系统被称为目标(target)。该存储可以是一个物理磁盘,也可以是代表多个磁盘或物理磁盘的一部分的区域。例如,如果磁盘被格式化为ZFS,则可以创建一个 zvol 作为iSCSI存储。

访问iSCSI存储的客户端称为initiators。对于启动程序,通过iSCSI可用的存储显示为未经格式化的原始磁盘,称为LUN。磁盘的设备节点显示在/dev/中,磁盘在使用前需格式化并挂载。

FreeBSD 提供了一个原生的的、基于内核的iSCSI目标和开始器。本节介绍如何将 FreeBSD 系统配置为目标或发起者。

29.12.1. 设定iSCSI Target

要配置iSCSI目标,请创建/etc/ctl.conf配置文件,向/etc/rc.conf添加一行,以确保ctld(8)守护进程在系统启动时自动启动,然后启动守护进程。

以下是 /etc/ctl.conf 配置文件的简单示例。关于此配置文件的更多详情请参阅ctl.conf(5)

portal-group pg0 {
	discovery-auth-group no-authentication
	listen 0.0.0.0
	listen [::]
}

target iqn.2012-06.com.example:target0 {
	auth-group no-authentication
	portal-group pg0

	lun 0 {
		path /data/target0-0
		size 4G
	}
}

第一个条目定义了pg0端口组。端口子组定义了 ctld(8)守护进程将的监听地址地址。discovery-auth-group no-authentication条目表示允许所有 initiator 在没有验证的情况下启用iSCSI目标发现。第三行和第四行配置ctld(8)以监听所有IPv4listen 0.0.0.0.0)和IPv6 (listen [::])地址,默认端口为3260。

没有必要定义一个门户组,因为有一个内置的门户组叫做default。在这种情况下,defaultpg0的区别在于:default,目标发现总是被拒绝,而pg0,目标发现总是被允许的。

第二个条目定义了一个单一目标。目标有两种可能的含义:服务于iSCSI的机器或命名的LUNs组。这个例子使用了后一种含义,其中iqn.2012-06.com.examplease:target0是目标名称。这个目标名称适用于测试目的。实际使用时,将com.example改为真正的域名,反过来。2012-06表示获得该域名控制权的年月,target0可以是任意值。在这个配置文件中可以定义任意数量的目标。

auth-group no-authentication 行允许所有发起者连接到指定目标,而 portal-group pg0 使得目标可以通过 pg0 访问。

下一节定义了LUN。对于启动器,每个 LUN将作为一个独立的磁盘设备显示。可以为每个目标定义多个 LUN。每个 LUN都由一个数字标识,其中LUN0 是强制性的。path /data/target0-0行定义了支持LUN的文件或 zvol 的完整路径。在启动 ctld(8)之前,该路径必须存在。第二行是可选的,指定了LUN的大小。

接下来,要确保 ctld(8)守护进程在启动时启动,请在/etc/rc.conf中添加这一行:

ctld_enable="YES"

使用此命令启动ctld(8)

# service ctld start

ctld(8)守护进程启动时,它会读取/etc/ctl.conf。如果该文件在守护进程启动后被编辑,请使用此命令使更改立即生效:

# service ctld reload

29.12.1.1. 认证

前面的例子本质上是不安全的,因为它不使用身份验证,允许任何人完全访问所有目标。若要要求使用用户名和密码来访问目标,请修改配置如下:

auth-group ag0 {
	chap username1 secretsecret
	chap username2 anothersecret
}

portal-group pg0 {
	discovery-auth-group no-authentication
	listen 0.0.0.0
	listen [::]
}

target iqn.2012-06.com.example:target0 {
	auth-group ag0
	portal-group pg0
	lun 0 {
		path /data/target0-0
		size 4G
	}
}

auth-group部分定义了用户名和密码。一个试图连接到iqn.2012-06.com.example:target0的发起者必须首先指定一个已定义的用户名和密码。但是,目标发现仍然允许在没有验证的情况下进行。要启用目标发现验证,请将discovery-auth-group设置为定义的auth-group名称,而不是no-authentication

常见的做法是为每个发起者定义一个单一的导出目标。作为上述语法的速记,可以在目标条目中直接指定用户名和密码:

target iqn.2012-06.com.example:target0 {
	portal-group pg0
	chap username1 secretsecret

	lun 0 {
		path /data/target0-0
		size 4G
	}
}

29.12.2. 设定iSCSI Initiator

注意:

FreeBSD 从 10.0-RELEASE 起开始支持本节中描述的iSCSI启动器。若需使用旧版本中的iSCSI启动器,请参阅iscontrol(8)

iSCSI启动器要求iscsid(8)守护进程正在运行。这个守护进程不使用配置文件。要在启动时自动启动它,请在/etc/rc.conf中添加这一行:

iscsid_enable="YES"

现在执行此命令启动iscsid(8)

# service iscsid start

可以用/etc/iscsi.conf配置文件连接到目标,也可以不使用。本节演示了两种连接类型。

29.12.2.1. 不使用配置文件联机到Target

要将启动器连接到单个目标,请指IP地址和目标的名称:

# iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0

要验证连接是否成功,请直接运行iscsictl,不加任何参数。输出结果应该与此类似:

Target name                                     Target portal   State
iqn.2012-06.com.example:target0                 10.10.10.10     Connected: da0

在这个例子中,iSCSI会话已成功建立,其中/dev/da0代表附加的LUN。如果iqn.2012-06.com.examplease:target0目标导出多个LUN,则在该部分的输出中会显示多个设备节点:

Connected: da0 da1 da2.

任何错误都会在输出中以及系统日志中报告。例如,此消息通常意味着iscsid(8)守护进程没有运行:

Target name                                     Target portal   State
iqn.2012-06.com.example:target0                 10.10.10.10     Waiting for iscsid(8)

下面的信息可提示网络问题,例如,错误的IP地址或端口:

Target name                                     Target portal   State
iqn.2012-06.com.example:target0                 10.10.10.11     Connection refused

这条消息表示目标名字(target name)错误:

Target name                                     Target portal   State
iqn.2012-06.com.example:target0                 10.10.10.10     Not found

此消息表示目标需要身份验证:

Target name                                     Target portal   State
iqn.2012-06.com.example:target0                 10.10.10.10     Authentication failed

以下规则用于指定CHAP用户名和密码:

# iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecret

29.12.2.2. 使用配置文件联机到Target

若需使用配置文件进行连接,请创建 /etc/iscsi.conf ,内容如下:

t0 {
	TargetAddress   = 10.10.10.10
	TargetName      = iqn.2012-06.com.example:target0
	AuthMethod      = CHAP
	chapIName       = user
	chapSecret      = secretsecret
}

t0 为配置文件部分指定了一个昵称。它将被启动器用来指定要使用的配置。其他行指定了连接时要使用的参数。TargetAddressTargetName是强制性的,而其他选项是可选的。在这个例子中,CHAP用户名和密码被显示出来。

使用昵称链接:

# iscsictl -An t0

或使用以下命令连接到配置文件中的所有目标:

# iscsictl -Aa

要使启动器自动连接到/etc/iscsi.conf中的所有目标,请在/etc/rc.conf中添加以下内容:

iscsictl_enable="YES"
iscsictl_flags="-Aa"

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.