第 25 章 在线存储管理
在操作系统运行时,通常最好在操作系统运行时添加、删除或重新调整存储设备,而且无需重新启动。本章概述了在系统运行时,在 Red Hat Enterprise Linux 7 主机系统中重新配置存储设备的步骤。它涵盖了 iSCSI 和光纤通道存储互连;以后可能会添加其他互连类型。
本章重点介绍添加、删除、修改和监控存储设备。它不会详细讨论光纤通道或 iSCSI 协议。有关这些协议的更多信息,请参阅其他文档。
本章引用各种 sysfs 对象。红帽建议 sysfs 对象名称和目录结构在主 Red Hat Enterprise Linux 版本中有所变化。这是因为上游 Linux 内核不提供稳定的内部 API。有关如何以传输的方式引用 sysfs 对象的说明,请参阅内核源树中的文档
/usr/share/doc/kernel-doc-版本/Documentation/sysfs-rules.txt
。
警告
必须谨慎进行在线存储重新配置。处理过程中的系统故障或中断可能会导致意外的结果。红帽建议在更改操作期间最大程度地减少系统负载。这将减少配置更改期间发生 I/O 错误、内存不足或类似错误的可能性。以下章节提供了关于此方面的更具体的指南。
另外,红帽建议您在重新配置在线存储前备份所有数据。
25.1. 目标设置 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 7 使用 targetcli shell 作为前端来查看、编辑和保存 Linux-IO 目标配置,而无需直接操作内核目标的配置文件。targetcli 工具是一个命令行界面,允许管理员将本地存储资源导出,这些资源由文件、卷、本地 SCSI 设备或 RAM 磁盘支持。targetcli 工具具有一个基于树形的布局,包含内置 tab 自动完成功能,并提供完整的自动完成支持和内联文档。
targetcli 的层次结构并不总是与内核接口完全匹配,因为 targetcli 尽可能简化。
重要
要确保 targetcli 中所做的更改是持久的,请启动并启用 target 服务:
systemctl start target systemctl enable target
# systemctl start target
# systemctl enable target
25.1.1. 安装并运行 targetcli 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要安装 targetcli,请使用:
yum install targetcli
# yum install targetcli
启动
目标
服务:
systemctl start target
# systemctl start target
将目标
配置为在引导时启动:
systemctl enable target
# systemctl enable target
在防火墙中打开端口
3260
,并重新载入防火墙配置:
firewall-cmd --permanent --add-port=3260/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=3260/tcp
Success
# firewall-cmd --reload
Success
使用 targetcli 命令,然后使用 ls 命令获取树接口的布局:
注意
在 Red Hat Enterprise Linux 7.0 中,使用 Bash 中的 targetcli 命令(例如 targetcli iscsi/ create )无法正常工作,且不会返回错误。从 Red Hat Enterprise Linux 7.1 开始,提供了一个错误状态代码,以便使用 targetcli 和 shell 脚本。
25.1.2. 创建后端存储 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
后端存储支持在本地计算机上存储导出的 LUN 数据的不同方法。创建存储对象定义了后端存储使用的资源。
注意
在 Red Hat Enterprise Linux 6 中,术语"backing-store"用于引用创建的映射。但是,为了避免在 Red Hat Enterprise Linux 7 中使用 'backstores' 的不同方法混淆,在 Red Hat Enterprise Linux 7 术语 'storage objects' 指的是所创建的映射和"backstores"来描述不同类型的后备设备。
LIO 支持的后端存储设备有:
- FILEIO (Linux 文件支持的存储)
- FILEIO 存储对象可以支持 write_back 或 write_thru 操作。write_back 启用本地文件系统缓存。这提高了性能,但会增加数据丢失的风险。建议您使用 write_back=false 禁用 write_back,而是使用 write_thru。要创建 fileio 存储对象,请运行命令 /backstores/fileio create file_name file_location file_size write_back=false。例如:
/> /backstores/fileio create file1 /tmp/disk1.img 200M write_back=false Created fileio file1 with size 209715200
/> /backstores/fileio create file1 /tmp/disk1.img 200M write_back=false Created fileio file1 with size 209715200
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - BLOCK (Linux BLOCK 设备)
- 块驱动程序允许使用
/sys/block
中出现的任何块设备与 LIO 一起使用。这包括物理设备(如 HDD、SSD、CD、DVD)和逻辑设备(如软件或硬件 RAID 卷或 LVM 卷)。注意BLOCK backstores 通常提供最佳性能。要使用任何块设备创建 BLOCK 后端存储,请使用以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow /> /backstores/block create name=block_backend dev=/dev/vdb Generating a wwn serial. Created block storage object block_backend using /dev/vdb.
/> /backstores/block create name=block_backend dev=/dev/vdb Generating a wwn serial. Created block storage object block_backend using /dev/vdb.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您还可以在逻辑卷中创建 BLOCK 后端存储。 - PSCSI (Linux 直通 SCSI 设备)
- 任何支持直接传递 SCSI 命令且无 SCSI 模拟的存储对象,并且使用
/proc/scsi/scsi
(如 SAS 硬盘驱动器)中显示的底层 SCSI 设备可以配置为后备存储。这个子系统支持 SCSI-3 及更高系统。警告PSCSI 应该只供高级用户使用。高级 SCSI 命令(如 Aysmmetric Logical Unit Assignment (ALUAs)或 Persistent Reservations (ALUAs))或 Persistent Reservations (如 VMware ESX 和 vSphere 使用)通常不会在设备固件中实施,并可能导致故障或崩溃。如果有疑问,请对生产环境设置使用 BLOCK。要为物理 SCSI 设备创建 PSCSI 后端存储,本例中使用/dev/sr0
的 TYPE_ROM 设备,请使用:/> backstores/pscsi/ create name=pscsi_backend dev=/dev/sr0 Generating a wwn serial. Created pscsi storage object pscsi_backend using /dev/sr0
/> backstores/pscsi/ create name=pscsi_backend dev=/dev/sr0 Generating a wwn serial. Created pscsi storage object pscsi_backend using /dev/sr0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 内存复制 RAM 磁盘(Linux RAMDISK_MCP)
- Memory Copy RAM 磁盘(ramdisk)为 RAM 磁盘提供完整的 SCSI 模拟,并使用启动器的内存副本来分隔内存映射。这为多会话提供了功能,对于生产环境的快速易失性存储特别有用。要创建 1GB RAM 磁盘后备存储,请使用以下命令:
/> backstores/ramdisk/ create name=rd_backend size=1GB Generating a wwn serial. Created rd_mcp ramdisk rd_backend with size 1GB.
/> backstores/ramdisk/ create name=rd_backend size=1GB Generating a wwn serial. Created rd_mcp ramdisk rd_backend with size 1GB.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.1.3. 创建 iSCSI 目标 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
创建 iSCSI 目标:
过程 25.1. 创建 iSCSI 目标
- 运行 targetcli。
- 移动到 iSCSI 配置路径:
/> iscsi/
/> iscsi/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意cd 命令还可接受更改目录,并只是列出要移动到的路径。 - 使用默认目标名称创建 iSCSI 目标。
/iscsi> create Created target iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff Created TPG1
/iscsi> create Created target iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff Created TPG1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者使用指定名称创建 iSCSI 目标。/iscsi > create iqn.2006-04.com.example:444 Created target iqn.2006-04.com.example:444 Created TPG1
/iscsi > create iqn.2006-04.com.example:444 Created target iqn.2006-04.com.example:444 Created TPG1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 ls 列出目标时,验证新创建的目标是否可见。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注意
从 Red Hat Enterprise Linux 7.1 开始,每当创建目标时,也会创建一个默认门户。
25.1.4. 配置 iSCSI 门户 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要配置 iSCSI 门户,必须首先创建 iSCSI 目标并与 TPG 关联。有关如何进行此操作的步骤,请参考 第 25.1.3 节 “创建 iSCSI 目标”。
注意
从 Red Hat Enterprise Linux 7.1 创建 iSCSI 目标时,也会创建一个默认门户。此门户设置为使用默认端口号(00:3260)侦听所有 IP 地址。要删除此功能并只添加指定的门户,请使用 /iscsi/iqn-name/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260,然后使用所需信息创建一个新门户。
过程 25.2. 创建 iSCSI 门户
- 移至 TPG。
/iscsi> iqn.2006-04.example:444/tpg1/
/iscsi> iqn.2006-04.example:444/tpg1/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建门户的方法有两种:创建一个默认门户,或者创建一个门户,指定要侦听的 IP 地址。创建默认门户使用默认 iSCSI 端口 3260,并允许目标侦听该端口上的所有 IP 地址。
/iscsi/iqn.20...mple:444/tpg1> portals/ create Using default IP port 3260 Binding to INADDR_Any (0.0.0.0) Created network portal 0.0.0.0:3260
/iscsi/iqn.20...mple:444/tpg1> portals/ create Using default IP port 3260 Binding to INADDR_Any (0.0.0.0) Created network portal 0.0.0.0:3260
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建门户,请指定要侦听的 IP 地址,请使用以下命令:/iscsi/iqn.20...mple:444/tpg1> portals/ create 192.168.122.137 Using default IP port 3260 Created network portal 192.168.122.137:3260
/iscsi/iqn.20...mple:444/tpg1> portals/ create 192.168.122.137 Using default IP port 3260 Created network portal 192.168.122.137:3260
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 ls 命令,验证新创建的门户是否可见。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.1.5. 配置 LUN 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要配置 LUN,首先请创建存储对象。请参阅 第 25.1.2 节 “创建后端存储” 了解更多信息。
过程 25.3. 配置 LUN
- 创建已创建的存储对象的 LUN。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 显示更改。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意请注意,默认的 LUN 名称从 0 开始,而不是在 Red Hat Enterprise Linux 6 中使用 tgtd 时为 1。 - 配置 ACL。如需更多信息,请参阅 第 25.1.6 节 “配置 ACL”。
重要
默认情况下,使用读写权限创建 LUN。如果在创建 ACL 后添加了新的 LUN,则 LUN 将自动映射到所有可用 ACL。这可能导致安全风险。使用以下步骤以只读方式创建 LUN。
过程 25.4. 创建一个只读 LUN
- 要创建具有只读权限的 LUN,首先使用以下命令:
/> set global auto_add_mapped_luns=false Parameter auto_add_mapped_luns is now 'false'.
/> set global auto_add_mapped_luns=false Parameter auto_add_mapped_luns is now 'false'.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这样可防止 LUN 自动映射到现有 ACL,从而允许手动映射 LUN。 - 接下来,使用命令 iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name/ create mapped_lun=next_sequential_LUN_number tpg_lun_or_backstore=backstore write_protect=1 来手动创建 LUN。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mapping_lun1 行现在在结尾有(ro) (不像 mapping_lun0's (rw)),表示它是只读的。 - 配置 ACL。如需更多信息,请参阅 第 25.1.6 节 “配置 ACL”。
25.1.6. 配置 ACL 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
为要连接的每个启动器创建 ACL。这会在启动器连接时强制身份验证,仅允许将 LUN 公开给每个启动器。通常,每个 initator 都具有对 LUN 的独占访问权限。目标和发起方都有唯一的标识名称。必须知道启动器的唯一名称来配置 ACL。对于 open-iscsi 启动器,可在
/etc/iscsi/initiatorname.iscsi
中找到。
过程 25.5. 配置 ACL
- 移动到 acls 目录。
/iscsi/iqn.20...mple:444/tpg1> acls/
/iscsi/iqn.20...mple:444/tpg1> acls/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 ACL。使用启动器上
/etc/iscsi/initiatorname.iscsi
中找到的启动器名称,或者使用更易于记住的名称,请参阅 第 25.2 节 “创建 iSCSI 启动器” 来确保 ACL 与启动器匹配。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意给定示例的行为取决于所使用的设置。在这种情况下,使用全局设置 auto_add_mapped_luns。这会自动将 LUN 映射到任何创建的 ACL。您可以在目标服务器上的 TPG 节点中设置用户创建的 ACL:/iscsi/iqn.20...scsi:444/tpg1> set attribute generate_node_acls=1
/iscsi/iqn.20...scsi:444/tpg1> set attribute generate_node_acls=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 显示更改。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.1.7. 通过以太网配置光纤通道(FCoE)目标 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
除了通过 FCoE 挂载 LUN 外,如 第 25.5 节 “通过以太网接口配置光纤通道” 所述,还支持通过 FCoE 将 LUN 导出到其它机器,并帮助 targetcli。
重要
在继续操作前,请参阅 第 25.5 节 “通过以太网接口配置光纤通道” 并验证基本 FCoE 设置已完成,并且 fcoeadm -i 显示配置的 FCoE 接口。
过程 25.6. 配置 FCoE 目标
- 在 FCoE 接口上创建 FCoE 目标实例。
/> tcm_fc/ create 00:11:22:33:44:55:66:77
/> tcm_fc/ create 00:11:22:33:44:55:66:77
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果系统上存在 FCoE 接口,则创建后相应的选项卡将列出可用的接口。如果没有,请确保fcoeadm -i
显示活动的接口。 - 将后端存储映射到目标实例。
例 25.1. 将后端存储映射到目标实例的示例
/> tcm_fc/00:11:22:33:44:55:66:77
/> tcm_fc/00:11:22:33:44:55:66:77
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /> luns/ create /backstores/fileio/example2
/> luns/ create /backstores/fileio/example2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 允许从 FCoE 启动器访问 LUN。
/> acls/ create 00:99:88:77:66:55:44:33
/> acls/ create 00:99:88:77:66:55:44:33
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,LUN 应该可以被该启动器访问。 - 要使更改在重启后保留,请使用 saveconfig 命令,并在提示时输入 yes。如果没有这样做,则配置将在重新引导后丢失。
- 通过键入 exit 或输入 ctrl+D 退出 targetcli。
25.1.8. 使用 targetcli删除对象 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要删除后端存储,请使用以下命令:
/> /backstores/backstore-type/backstore-name
/> /backstores/backstore-type/backstore-name
要删除 iSCSI 目标(如 ACL)的部分,请使用以下命令:
/> /iscsi/iqn-name/tpg/acls/ delete iqn-name
/> /iscsi/iqn-name/tpg/acls/ delete iqn-name
要删除整个目标,包括所有 ACL、LUN 和门户,请使用以下命令:
/> /iscsi delete iqn-name
/> /iscsi delete iqn-name
25.1.9. targetcli 参考 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
有关 targetcli 的更多信息,请参阅以下资源:
- man targetcli
- targetcli 手册页。它包括示例步骤。
- Andy Grover 的录屏
- 注意这于 2012 年 2 月 28 日上传。因此,服务名称已从 targetcli 改为 target。