Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 储存管理指南 / 网络储存 / 经由 IP 网络的大容量储存:iSCSI
Applies to SUSE Linux Enterprise Server 15 SP2

14 经由 IP 网络的大容量储存:iSCSI

提供充足的磁盘容量是计算机中心或支持服务器的任何站点的主要任务之一。通常为此目的使用光纤通道。iSCSI(因特网 SCSI)解决方案提供了光纤通道的低成本备用方案,可以充分利用商品服务器和以太网联网设备。Linux iSCSI 提供 iSCSI 发起端和 iSCSI LIO 目标软件,用于将 Linux 服务器连接到中心储存系统。

使用 iSNS 服务器的 iSCSI SAN
Figure 14.1: 使用 iSNS 服务器的 iSCSI SAN
Note
Note: LIO

LIO (http://linux-iscsi.org) 是 Linux 适用的标准开源多协议 SCSI 目标。LIO 以 Linux 内核 2.6.38 及更高版本替代 STGT(SCSI 目标)框架成为 Linux 中的标准统一储存目标。在 SUSE Linux Enterprise Server 12 中,iSCSI LIO 目标服务器替换了先前版本中的 iSCSI 目标服务器。

iSCSI 是一种储存联网协议,可简化在块储存设备和服务器之间通过 TCP/IP 网络进行的 SCSI 包数据传输。iSCSI 目标软件在目标服务器上运行,并将逻辑单元定义为 iSCSI 目标设备。iSCSI 发起端软件在不同服务器上运行并连接到目标设备,以使此服务器上的储存设备可用。

iSCSI LIO 目标服务器与 iSCSI 发起端服务器之间通过在 LAN 的 IP 级别上发送 SCSI 包来进行通讯。当在发起端服务器上运行的应用程序启动针对 iSCSI LIO 目标设备的查询时,操作系统会生成必要的 SCSI 命令。然后,SCSI 命令会嵌入到 IP 包中并在需要时由软件进行加密,此软件通常为 iSCSI 发起端。包经由内部 IP 网络传输到相应的 iSCSI 远程站,该站称为 iSCSI LIO 目标服务器(简称为 iSCSI 目标)。

许多储存解决方案允许通过 iSCSI 进行访问,但是也可以运行提供 iSCSI 目标的 Linux 服务器。在此情况下,对已针对文件系统服务优化过的 Linux 服务器进行设置是很重要的。有关 RAID 的更多信息,请参见第 7 章 “软件 RAID 配置

14.1 安装 iSCSI LIO 目标服务器和 iSCSI 发起端

系统会默认安装 iSCSI 发起端(包 open-iscsiyast2-iscsi-client),iSCSI LIO 目标包则需要手动安装。

Important
Important: 发起端和目标位于同一服务器

尽管可以在同一系统中运行发起端和目标,但不建议采用此设置。

要安装 iSCSI LIO 目标服务器,请在终端控制台中运行以下命令:

tux > sudo zypper in yast2-iscsi-lio-server

如果您需要安装 iSCSI 发起端或任何依赖项,请运行命令 sudo zypper in yast2-iscsi-client

也可以使用 YaST 软件管理模块来进行安装。

除了上述包之外,任何额外需要的包将由安装程序自动提取,或者在您第一次运行相应的 YaST 模块时安装。

14.2 设置 iSCSI LIO 目标服务器

本章说明如何使用 YaST 配置 iSCSI LIO 目标服务器以及如何设置 iSCSI LIO 目标设备。您可以使用任何 iSCSI 发起端访问目标设备。

14.2.1 iSCSI LIO 目标服务启动和防火墙设置

iSCSI LIO 目标服务默认配置为手动启动。您可以将该服务配置为在引导时自动启动。如果服务器上使用防火墙,并且您想让 iSCSI LIO 目标对其他计算机可用,则必须为想要用于目标访问的每一个适配器打开防火墙中的端口。TCP 端口 3260 是 IANA(因特网号码分配机构)所定义的 iSCSI 协议的端口号。

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到服务选项卡。

    Image
  3. 服务启动下,指定 iSCSI LIO 目标服务的启动方式:

    • 引导时:.  服务器重启动时自动启动服务。

    • 手动:.  (默认)服务器重启动之后,您必须运行 sudo systemctl start targetcli 命令来手动启动该服务。只有启动服务后才可以使用目标设备。

  4. 如果在服务器上使用防火墙,并且希望 iSCSI LIO 目标对其他计算机可用,请为要用于目标访问的每个适配器接口打开防火墙中的端口 3260。如果端口对于所有网络接口均为关闭,则其他计算机将无法使用 iSCSI LIO 目标。

    如果您未在服务器上使用防火墙,则防火墙设置会被禁用。在此情况下,请跳过下面的步骤,并单击完成离开配置对话框,或切换到另一个选项卡继续配置。

    1. 服务选项卡上,选中打开防火墙中的端口复选框,以启用防火墙设置。

    2. 单击防火墙细节,查看或配置要使用的网络接口。列出所有可用的网络接口,并且默认全部选中。取消选择应打开的端口上的所有接口。单击确定保存您的设置。

  5. 单击完成,以保存和应用 iSCSI LIO 目标服务设置。

14.2.2 配置 iSCSI LIO 目标和发起端发现的身份验证

iSCSI LIO 目标服务器软件支持 PPP-CHAP(点对点协议-质询握手身份验证协议),该协议是 Internet 工程任务组 (IETF) RFC 1994 (https://tools.ietf.org/rfc/rfc1994.txt) 中定义的一种三向身份验证方法。服务器使用此身份验证方法来发现 iSCSI LIO 目标与发起端,并不用于访问目标上的文件。如果不希望限制对发现的访问,则使用无身份验证不进行发现身份验证选项默认处于启用状态。不需要经过身份验证,此服务器上的所有 iSCSI LIO 目标都可由同一网络上的任何 iSCSI 发起端发现。

如果是为了更为安全的配置而需要身份验证,则可以使用传入身份验证、传出身份验证,或二者皆使用。按发起端进行身份验证要求 iSCSI 发起端证明它有权针对 iSCSI LIO 目标运行发现。发起端必须提供传入用户名和口令。按目标进行身份验证要求 iSCSI LIO 目标向发起端证明它是预期的目标。iSCSI LIO 目标必须向 iSCSI 发起端提供传出用户名和口令。用于传入和传出发现的口令必须不同。如果启用发现身份验证,则其设置将应用到所有 iSCSI LIO 目标组。

Important
Important: 安全性

为安全起见,建议您对生产环境中的目标与发起端发现使用身份验证。

配置 iSCSI LIO 目标的身份验证自选设置:

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到全局选项卡。

    Image
  3. 身份验证默认处于禁用状态(不进行发现身份验证)。要启用身份验证,请选择按发起端进行身份验证和/或传出身份验证

  4. 提供所选身份验证方法的身份凭证。传入和传出发现的用户名和口令对必须不同。

  5. 单击完成保存并应用设置。

14.2.3 准备储存空间

在为 iSCSI 目标服务器配置 LUN 之前,必须准备好要使用的储存空间。可以将整个未格式化的块设备用作单个 LUN,也可以将一台设备划分为数个未格式化的分区,并将每个分区用作单独的 LUN。iSCSI 目标配置会将 LUN 导出到 iSCSI 发起端。

您可以使用 YaST 中的分区程序或命令行来设置分区。有关细节,请参见第 10.1 节 “使用专家分区程序”。iSCSI LIO 目标可将未格式化的分区用于 Linux、Linux LVM 或 Linux RAID 文件系统 ID。

Important
Important: 不要装入 iSCSI 目标设备

设置完用作 iSCSI 目标的设备或分区后,切勿通过其本地路径直接对其进行访问。不要在目标服务器上装入分区。

14.2.3.1 在虚拟环境中对设备分区

您可以将虚拟机 guest 服务器作为 iSCSI LIO 目标服务器使用。本节说明如何给 Xen 虚拟机指派分区。您还可以使用 SUSE Linux Enterprise Server 支持的其他虚拟环境。

在 Xen 虚拟环境中,必须将要用于 iSCSI LIO 目标设备的储存空间指派给 guest 虚拟机,然后作为 guest 环境中的虚拟磁盘访问该空间。每个虚拟磁盘都可以是一个物理块设备,如整个磁盘、分区或卷,或者可以是一个基于文件的磁盘映像,其中虚拟磁盘是 Xen 主机服务器上较大物理磁盘上的单个映像文件。为了获得最佳性能,请从物理磁盘或分区创建每个虚拟磁盘。为 guest 虚拟机设置完虚拟磁盘后,请启动 guest 服务器,然后按照物理服务器所用的同一过程将新的空虚拟磁盘配置为 iSCSI 目标设备。

在 Xen 主机服务器上创建基于文件的磁盘映像,然后将其指派给 Xen guest 服务器。默认情况下,Xen 将基于文件的磁盘映像储存在 /var/lib/xen/images/VM_NAME 目录中,其中 VM_NAME 是虚拟机的名称。

14.2.4 设置 iSCSI LIO 目标组

您可以使用 YaST 配置 iSCSI LIO 目标设备。YaST 使用 lio-utils 软件提供的 API。iSCSI LIO 目标可使用采用 Linux、Linux LVM 或 Linux RAID 文件系统 ID 的分区。

Important
Important: 分区

在开始之前,请选择要用于后端储存的分区。不一定要格式化这些分区:iSCSI 客户端可以在连接分区时进行格式化,并重写所有现有格式。

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到目标选项卡。

    Image
  3. 单击添加,然后定义新的 iSCSI LIO 目标组以及设备:

    iSCSI LIO 目标软件将自动填写 目标标识符门户组IP 地址以及端口号字段。默认会选择使用身份验证

    1. 如果您有多个网络接口,请使用 IP 地址下拉框选择要用于此目标组的网络接口的 IP 地址。要使服务器在所有地址下都可访问,请选择绑定所有 IP 地址

    2. 如果您不想对此目标组进行发起端身份验证,请取消选择使用身份验证(不建议此做法)。

    3. 单击添加。输入设备或分区的路径,或单击浏览添加该路径。也可以指定名称,然后单击确定。系统将自动生成 LUN 号(从 0 开始)。如果将该字段保留为空,则会自动生成名称。

    4. (可选)重复前面的步骤将目标添加到此目标组。

    5. 将所有所需的目标添加到该组后,单击下一步

  4. 修改 iSCSI 目标发起端设置页面上,配置允许访问目标组中 LUN 的发起端的信息:

    Image

    在为目标组指定了至少一个发起端后,编辑 LUN编辑身份验证删除复制按钮才会启用。您可以使用添加复制来为目标组添加发起端:

    修改 iSCSI 目标:选项
    • 添加:.  为选中的 iSCSI LIO 目标组添加新的发起端项。

    • 编辑 LUN:.  配置将 iSCSI LIO 目标组中的哪些 LUN 映射到选定发起端。您可以将分配的每一个目标都映射到某个首选的发起端。

    • 编辑身份验证:.  为选定发起端配置首选身份验证方法。您可以指定无身份验证,也可以配置传入身份验证、传出身份验证或二者皆配置。

    • 删除:.  将选定发起端项从分配给目标组的发起端列表中去除。

    • 复制:.  添加具有与选定发起端项相同 LUN 映射和身份验证设置的新发起端项。如此,您便可以轻松地将相同的共享 LUN 逐一分配给群集中的每一个节点。

    1. 单击添加,指定发起端名称,选中或取消选中从 TPG 中导入 LUN 复选框,然后单击确定保存设置。

    2. 选择发起端项,单击编辑 LUN,修改 LUN 映射,以指定将 iSCSI LIO 目标组中的哪些 LUN 分配给选定发起端,然后单击确定保存更改。

      如果 iSCSI LIO 目标组由多个 LUN 组成,您可以将一个或多个 LUN 分配给选定发起端。默认情况下,会将该组中的每个可用 LUN 都指派给某个发起端 LUN。

      要修改 LUN 分配,请完成以下一项或多项操作:

      • 添加:.  单击添加创建新的发起端 LUN 项,然后使用更改下拉框将一个目标 LUN 映射到该项。

      • 删除:.  选择发起端 LUN 项,然后单击删除去除目标 LUN 映射。

      • 更改:.  选择发起端 LUN 项,然后使用更改下拉框选择要与之映射的目标 LUN。

      典型的分配计划包括:

      • 单个服务器列为一个发起端。将目标组中的所有 LUN 分配给它。

        您可以使用此分组策略,为指定服务器逻辑分组 iSCSI SAN 储存。

      • 多个独立服务器列为多个发起端。将一个或多个目标 LUN 分配给每一个服务器。将每个 LUN 只分配给一个服务器。

        您可以使用此分组策略,为数据中心中的指定部门或服务类别逻辑分组 iSCSI SAN 储存。

      • 群集的每个节点列为一个发起端。将所有共享的目标 LUN 分配给每一个节点。所有节点都将连接到设备,但对于大多数文件系统,群集软件会锁定设备不让它们访问,并且一次只在一个节点上装入该设备。共享的文件系统(例如 OCFS2)可让多个节点同时装入相同的文件结构,并以读写访问权打开相同文件。

        您可以使用此分组策略,为指定服务器群集逻辑分组 iSCSI SAN 储存。

    3. 选择发起端项,单击编辑身份验证,指定发起端的身份验证设置,然后单击确定保存设置。

      您可以要求不进行发现身份验证,也可以配置按发起端进行身份验证和/或传出身份验证。您仅可为每个发起端指定一对用户名和口令。对于发起端的传入和传出身份验证,身份凭证可以有所不同。每个发起端的身份凭证均可不同。

    4. 对每个可以访问此目标组的 iSCSI 发起端重复上述步骤。

    5. 配置完发起端指派后,单击下一步

  5. 单击完成保存并应用设置。

14.2.5 修改 iSCSI LIO 目标组

您可以按照如下方式修改现有 iSCSI LIO 目标组:

  • 在目标组中添加或删除目标 LUN 设备

  • 为目标组添加或去除发起端

  • 为目标组的发起端修改发起端 LUN 到目标 LUN 的映射

  • 修改发起端身份验证(传入、传出或二者)的用户名和口令身份凭证。

查看或修改 iSCSI LIO 目标组的设置:

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到目标选项卡。

  3. 选择要修改的 iSCSI LIO 目标组,然后单击编辑

  4. 在“修改 iSCSI 目标 LUN 设置”页面上,将 LUN 添加到目标组,编辑 LUN 指派或从组中删除目标 LUN。在对组完成所有想要的更改后,单击下一步

    有关选项信息,请参见修改 iSCSI 目标:选项

  5. 在“修改 iSCSI 目标发起端设置”页面上,配置允许访问目标组中 LUN 的发起端的信息。在对组完成所有想要的更改后,单击下一步

  6. 单击完成保存并应用设置。

14.2.6 删除 iSCSI LIO 目标组

删除 iSCSI LIO 目标组会去除组的定义以及发起端的相关设置,包括 LUN 映射和身份验证凭证。该操作不会销毁分区上的数据。要再次赋予发起端访问权限,您可以将目标 LUN 分配给不同的或新的目标组,并为其配置发起端访问权限。

  1. 启动 YaST,然后起动网络服务 ›  iSCSI LIO 目标

  2. 切换到目标选项卡。

  3. 选择要删除的 iSCSI LIO 目标组,然后单击删除

  4. 系统提示时,单击继续确认删除,或单击取消予以取消。

  5. 单击完成保存并应用设置。

14.3 配置 iSCSI 发起端

iSCSI 发起端可用于连接到任意 iSCSI 目标。连接不限于Section 14.2, “设置 iSCSI LIO 目标服务器”说明的 iSCSI 目标解决方案。iSCSI 发起端配置包括两个主要步骤 - 发现可用 iSCSI 目标和设置 iSCSI 会话。这两个步骤都可通过 YaST 完成。

14.3.1 使用 YaST 执行 iSCSI 发起端配置

在 YaST 中,“iSCSI 发起端概述”包括三个选项卡:

服务:

可使用服务选项卡来在引导时启用 iSCSI 发起端。它还允许设置唯一的发起端名称和 iSNS 服务器以用于发现。

已连接目标:

已连接目标选项卡概述了当前已连接的 iSCSI 目标。与已发现目标选项卡类似,它还提供用于向系统添加新目标的选项。

已发现目标:

已发现目标选项卡使您能够手动发现网络中的 iSCSI 目标。

14.3.1.1 配置 iSCSI 发起端

  1. 启动 YaST,然后起动网络服务 ›  iSCSI 发起端

  2. 切换到服务选项卡。

    Image
  3. 启动服务下,指定 iSCSI 发起端服务的启动方式:

    • 引导时:.  服务器重启动时自动启动服务。

    • 手动:.  (默认)服务器重启动之后,您必须运行 sudo systemctl start iscsi iscsid 命令来手动启动该服务。

  4. 指定或校验发起端名称

    为此服务器上的 iSCSI 发起端指定格式正确的 iSCSI 限定名称 (IQN)。此发起端名称在网络上必须具有全局唯一性。IQN 使用以下常规格式:

    iqn.yyyy-mm.com.mycompany:n1:n2

    其中,n1 和 n2 是字母数字字符。例如:

    iqn.1996-04.de.suse:01:a5dfcea717a

    发起端名称将用服务器上文件 /etc/iscsi/initiatorname.iscsi 中的相应值自动填充。

    如果服务器提供 iBFT (iSCSI Boot Firmware Table) 支持,则发起端名称将用 IBFT 中的相应值填充,并且您不能在此界面中更改发起端名称。不过,您可以使用 BIOS 设置来进行修改。iBFT 是指包含各种对 iSCSI 引导进程有用的参数的信息块,包括针对服务器的 iSCSI 目标与发起端描述。

  5. 使用以下方法之一发现网络上的 iSCSI 目标。

14.3.1.2 使用 iSNS 发现 iSCSI 目标

必须在环境中已安装并配置 iSNS 服务器后,才能使用此选项。有关信息,请参见第 13 章 “iSNS for Linux

  1. 在 YaST 中,选择 iSCSI 发起端,然后选择服务选项卡。

  2. 指定 iSNS 服务器的 IP 地址和端口。默认端口为 3205。

  3. 单击确定保存并应用更改。

14.3.1.3 手动发现 iSCSI 目标

对要从已设置 iSCSI 发起端的服务器访问的每个 iSCSI 目标服务器重复以下过程。

  1. 在 YaST 中,选择 iSCSI 发起端,然后选择已发现目标选项卡。

  2. 单击发现打开 iSCSI 发起端发现对话框。

  3. 输入 IP 地址并根据需要更改端口。默认端口为 3260。

  4. 如果要求进行身份验证,请取消选择不进行发现身份验证,然后为按发起端进行身份验证按目标进行身份验证指定身份凭证。

  5. 单击下一步启动发现并连接到 iSCSI 目标服务器。

  6. 如果要求提供身份凭证,在成功发现后,请使用连接激活目标。

    系统会提示您输入身份验证凭证以使用所选 iSCSI 目标。

  7. 单击下一步完成配置。

    该目标会立即出现在已连接目标中,现在便可使用虚拟 iSCSI 设备了。

  8. 单击确定保存并应用更改。

  9. 您可以使用 lsscsi 命令查找 iSCSI 目标设备的本地设备路径。

14.3.1.4 为 iSCSI 目标设备设置启动自选设置

  1. 在 YaST 中,选择 iSCSI 发起端,然后选择已连接目标选项卡以查看当前连接到服务器的 iSCSI 目标设备的列表。

  2. 选择要管理的 iSCSI 目标设备。

  3. 单击切换启动修改设置:

    自动:.  此选项用于 iSCSI 服务本身启动时要连接的 iSCSI 目标。这是典型配置。

    引导时:.  此选项用于引导期间要连接的 iSCSI 目标;即,当根目录 (/) 位于 iSCSI 上时。这样,iSCSI 目标设备在服务器引导时将从 initrd 进行评估。此选项在无法从 iSCSI 引导的平台(例如 IBM Z)上会被忽略。因此,在这些平台上不应使用该选项,而应使用自动

  4. 单击确定保存并应用更改。

14.3.2 手动设置 iSCSI 发起端

发现和配置 iSCSI 连接都要求 iscsid 正在运行。首次运行发现时,将在 /etc/iscsi/ 目录中创建 iSCSI 发起端的内部数据库。

如果发现受口令保护,则向 iscsid 提供身份验证信息。由于首次执行发现时内部数据库并不存在,因此此时无法使用内部数据库。相反,必须编辑配置文件 /etc/iscsid.conf 以提供信息。要为发现添加口令信息,请在 /etc/iscsid.conf 末尾添加以下行:

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = USERNAME
discovery.sendtargets.auth.password = PASSWORD

发现会将所有接收到的值储存在一个内部持久数据库中。此外,它会显示所有检测到的目标。使用以下命令运行此发现:

tux > sudo iscsiadm -m discovery --type=st --portal=TARGET_IP

输出如下所示:

10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems

要发现 iSNS 服务器上的可用目标,请使用以下命令:

sudo iscsiadm --mode discovery --type isns --portal TARGET_IP

对于 iSCSI 目标上定义的每个目标,将显示一行。有关储存数据的更多信息,请参见Section 14.3.3, “iSCSI 发起端数据库”

iscsiadm 的特殊 --login 选项会创建所有需要的设备:

tux > sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems --login

新生成的设备会显示在 lsscsi 的输出中,现在便可装入该设备。

14.3.3 iSCSI 发起端数据库

iSCSI 发起端发现的所有信息都储存在位于 /etc/iscsi 中的两个数据库文件中。一个数据库用于发现的目标,另一个数据库用于发现的节点。访问数据库时,首先必须选择是希望从发现获取数据还是从节点数据库获取数据。可使用 iscsiadm 的参数 -m discovery-m node 来执行此操作。使用 iscsiadm 搭配其中一个参数,可提供储存记录的概述:

tux > sudo iscsiadm -m discovery
10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems

本示例中的目标名称为 iqn.2006-02.com.example.iserv:systems。与此特殊数据集相关的所有操作都需要此名称。要检查 ID 为 iqn.2006-02.com.example.iserv:systems 数据记录的内容,可使用以下命令:

tux > sudo iscsiadm -m node --targetname iqn.2006-02.com.example.iserv:systems
node.name = iqn.2006-02.com.example.iserv:systems
node.transport_name = tcp
node.tpgt = 1
node.active_conn = 1
node.startup = manual
node.session.initial_cmdsn = 0
node.session.reopen_max = 32
node.session.auth.authmethod = CHAP
node.session.auth.username = joe
node.session.auth.password = ********
node.session.auth.username_in = EMPTY
node.session.auth.password_in = EMPTY
node.session.timeo.replacement_timeout = 0
node.session.err_timeo.abort_timeout = 10
node.session.err_timeo.reset_timeout = 30
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
....

要编辑这些变量的值,可将 iscsiadm更新操作一起使用。例如,如果希望 iscsid 在初始化时登录 iSCSI 目标,则将变量 node.startup 的值设置为 automatic

sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \
-p ip:port --op=update --name=node.startup --value=automatic

使用 delete 操作删除过时的数据集。如果目标 iqn.2006-02.com.example.iserv:systems 不再是有效的记录,请使用以下命令予以删除:

tux > sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \
-p ip:port --op=delete
Important
Important: 不确认

使用此选项时应谨慎,因为它会删除该记录而无任何附加确认提示。

要获取所有已发现目标的列表,请运行 sudo iscsiadm -m node 命令。

14.4 使用 targetcli-fb 设置软件目标

targetcli 是用于管理 LinuxIO (LIO) 目标子系统配置的外壳。您可以交互方式调用该外壳,也可以像在传统的外壳中那样每次执行一条命令。类似于传统外壳,您可以使用 cd 命令遍历 targetcli 功能层次结构,并使用 ls 命令列出内容。

可用的命令取决于当前目录。虽然每个目录都有其各自的命令集,但也有一些命令可在所有目录中使用(例如 cdls 命令)。

targetcli 命令的格式如下:

[DIRECTORY] command [ARGUMENTS]

您可以在任何目录中使用 help 命令来查看可用命令列表,或查看有关命令的特定信息。

targetcli 工具在 targetcli-fb 包中提供。此包已在官方 SUSE Linux Enterprise Server 软件储存库中提供,可使用以下命令进行安装:

tux > sudo zypper install targetcli-fb

安装 targetcli-fb 包后,启用 targetcli 服务:

tux > sudo systemctl enable targetcli
tux > sudo systemctl start targetcli

要切换到 targetcli 外壳,请以 root 身份运行 targetcli

tux > sudo targetcli

然后,可以运行 ls 命令来查看默认配置。

/> ls
o- / ............................ [...]
  o- backstores ................. [...]
  | o- block ..... [Storage Objects: 0]
  | o- fileio .... [Storage Objects: 0]
  | o- pscsi ..... [Storage Objects: 0]
  | o- ramdisk ... [Storage Objects: 0]
  | o- rbd ....... [Storage Objects: 0]
  o- iscsi ............... [Targets: 0]
  o- loopback ............ [Targets: 0]
  o- vhost ............... [Targets: 0]
  o- xen-pvscsi .......... [Targets: 0]
/>

ls 命令的输出中所示,尚未配置任何后端。因此,第一步是配置一个受支持软件目标。

targetcli 支持以下后端:

  • fileio:本地映像文件

  • block:专用磁盘或分区上的块储存

  • pscsi:SCSI 直通设备

  • ramdisk:基于内存的后端

  • rbd:Ceph RADOS 块设备

为了熟悉 targetcli 的功能,请使用 create 命令将本地映像文件设置为软件目标:

/backstores/fileio create test-disc /alt/test.img 1G

这会在指定的位置(在本例中为 /alt)创建 1GB 的 test.img 映像。运行 ls,此时应会看到以下结果:

/> ls
o- / ........................................................... [...]
  o- backstores ................................................ [...]
  | o- block .................................... [Storage Objects: 0]
  | o- fileio ................................... [Storage Objects: 1]
  | | o- test-disc ... [/alt/test.img (1.0GiB) write-back deactivated]
  | |   o- alua ......     .......................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp      .... [ALUA state: Active/optimized]
  | o- pscsi .................................... [Storage Objects: 0]
  | o- ramdisk .................................. [Storage Objects: 0]
  | o- rbd ...................................... [Storage Objects: 0]
  o- iscsi .............................................. [Targets: 0]
  o- loopback ........................................... [Targets: 0]
  o- vhost .............................................. [Targets: 0]
  o- xen-pvscsi ......................................... [Targets: 0]
/>

输出中指出,已在 /backstores/fileio 目录下创建一个名为 test-disc 的基于文件的后端储存,并已链接到创建的文件 /alt/test.img。请注意,新的后端储存尚未激活。

下一步是将一个 iSCSI 目标前端连接到该后端储存。每个目标都必须有一个 IQN(iSCSI 限定的名称)。最常用的 IQN 格式如下:

iqn.YYYY-MM.NAMING-AUTHORITY:UNIQUE-NAME

必须提供 IQN 的以下部分:

  • YYYY-MM:建立命名机构的年份和月份

  • NAMING-AUTHORITY:命名机构的因特网域名的反向语法

  • UNIQUE-NAME:命名机构选择的唯一域名

例如,对于域 open-iscsi.com,IQN 可以是:

iqn.2005-03.com.open-iscsi:UNIQUE-NAME

创建 iSCSI 目标时,targetcli 命令允许您指派自己的 IQN,只要该 IQN 遵循指定的格式即可。您还可以在创建目标时省略名称,让该命令为您创建 IQN,例如:

/> iscsi/ create

再次运行 ls

/> ls
o- / ............................................................... [...]
  o- backstores .................................................... [...]
  | o- block ........................................ [Storage Objects: 0]
  | o- fileio ....................................... [Storage Objects: 1]
  | | o- test-disc ....... [/alt/test.img (1.0GiB) write-back deactivated]
  | |   o- alua ......................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ............. [ALUA state: Active/optimized]
  | o- pscsi ........................................ [Storage Objects: 0]
  | o- ramdisk ...................................... [Storage Objects: 0]
  | o- rbd .......................................... [Storage Objects: 0]
  o- iscsi .................................................. [Targets: 1]
  | o- iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456 ... [TPGs: 1]
  |   o- tpg1 ..................................... [no-gen-acls, no-auth]
  |     o- acls ................................................ [ACLs: 0]
  |     o- luns ................................................ [LUNs: 0]
  |     o- portals .......................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ........................................... [OK]
  o- loopback ............................................... [Targets: 0]
  o- vhost .................................................. [Targets: 0]
  o- xen-pvscsi ............................................. [Targets: 0]
/>

输出显示创建了 iSCSI 目标节点,并自动为其生成 IQN iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456

请注意,targetcli 还创建并启用了默认的目标门户组 tpg1。这是因为位于根级别的变量 auto_add_default_portalauto_enable_tpgt 默认设置为 true

该命令还使用 0.0.0.0 IPv4 通配符创建了默认门户。这意味着,任何 IPv4 地址都可以访问配置的目标。

下一步是为 iSCSI 目标创建 LUN(逻辑单元号)。执行此操作的最佳做法是让 targetcli 自动指派其名称和编号。切换到 iSCSI 目标所在的目录,然后在 lun 目录中使用 create 命令为后端储存指派 LUN。

/> cd /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456> cd tpg1
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> luns/
create /backstores/fileio/test-disc

运行 ls 命令以查看更改:

/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> ls
o- tpg1 .............................................. [no-gen-acls, no-auth]
      o- acls ..................................................... [ACLs: 0]
      o- luns ..................................................... [LUNs: 1]
      | o- lun0 ....... [fileio/test-disc (/alt/test.img) (default_tg_pt_gp)]
      o- portals ............................................... [Portals: 1]
        o- 0.0.0.0:3260 ................................................ [OK]

现在,即创建了一个具有 1GB 基于文件的后端储存的 iSCSI 目标。该目标的名称为 iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456,可从系统的任何网络端口访问它。

最后,需要确保发起端能够访问配置的目标。要实现此目的,一种方法是为每个发起端创建一个允许其连接到目标的 ACL 规则。在这种情况下,必须使用其 IQN 列出每个所需的发起端。可以在 /etc/iscsi/initiatorname.iscsi 文件中找到现有发起端的 IQN。使用以下命令添加所需的发起端(在本例中为 iqn.1996-04.de.suse:01:54cab487975b):

/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> acls/ create iqn.1996-04.de.suse:01:54cab487975b
Created Node ACL for iqn.1996-04.de.suse:01:54cab487975b
Created mapped LUN 0.
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1>

您也可以在不限制访问的演示模式下运行目标。此方法的安全性较低,但适合演示目的,并可以在封闭的网络中运行。要启用演示模式,请使用以下命令:

/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute generate_node_acls=1
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute demo_mode_write_protect=0

最后一步是使用根目录中可用的 saveconfig 命令保存创建的配置:

/> saveconfig /etc/target/example.json

如果在某个时间点您需要从保存的文件恢复配置,需要先清除当前配置。请记住,除非先保存配置,否则清除当前配置会导致数据丢失。使用以下命令清除并重新装载配置:

/> clearconfig
As a precaution, confirm=True needs to be set
/> clearconfig confirm=true
All configuration cleared
/> restoreconfig /etc/target/example.json
Configuration restored from /etc/target/example.json
/>

要测试配置的目标是否正常工作,请使用同一系统上安装的 open-iscsi iSCSI 发起端连接到该目标(请将 HOSTNAME 替换为本地计算机的主机名):

tux > iscsiadm -m discovery -t st -p HOSTNAME

此命令将返回找到的目标列表,例如:

192.168.20.3:3260,1 iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456

然后,可以使用 login iSCSI 命令连接到列出的目标。这会使目标可用作本地磁盘。

14.5 安装时使用 iSCSI 磁盘

使用支持 iSCSI 的固件时,支持从 AMD64/Intel 64 和 IBM POWER 体系结构上的 iSCSI 磁盘引导。

要在安装过程中使用 iSCSI 磁盘,必须将以下参数添加到引导参数行:

withiscsi=1

安装过程中会额外显示一个屏幕,让您可以将 iSCSI 磁盘连接到系统,并在安装过程中加以使用。

Note
Note: 安装点支持

引导期间,iSCSI 设备将异步显示。虽然 initrd 可确保为根文件系统正确设置这些设备,但对于任何其他文件系统或安装点(例如 /usr),并无此类保证。因此,任何系统安装点(例如 /usr/var)都不受支持。要使用这些设备,请确保正确同步相应的服务和设备。

14.6 iSCSI 查错

本节介绍一些已知问题和针对 iSCSI 目标及 iSCSI 发起端问题的可行的解决方案。

14.6.1 在 iSCSI LIO 目标服务器上设置目标 LUN 时发生门户错误

添加或编辑 iSCSI LIO 目标组时发生错误:

Problem setting network portal IP_ADDRESS:3260

/var/log/YasT2/y2log 日志文件包含以下错误:

find: `/sys/kernel/config/target/iscsi': No such file or directory

若 iSCSI LIO 目标服务器软件当前未运行则会发生此问题。要解决此问题,请退出 YaST,并在命令行中使用 systemctl start targetcli 命令手动启动 iSCSI LIO,然后重试。

您也可以输入以下内容来检查 configfsiscsi_target_modtarget_core_mod 是否载入。随即显示响应示例。

tux > sudo lsmod | grep iscsi
iscsi_target_mod      295015  0
target_core_mod       346745  4
iscsi_target_mod,target_core_pscsi,target_core_iblock,target_core_file
configfs               35817  3 iscsi_target_mod,target_core_mod
scsi_mod              231620  16
iscsi_target_mod,target_core_pscsi,target_core_mod,sg,sr_mod,mptctl,sd_mod,
scsi_dh_rdac,scsi_dh_emc,scsi_dh_alua,scsi_dh_hp_sw,scsi_dh,libata,mptspi,
mptscsih,scsi_transport_spi

14.6.2 iSCSI LIO 目标在其他计算机上不可见

如果目标服务器上使用防火墙,则必须打开要使用的 iSCSI 端口,以允许其他计算机看到 iSCSI LIO 目标。有关信息,请参见Section 14.2.1, “iSCSI LIO 目标服务启动和防火墙设置”

14.6.3 丢弃 iSCSI 通讯的数据包

如果防火墙很忙,可能会丢弃包。SUSE 防火墙默认为三分钟后丢弃包。如果您发现 iSCSI 通讯数据包被丢弃,请考虑将 SUSE 防火墙配置为太忙时将数据包排队,而不是丢弃它们。

14.6.4 将 iSCSI 卷用于 LVM

在 iSCSI 目标上使用 LVM 时,请使用本部分的查错提示。

14.6.4.1 检查在引导时是否执行 iSCSI 发起端发现

设置 iSCSI 发起端时,确保引导时启用发现,以便 udev 在引导时可以发现 iSCSI 设备,并设置可供 LVM 使用的设备。

14.6.4.2 检查 iSCSI 目标在引导时能否被发现

请记住,udev 会为设备提供默认设置。确保创建设备的所有应用程序均已在引导时启动,以便 udev 在系统启动时能为这些应用程序识别出并指派设备。如果应用程序或服务在稍后才启动,则 udev 不会像在引导时那样自动创建设备。

14.6.5 配置文件设置为手动时,会装入 iSCSI 目标

如果您之前手动修改了 /etc/iscsi/iscsid.conf 配置文件,那么,即使在该文件中将 node.startup 选项设置为手动,Open-iSCSI 启动时也会装入目标。

检查 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default 文件。它包含覆盖 /etc/iscsi/iscsid.conf 文件的 node.startup 设置。如果使用 YaST 接口将装入选项设置为手动,同时会在 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default 文件中设置 node.startup = manual

14.7 iSCSI LIO 目标术语

后备储存

提供 iSCSI 端点底层的实际储存的物理储存对象。

CDB(命令描述符块))

SCSI 命令的标准格式。CDB 通常长度为 6、10 或 12 个字节,但也可以达到 16 个字节或具有可变长度。

CHAP (Challenge Handshake Authentication Protocol)

点对点协议 (PPP) 身份验证方法用于向另一台计算机确认一台计算机的身份。链路控制协议 (LCP) 连接两台计算机并协商 CHAP 方法后,身份验证者会向对等体发送随机询问。然后该对等体会根据询问以及密钥发出以哈希加密的应答。再由身份验证者比照由预期哈希值自己计算出的结果对该哈希应答进行验证,以决定是确认身份验证还是中断连接。CHAP 在 RFC 1994 中定义。

CID(连接标识符)

由发起端生成的 16 位编号,用于唯一识别两个 iSCSI 设备之间的连接。登录阶段会显示此编号。

端点

iSCSI 目标名称与 iSCSI TPG(IQN + 标记)的组合。

EUI(扩展的唯一标识符)

在全球范围内唯一标识每个设备的 64 位编号。其格式由指定公司的唯一的 24 位编号和由该公司分配给所构建的每个设备的 40 位编号组成。

发起端

SCSI 会话的发起端。通常是计算机等控制设备。

IPS(因特网协议储存)

使用 IP 协议在储存网络中移动数据的一类协议或设备。FCIP(基于 IP 的光纤通道)、iFCP(因特网光纤通道协议)以及 iSCSI(因特网 SCSI)都属于 IPS 协议。

IQN(iSCSI 限定的名称)

在全球范围内唯一标识每个设备的 iSCSI 的名称格式(例如:iqn.5886.com.acme.tapedrive.sn‐a12345678)。

ISID(发起端会话标识符)

由发起端生成的一个 48 位编号,用于唯一识别发起端与目标之间的会话。此值在登录过程中创建,生成后将与登录 PDU 一起发送给目标。

MCS(每个会话多重连接)

它是 iSCSI 规范的组成部分,允许发起端与目标之间存在多个 TCP/IP 连接。

MPIO(多路径 I/O)

一种可在服务器和储存设备之间建立多个冗余数据路径的方法。

网络门户

iSCSI 端点与 IP 地址及 TCP(传输控制协议)端口的组合。TCP 端口 3260 是 IANA(因特网号码分配机构)所定义的 iSCSI 协议的端口号。

SAM(SCSI 体系结构模型)

以一般术语说明 SCSI 行为的文档。它支持不同类型的设备通过各种介质进行通讯。

目标

SCSI 会话的接收端,通常是磁盘驱动器、磁带驱动器或扫描仪等设备。

目标组 (TG)

在创建视图时视为同等对待的 SCSI 目标端口的列表。创建视图可帮助简化 LUN(逻辑单元号)映射。每个视图项指定一个目标组、主机组以及一个 LUN。

目标端口

一个 iSCSI 端点与一个或多个 LUN 的组合。

目标端口组 (TPG)

IP 地址和 TCP 端口号的列表,用于确定特定 iSCSI 目标将要侦听的接口。

目标会话标识符 (TSID)

由目标生成的 16 位编号,用于唯一标识发起端和目标之间的会话。此值在登录过程中创建,生成后将与登录响应 PDU(协议数据单元)一起发送给发起端。

14.8 其他信息

iSCSI 协议已面世多年。有许多评论将 iSCSI 与 SAN 解决方案作比较、评测性能,此外还有一份文档说明硬件解决方案。有关详细信息,请参见 http://www.open-iscsi.com/ 上的 Open-iSCSI 项目主页。

此外,请参见 iscsiadmiscsid 的手册页,以及示例配置文件 /etc/iscsid.conf