Chapter7 - 提供远程块存储
iSCSI 概念
iSCSI 简介
Internet 小型计算机系统接口(iSCSI)是一个基于 TCP/IP 的协议,用于通过 IP 网络仿真 SCSI 高性能本地存储总线,从而为远程块存储设备提供数据传输和管理。作为存储区域网络(SAN)协议,iSCSI 跨本地和广域网络(LAN、WAN以及 Internet)扩展SAN ,通过分布式服务器和数组提供独立于位置的数据存储检索。

SCSI 协议套件提供基于设备总线通信协议的命令描述器块(CDB)命令集。对于每个通道的所有设置(电缆总线),原始SCSI 拓扑使用长度限制为 20米的物理布线。设备使用唯一的数字目标 ID(0 到 7,对于双通道则为 0 到 15 )。广泛实施的光纤通道 ( FC) 已淘汰了物理SCSI 磁盘和布线。FC 保留了 SCSI 的 CDB 命令集,但是将磁盘和总线通信更换为协议以便进行更长且速度更快的光纤布线。
iSCSI 协议还保留了 CDB 命令集,在在通过标准 TCP/IP 封装的 iSCSI 系统之间执行总线通信。iSCSI服务器使用文件、逻辑卷或任何类型的磁盘作为底层存储(后备储存)来仿真呈现为目标的 SCSI 设备。iSCSI 服务通过在层次高于操作系统 TCP/IP 堆栈或 TCP 卸载引擎 (TOE)(一个专用的以太网网络接口卡(NIC),包括 TCP/IP 网络层以提高性能)的软件中实施。iSCSI 还可以作为主机总线适配器(HBA)以硬件方式实施,以更大地提高性能。
企业级 SAN需要专用的流量基地架构。FC 的独立光纤布线和交换机保证了隔离。iSCSI 应该在独立于标准LAN 流量的布线中实施,因为性能可能会由于共享网络上的带宽拥塞而降级。以太网和 FC 现在均提供铜缆和光缆布线选项,允许网络整合与流量分类组合使用。
存储区域网络流量通常是未加密的,因为物理服务器到存储器的布线通常密封在安全的数据中心内。对于 WAN 安全性,iSCSI以太网光纤通道(FCoE)可以利用互联网协议安全性(IPSec),这是一个用户保护 IP 网络流量的协议套件。选择可以提供加密的互联网硬件(首选 NIC 、TOE 和 HBA),iSCSI 提供质询握手身份验证协议(CHAP)用户名和密码作为身份验证机制,以限制所选启动器和目标之间的连接。
直接最近,iSCSI 才不被视为企业级存储选项,主机是因为与 FC 和 1Gb/s 和 4Gb/s光纤基地架构相比,其使用了较慢的 100Mb/s和 1000Mb/s 以太网。通过目前的10/40 Gb/s 以太网和 8/10/16/20 Gb/s FC 以及即将实现的 100Gb/s 以太网和 32/128 Gb/s FC ,带宽可用性现在对于两者来说很相似。

iSCSI 的使用使 SAN 摆脱了本地布线的限制,促进了本地或远程数据中心的存储整合。由于 iSCSI 结构是逻辑性的,因此,将仅使用软件配置来进行新的存储分配,而无需其他电缆或物理磁盘。iSCSI 还使用多个远程数据中心简化了数据复制、迁移和灾难恢复。
iSCSI 基础知识
iSCSI 协议的运行方式类似于客户端-服务器配置。客户端系统启动器软件配置为将 SCSI 命令发送到远程服务器存储目标。访问的iSCSI 目标在客户端系统上显示为本地且未格式化 SCSI 块设备,等同于通过SCSI 布线、FC直连或 FC交换机连接的设备。
iSCSI 组件术语
术语 | 描述 |
---|---|
启动器(initiator) | 一个iSCSI 客户端,通常以软件提供,但是也可以作为iSCSI HBA来实施。必须为启动器授予唯一名称(请参见IQN). |
目标(target) | 一个iSCSI 存储资源,针对来自iSCSI服务器的连接而配置。必须为目标授予唯一名称(请参见 IQN)。目标提供一个或多个带有编号的块设备,称为逻辑单元(请参见 LUN)。一个 iSCSI 服务器可以同时提供多个目标。 |
ACL | 访问权限控制列表(条目),一种使用节点 IQN (通常是iSCSI 启动器名称)来验证启动器的访问权限的访问限制。 |
发现(discovery) | 查询目标服务器以列出配置的目标。目标使用要求其他的访问步骤(请参见 login ). |
IQN | iSCSI 限制名称,一个全球唯一名称,用于强制命令格式来识别启动器和目标:iqn.YYYY-MM.com.reversed.domain[:optional_string]iqn –表示此名称将使用域作为其标识符。YYYY-MM — 拥有域名的第一个月com.reversed.domain –此 iSCSI 名称的创建组织的逆向域名。optional_string –以冒号为前缀的可选字符串,由域所有者根据需要进行分配,但也是全球唯一的。它可以包含冒号以分隔组织边界。 |
登录(login) | 向目标或 LUN 进行身份验证以开始使用客户端块设备。 |
LUN | 逻辑单元号,带有编号的块设备,连接到目标并且通过目标来使用。可以有一个或多个 LUN 连接到单个目标,但通常一个目标仅提供一个 LUN |
节点(node) | 任何iSCSI 启动器或iSCSI 目标,由其 IQN 来标识 。 |
门户(portal) | 目标或启动器上用户建立连接的 IP 地址或端口。一些 iSCSI 实施将门户和节点互换使用 |
TPG | 目标门户组,某个特定iSCSI 目标将要侦听的接口 IP 地址和 TCP 端口的集合。可以将目标配置(例如 ACL )添加到 TPG 以协调多个 LUN 的设置。 |
iSCSI使用 ACL 来执行 LUN 屏蔽,从而管理相应目标和 LUN 对启动器的可访问性,还可以使用 CHAP 身份验证来限制对目标的访问权限。在使用设备全球编号(WWN)进行软区域划分管理限制方面,iSCSI ACL与 FC 类似。尽管FC 交换级别强制端口限制(硬区域划分)没有任何可比较的iSCSI 机制,但以太网 VLAN 可以提供类似的隔离安全性。
与本地块设备不同的是,iSCSI网络访问块设备可通过众多远程启动器发现,。典型的本地文件系统(如ext4、XFS 和btrfs)不支持同时多系统挂载,这会导致严重的文件系统损坏。集群系统利用全局文件系统(GFS2)解决多系统访问权限,其旨在提供分布式文件锁定和并发多节点文件系统挂载。

连接的iSCSI块设备显示为本地SCSI 块设备(sdx)以在本地文件系统、交换空间或原始数据库安装中使用(如前图中所示)。请参阅以下部分以对比网络服务器协议(如 NFS 和 SMB) 的使用,这些协议同时在多个客户端系统提供从远程文件系统到本地应用程序的文件 I/O。

描述 | 术语 |
---|---|
用于标识单个iSCSI目标和启动吕的唯一名称。 | IQN |
用于标识单个光纤通道端口和节点的唯一编号 。 | WWN |
iSCSI服务器上的存储资源 | 目标 |
iSCSI服务器上的存储资源块设备 | LUN |
以软件或硬件实施的iSCSI客户端 | 启动器 |
单个iSCSI启动器或目标 | 节点 |
启动器或目标上的单个IP连接地址 | 门户 |
提供iSCSI目标
iSCSI 目标概述
在原始的SCSI协议术语中,目标是指在SCSI总线上唯一标识的单个可连接的存储或输出设备。在iSCSI中,SCSI总线是在 IP 网络中仿真,目标可以是网络附加存储机柜中的专用物理设备,也可以是网络存储服务器上iSCSI软件配置的逻辑设备。目标(如 HBA和启动器)是SCSI总线通信中的端点,可将命令描述符块(CDB)传递到请求或者提供存储事务。
要提供对存储或输出设备的访问权限,需使用一个或多个逻辑单元号(LUN)来配置目标,在iSCSI中,LUN 显示为目标的连续编号磁盘驱动器,但是目标通常仅有一个 LUN 。启动器执行SCSI 与目标的协商,以建立与 LUN 的连接。LUN作为仿真SCSI磁盘块设备来响应,后者能以原始形式使用,也可以通过客户端支持的文件系统进行格式化。
警告
请勿将单一系统文件系统同时挂载到多个系统 。iSCSI允许多个启动器节点的共享目标和LUN 访问权限,因此需要使用支持集群功能的文件系统,如GFS2。同时从多个系统中挂载专为本地、单一系统访问设计的标准文件系统(如btrfs、ext3、ext4、FAT32、HPFS+、NTFS、XFS与ZFS)将导致文件系统损坏。
iSCSI 通过使用 ACL 限制对特定启动器的 LUN 访问性,从而提供LUN 屏蔽。除了在计划使用共享访问权限时,ACL 可以确保仅指定的客户端节点能够登录到特定目标。在目标服务器上,可以在 TPG 级别设置 ACL 以保护 LUN 组,也可以为 LUN 单独设置。
iscsi 目标配置
目标服务器配置演示
targetcli 既是命令行实用程序,也是一个交互式shell 在其中可创建、删除和配置 iscsi 目标组件。目标堆栈对象分组为对象的层级树,以便能够轻松进行浏览和上下文配置。此 shell 使用熟悉的 linux 命令:cd、ls、pwd 和 set 。
targetcli shell 还支持TAB 补全。管理员使用 TAB 完成部分输入的命令,或者查看命令中当前位置可受的关键字的列表。
1、如果需要,请安装 targetcli
[root@server ~]# yum install targetcli -y
2、运行 targetcli (不带任何参数)以进入交互模式。
[root@server ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> 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- iscsi ............................................................................................................ [Targets: 0]
o- loopback ......................................................................................................... [Targets: 0]
/>
3、创建后备存储(后备储存)。有几种类型的后备存储。
- block – 服务器上定义的块设备。磁盘驱动器、磁盘分区、逻辑卷、多路径设备以及服务器上定义的任何 b 类型的设备文件。
- fileio – 在服务器的文件系统中创建一个指定大小的文件。此方法类似于使用映像文件作为虚拟机磁盘映像的存储
- pscsi – 物理 SCSI 。允许透传到连接到服务器的物理 SCSI 设备。通常不使用此后备存储类型。
- ramdisk – 在服务器上的内存中创建一个指定大小的ramdisk 设备。在种类型的存储将不会持久存储数据。当服务器重新启动时,ramdisk 定义将在目标实例化时返回,但是所有数据都将丢失。
示例:
[root@server ~]# targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/backstores> ls
o- backstores ................................................................................................................ [...]
o- block .................................................................................................... [Storage Objects: 0]
o- fileio ................................................................................................... [Storage Objects: 0]
o- pscsi .................................................................................................... [Storage Objects: 0]
o- ramdisk .................................................................................................. [Storage Objects: 0]
/backstores> cd /backstores/
/backstores> ls
o- backstores ................................................................................................................ [...]
o- block .................................................................................................... [Storage Objects: 0]
o- fileio ................................................................................................... [Storage Objects: 0]
o- pscsi .................................................................................................... [Storage Objects: 0]
o- ramdisk .................................................................................................. [Storage Objects: 0]
/backstores> block/ create block1 /dev/iSCSI_vg/disk1_lv
Created block storage object block1 using /dev/iSCSI_vg/disk1_lv.
/backstores> block/ create block2 /dev/sdb6
Created block storage object block2 using /dev/sdb6.
/backstores> fileio/ create file1 /root/disk1_file 100M
Created fileio file1 with size 104857600
/backstores> ls
o- backstores ................................................................................................................ [...]
o- block .................................................................................................... [Storage Objects: 2]
| o- block1 ............................................................. [/dev/iSCSI_vg/disk1_lv (3.0GiB) write-thru deactivated]
| | o- alua ..................................................................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ......................................................................... [ALUA state: Active/optimized]
| o- block2 ......................................................................... [/dev/sdb6 (0 bytes) write-thru deactivated]
| o- alua ..................................................................................................... [ALUA Groups: 1]
| o- default_tg_pt_gp ......................................................................... [ALUA state: Active/optimized]
o- fileio ................................................................................................... [Storage Objects: 1]
| o- file1 .................................................................. [/root/disk1_file (100.0MiB) 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]
/backstores>
4、为目标创建IQN.此步骤还将在 IQN 下面创建一个默认 TPG 。
/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 1]
o- iqn.2019-06.com.example.com:remotedisk1 ............................................................................. [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]
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.server.x8664:sn.f4e7ebb422f0.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 2]
o- iqn.2003-01.org.linux-iscsi.server.x8664:sn.f4e7ebb422f0 ............................................................ [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- iqn.2019-06.com.example.com:remotedisk1 ............................................................................. [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]
管理员可以使用 create 而不指定要创建的IQN .targetcli 将生成与以下类似的 IQN : iqn.2003-01.org.linux-iscsi.server0.x8664:sn.f4e7ebb422f0.指定 IQN 值将使管理员能够对IQN 使用有意义的名称空间。
5、在TPG 中,创建一个 ACL 以供客户端节点稍后使用。由于全局参数 auto_add_mapped_luns 设置为 true (默认值)。TPG 中的任何现有 LUN 在创建后都将使映射到每个ACL 。
/iscsi> cd iqn.2003-01.org.linux-iscsi.server.x8664:sn.f4e7ebb422f0/tpg1/
/iscsi/iqn.20...ebb422f0/tpg1> acls/ create iqn.2003-01.org.linux:desktop0
Created Node ACL for iqn.2003-01.org.linux:desktop0
/iscsi/iqn.20...ebb422f0/tpg1> ls
o- tpg1 ..................................................................... [no-gen-acls, no-auth]
o- acls ................................................................................ [ACLs: 1]
| o- iqn.2003-01.org.linux:desktop0 ............................................. [Mapped LUNs: 0]
o- luns ................................................................................ [LUNs: 0]
o- portals .......................................................................... [Portals: 1]
o- 0.0.0.0:3260 ........................................................................... [OK]
/iscsi/iqn.20...ebb422f0/tpg1>
此 ACL 将目标配置为仅接受来自以 iqn.2003-01.org.linux:desktop 作为其启动器 IQN (也称为启动器名称)的客户端的连接。
6、在此 TPG 中,为每个现在后备储存创建一个LUN 。此步骤还将激活每个后备储存。由于 TPG 存在 ACL 。因此将自动分配给每个创建的 LUN 。
/iscsi/iqn.20...ebb422f0/tpg1> luns/ create /backstores/block/block1
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2003-01.org.linux:desktop0
/iscsi/iqn.20...ebb422f0/tpg1> luns/ create /backstores/block/block2
Created LUN 1.
Created LUN 1->1 mapping in node ACL iqn.2003-01.org.linux:desktop0
/iscsi/iqn.20...ebb422f0/tpg1> luns/ create /backstores/fileio/file1
Created LUN 2.
Created LUN 2->2 mapping in node ACL iqn.2003-01.org.linux:desktop0
/iscsi/iqn.20...ebb422f0/tpg1> ls
o- tpg1 ..................................................................... [no-gen-acls, no-auth]
o- acls ................................................................................ [ACLs: 1]
| o- iqn.2003-01.org.linux:desktop0 ............................................. [Mapped LUNs: 3]
| o- mapped_lun0 ...................................................... [lun0 block/block1 (rw)]
| o- mapped_lun1 ...................................................... [lun1 block/block2 (rw)]
| o- mapped_lun2 ...................................................... [lun2 fileio/file1 (rw)]
o- luns ................................................................................ [LUNs: 3]
| o- lun0 ............................. [block/block1 (/dev/iSCSI_vg/disk1_lv) (default_tg_pt_gp)]
| o- lun1 .......................................... [block/block2 (/dev/sdb6) (default_tg_pt_gp)]
| o- lun2 ................................... [fileio/file1 (/root/disk1_file) (default_tg_pt_gp)]
o- portals .......................................................................... [Portals: 1]
o- 0.0.0.0:3260 ........................................................................... [OK]
/iscsi/iqn.20...ebb422f0/tpg1>
将三个 LUN 分配给目标意味着,当启动器连接到目标时,将收到三个新的 SCSI 设备。
7、仍在 TPG 中,创建一个门户配置以侦听 IP 地址和端口。使用系统的公共网络接口创建门户。如果不指定要使用的 TCP 端口,则端口创建将默认使用标准的iSCSI端口(3260)
/iscsi/iqn.20...ebb422f0/tpg1> portals/ delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20...ebb422f0/tpg1>
/iscsi/iqn.20...ebb422f0/tpg1> portals/ create 192.168.254.135 1111
Created network portal 192.168.254.135:1111.
/iscsi/iqn.20...ebb422f0/tpg1> ls
o- tpg1 ..................................................................... [no-gen-acls, no-auth]
o- acls ................................................................................ [ACLs: 1]
| o- iqn.2003-01.org.linux:desktop0 ............................................. [Mapped LUNs: 3]
| o- mapped_lun0 ...................................................... [lun0 block/block1 (rw)]
| o- mapped_lun1 ...................................................... [lun1 block/block2 (rw)]
| o- mapped_lun2 ...................................................... [lun2 fileio/file1 (rw)]
o- luns ................................................................................ [LUNs: 3]
| o- lun0 ............................. [block/block1 (/dev/iSCSI_vg/disk1_lv) (default_tg_pt_gp)]
| o- lun1 .......................................... [block/block2 (/dev/sdb6) (default_tg_pt_gp)]
| o- lun2 ................................... [fileio/file1 (/root/disk1_file) (default_tg_pt_gp)]
o- portals .......................................................................... [Portals: 1]
o- 192.168.254.135:1111 ................................................................... [OK]
/iscsi/iqn.20...ebb422f0/tpg1>
8、查看整个配置,然后退出targetcli 。在退出后,targetcli 将自动保存。生成的持久配置文件以 JavaScript 对象表示法(JSON)格式来存储。

9、向端口3260(iscsi 标准端口)/1111(自定义端口) 的默认防火墙添加一个端口豁免项
[root@server ~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@server ~]# firewall-cmd --permanent --add-port=1111/tcp
success
[root@server ~]# firewall-cmd --reload
success
[root@server ~]#
10、启用 target.service systemd 单元。target.service 将在启动时通过 json 文件重新创建目标配置。如果跳过此步骤,则在计算机重新启动前,任何已配置的目标都将有效,但是在重新启动后,服务器将不会提供任何目标。
[root@server ~]# systemctl enable target
身份验证
除了 ACL 节点验证之外,还可以实施基于密码的身份验证。在 iSCSI 发现阶段中可能需要身份验证。身份验证可以是单身的,也可以是双向的。
CHAP 身份验证不使用强加密来传递凭据。尽管 CHAP除了具有正确配置的启动器名称(在 ACL 中配置)之外确实还提供身份验证的其他因素,但它不应被视为是安全的。如果担心iSCSI 数据的安全性,则控制协议的网络端是保证安全性的更好方法。提供专用的隔离网络或 VLAN 来传递 iSCSI 流量将能够更安全地实施该协议。
命令行模式
在演示中,targetcli 是以交互模式运行的。但 targetcli 还可以用于通过命令行来执行一系列命令。在以下示例中,targetcli 将用于创建一个后备存储设备、一个 IQN 并激活门户。所编写的示例将不会提供可用目标,而是指在演示通过targetcli 执行的几个操作。此方法可用于对目标配置进行脚本编写。在命令列表的结尾将执行 saveconfig 命令。与 targetcli 的交互使用不同的是,在使用 saveconfig 命令之前,命令行模式不会将配置保存为 json 文件。
[root@server ~]# targetcli /backstores/block create block1 /dev/sdb6
Created block storage object block1 using /dev/sdb6.
[root@server ~]# targetcli /iscsi create iqn.2019-03.com.example:server1
Created target iqn.2019-03.com.example:server1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
[root@server ~]# targetcli /iscsi/iqn.2019-03.com.example:server1/tpg1/portals delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
[root@server ~]# targetcli /iscsi/iqn.2019-03.com.example:server1/tpg1/portals create 192.168.111.109
Using default IP port 3260
Created network portal 192.168.111.109:3260.
[root@server ~]# targetcli saveconfig
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
[root@server ~]#
访问 iSCSI 存储
iSCSI启动器简介
在RHEL 中,iSCSI 启动器通常在软件中实施,并且功能类似于硬件iSCSI HBA 以从远程存储服务器访问目标。使用基于软件的iSCSI 启动器需要连接到足够带宽的现在以太网网络以承载期望的存储流量。
还可以使用硬件启动器(在专用主机总线适配器中包含必需协议)来实施iSCSI。iSCSI HBA和 TCP卸载引擎(TOE)(其中包括以太网 NIC 上的 TCP 网络堆栈)将 iSCSI/TCP 开销和以太网中断的处理转移给硬件,从而减轻系统 CPU 负载。
配置iSCSI 客户端启动器需要安装 iscsi-initiator-utils 软件包,其中包含 iscsi 和 iscsid 服务以及 /etc/iscsi/iscsid.conf 和 /etc/iscsi/initiatiorname.iscsi 配置文件
作为 iSCSI 节点,客户端需要一个唯一 IQN 。默认的 /etc/iscsi/initiatorname.iscsi 文件包含一个使用红帽的域生成的 IQN 。管理员通常会将 IQN 重置为其自己的域以及相应的客户端系统字符串。
/etc/iscsi/iscsid.conf 文件包含了在新目标发现期间创建的节点记录的默认设置。设置包括iSCSI超时,重试参数和身份验证用户名及密码。更改此文件需要重新启动iSCSI 服务。
[root@desktop0 ~]# systemctl restart iscsi
要能够发现目标,请安装iscsi-initiator-utils 软件包,然后启用并启动iscsi 服务。在进行设备连接和使用之前 ,必须先发现目标。发现过程将目标节点信息和设置存储在 /var/lib/iscsi/nodes 目录中。并且使用 /etc/iscsi/iscsid.conf 中的默认值。由于同一目标可以存在于多个门户上,将为每个门户存储节点记录。使用以下命令执行发现:
[root@desktop0 ~]# iscsiadm -m discovery -t sendtargets -p server0.example.com
172.25.0.11:3260,1 iqn.2014-06.com.example.com:server0
[root@desktop0 ~]#
在发现模式中。sendtargets 请求仅返回带有为此启动器配置的访问权限的目标。如果目标服务器是在默认端口3260上配置的,则可以活力端口号。在发现后,节点记录将写入到 /var/lib/iscsi/nodes 并用于后续登录 。要使用列出的目标,请使用以下命令来登录:
[root@desktop0 ~]# iscsiadm -m node -T iqn.2014-06.com.example.com:server0 -l
指定商品是可选操作。如果目标存在于多个门户上(例如,在多路径、冗余服务器配置中),在不指定门户的情况下进行登录将会连接到授受此目标名称的每个端口节点。
发现后,使用 iscsiadm 命令获取有关目标的信息,使用选项 -P N 来设置命令详细级别,用 0 指定详细级别的最低输出 。
- iscsiadm -m discovery [ -P 0|1 ]:显示有关已发现目标的信息
- iscsiadm -m node [ -P 0|1 ]:显示有关已和目标的信息
- iscsiadm -m session [ -P 0|1|2|3]:显示有关活动会话的信息
要停止使用某个目标,请使用 iscsiadm 来临时注销。按照设计,节点记录在注销后仍存在并且用于在系统重新启动或 iscsi 服务重新启动后自动登录到目标。使用以下命令注销目标(注意与登录 的类似性)
[root@desktop0 ~]# iscsiadm -m node -T iqn.2014-06.com.example.com:server0 -u
如果未指定门户,则目标将注销所有相关门户。要再次登录 目标,不需要重复发现,因为节点记录已存在。永久注销目标要求删除记录,以便在不执行其他发现的情况下,不会再次进行手动或者自动登录。如果不指定门户,则将删除所有相关门户节点记录。使用以下命令来删除永久节点记录(再次注意命令的相似性)
[root@desktop0 ~]# iscsiadm -m node -T iqn.2014-06.com.example.com:server0 -o delete
实现:
您已被要求在serverX 计算机上创建一个新的 1G iSCSI 目标。此目标应称为 iqn.2014-06.com.example:serverX。此目标仅应由 initiatorname 为 iqn.2014-06.com.example:desktopX 的客户端使用。
您的 desktopX 计算机应持久登录到此目标,并且在 /iscsidisk 上持久挂载一个在该目标上创建的(新)xfs 文件系统 。
1、在您的serverX 计算机上的辅助硬盘上创建一个新的 1G 分区以用作后备储存
[root@server0 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa0abeaa5.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@server0 ~]# partprobe
2、在serverX 上安装所有需要的软件包,然后启动并启用相关相关服务
[root@server0 ~]# yum install targetcli -y
[root@server0 ~]# systemctl enable target
ln -s '/usr/lib/systemd/system/target.service' '/etc/systemd/system/multi-user.target.wants/target.service'
[root@server0 ~]# systemctl start target
3、创建一个名为 iqn.2014-06.com.example:server0 的新 iSCSI 目标(使用新分区作为后备存储),并且仅限于 initiatorname 为 iqn.2014-06.com.example:desktop0 的客户端
[root@server0 ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb34
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> cd backstores/
/backstores> block/ create block_disk1 /dev/sdb1
Created block storage object block_disk1 using /dev/sdb1.
/backstores> cd /iscsi
/iscsi> create iqn.2014-06.com.example:server0
Created target iqn.2014-06.com.example:server0.
Created TPG 1.
/iscsi> iqn.2014-06.com.example:server0/tpg1/acls create iqn.2014-06.com.example:desktop0
Created Node ACL for iqn.2014-06.com.example:desktop0
/iscsi> iqn.2014-06.com.example:server0/tpg1/luns create /backstores/block/block_disk1
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2014-06.com.example:desktop0
/iscsi> iqn.2014-06.com.example:server0/tpg1/portals create 172.25.0.11
Using default IP port 3260
Created network portal 172.25.0.11:3260.
/iscsi> cd /
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 1]
| | o- block_disk1 ................. [/dev/sdb1 (1.0GiB) write-thru activated]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 1]
| o- iqn.2014-06.com.example:server0 ............................... [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 1]
| | o- iqn.2014-06.com.example:desktop0 ................. [Mapped LUNs: 1]
| | o- mapped_lun0 ....................... [lun0 block/block_disk1 (rw)]
| o- luns ...................................................... [LUNs: 1]
| | o- lun0 .............................. [block/block_disk1 (/dev/sdb1)]
| o- portals ................................................ [Portals: 1]
| o- 172.25.0.11:3260 ............................................. [OK]
o- loopback ..................................................... [Targets: 0]
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
4、在server0 计算机上的防火墙打开 iSCSI 的所有相关端口
[root@server0 ~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@server0 ~]# firewall-cmd --reload
success
[root@server0 ~]# ss -tunlp | grep 3260
tcp LISTEN 0 5 172.25.0.11:3260 *:*
5、在您的 desktop0 计算机上,验证是否安装了 iscsi-initiator-utils 软件包,然后将 initiatorname 设置为 iqn.2014-06.com.example:desktop0
[root@desktop0 ~]# yum install iscsi-initiator-utils -y
[root@desktop0 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2014-06.com.example:desktop0
6、发现并登录到新目标,验证新目标设备节点
[root@desktop0 ~]# systemctl enable iscsi
[root@desktop0 ~]# iscsiadm -m discovery -t st -p 172.25.0.11
172.25.0.11:3260,1 iqn.2014-06.com.example:server0
[root@desktop0 ~]# iscsiadm -m node -T iqn.2014-06.com.example:server0 -p 172.25.0.11 -l
Logging in to [iface: default, target: iqn.2014-06.com.example:server0, portal: 172.25.0.11,3260] (multiple)
Login to [iface: default, target: iqn.2014-06.com.example:server0, portal: 172.25.0.11,3260] successful.
[root@desktop0 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
└─sda1 8:1 0 10G 0 part /
sdb 8:16 0 10G 0 disk
sdc 8:32 0 1G 0 disk
sr0 11:0 1 1024M 0 rom
7、在新磁盘上创建xfs文件系统,然后持久将其挂载到 /iscsidisk
[root@desktop0 ~]# mkdir /iscsidisk
[root@desktop0 ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x56c403a4.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (8192-2097151, default 8192):
Using default value 8192
Last sector, +sectors or +size{K,M,G} (8192-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1020 MiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@desktop0 ~]# partprobe
[root@desktop0 ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1 isize=256 agcount=8, agsize=32640 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=261120, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@desktop0 ~]# blkid
/dev/sda1: UUID="9bf6b9f7-92ad-441b-848e-0257cbb883d1" TYPE="xfs"
/dev/sdc1: UUID="536e138c-765c-4bd5-9355-7a29930a13f0" TYPE="xfs"
[root@desktop0 ~]# vim /etc/fstab
UUID=536e138c-765c-4bd5-9355-7a29930a13f0 /iscsidisk xfs _netdev 0 2
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# mount
…………
/dev/sdc1 on /iscsidisk type xfs (rw,relatime,seclabel,attr2,inode64,noquota,_netdev)
[root@desktop0 ~]#