第 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
25.1.1. 安装并运行 targetcli
要安装 targetcli,请使用:
#
yum install targetcli
启动
目标
服务:
#
systemctl start target
将目标
配置为在引导时启动:
#
systemctl enable target
在防火墙中打开端口
3260
,并重新载入防火墙配置:
#
firewall-cmd --permanent --add-port=3260/tcp Success#
firewall-cmd --reload Success
使用 targetcli 命令,然后使用 ls 命令获取树接口的布局:
#
targetcli
:
/> ls
o- /........................................[...]
o- backstores.............................[...]
| o- block.................[Storage Objects: 0]
| o- fileio................[Storage Objects: 0]
| o- pscsi.................[Storage Objects: 0]
| o- ramdisk...............[Storage Ojbects: 0]
o- iscsi...........................[Targets: 0]
o- loopback........................[Targets: 0]
注意
在 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
- BLOCK (Linux BLOCK 设备)
- 块驱动程序允许使用
/sys/block
中出现的任何块设备与 LIO 一起使用。这包括物理设备(如 HDD、SSD、CD、DVD)和逻辑设备(如软件或硬件 RAID 卷或 LVM 卷)。注意BLOCK backstores 通常提供最佳性能。要使用任何块设备创建 BLOCK 后端存储,请使用以下命令:#
fdisk/dev/vdb
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 0x39dc48fb. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): *Enter* Using default response p Partition number (1-4, default 1): *Enter* First sector (2048-2097151, default 2048): *Enter* Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +250M Partition 1 of type Linux and of size 250 MiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks./> /backstores/block create name=block_backend dev=/dev/vdb Generating a wwn serial. Created block storage object block_backend using /dev/vdb.
注意您还可以在逻辑卷中创建 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
- 内存复制 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.
25.1.3. 创建 iSCSI 目标
创建 iSCSI 目标:
过程 25.1. 创建 iSCSI 目标
- 运行 targetcli。
- 移动到 iSCSI 配置路径:
/> iscsi/
注意cd 命令还可接受更改目录,并只是列出要移动到的路径。 - 使用默认目标名称创建 iSCSI 目标。
/iscsi> create Created target iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff Created TPG1
或者使用指定名称创建 iSCSI 目标。/iscsi > create iqn.2006-04.com.example:444 Created target iqn.2006-04.com.example:444 Created TPG1
- 使用 ls 列出目标时,验证新创建的目标是否可见。
/iscsi > ls o- iscsi.......................................[1 Target] o- iqn.2006-04.com.example:444................[1 TPG] o- tpg1...........................[enabled, auth] o- acls...............................[0 ACL] o- luns...............................[0 LUN] o- portals.........................[0 Portal]
注意
从 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/
- 创建门户的方法有两种:创建一个默认门户,或者创建一个门户,指定要侦听的 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
要创建门户,请指定要侦听的 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
- 使用 ls 命令,验证新创建的门户是否可见。
/iscsi/iqn.20...mple:444/tpg1> ls o- tpg.................................. [enambled, auth] o- acls ......................................[0 ACL] o- luns ......................................[0 LUN] o- portals ................................[1 Portal] o- 192.168.122.137:3260......................[OK]
25.1.5. 配置 LUN
要配置 LUN,首先请创建存储对象。请参阅 第 25.1.2 节 “创建后端存储” 了解更多信息。
过程 25.3. 配置 LUN
- 创建已创建的存储对象的 LUN。
/iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/ramdisk/rd_backend Created LUN 0. /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/block/block_backend Created LUN 1. /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/fileio/file1 Created LUN 2.
- 显示更改。
/iscsi/iqn.20...mple:444/tpg1> ls o- tpg.................................. [enambled, auth] o- acls ......................................[0 ACL] o- luns .....................................[3 LUNs] | o- lun0.........................[ramdisk/ramdisk1] | o- lun1.................[block/block1 (/dev/vdb1)] | o- lun2...................[fileio/file1 (/foo.img)] o- portals ................................[1 Portal] o- 192.168.122.137:3260......................[OK]
注意请注意,默认的 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'.
这样可防止 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。
/> iscsi/iqn.2015-06.com.redhat:target/tpg1/acls/iqn.2015-06.com.redhat:initiator/ create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1 Created LUN 1. Created Mapped LUN 1. /> ls o- / ...................................................... [...] o- backstores ........................................... [...] <snip> o- iscsi ......................................... [Targets: 1] | o- iqn.2015-06.com.redhat:target .................. [TPGs: 1] | o- tpg1 ............................ [no-gen-acls, no-auth] | o- acls ....................................... [ACLs: 2] | | o- iqn.2015-06.com.redhat:initiator .. [Mapped LUNs: 2] | | | o- mapped_lun0 .............. [lun0 block/disk1 (rw)] | | | o- mapped_lun1 .............. [lun1 block/disk2 (ro)] | o- luns ....................................... [LUNs: 2] | | o- lun0 ...................... [block/disk1 (/dev/vdb)] | | o- lun1 ...................... [block/disk2 (/dev/vdc)] <snip>
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/
- 创建 ACL。使用启动器上
/etc/iscsi/initiatorname.iscsi
中找到的启动器名称,或者使用更易于记住的名称,请参阅 第 25.2 节 “创建 iSCSI 启动器” 来确保 ACL 与启动器匹配。例如:/iscsi/iqn.20...444/tpg1/acls> create iqn.2006-04.com.example.foo:888 Created Node ACL for iqn.2006-04.com.example.foo:888 Created mapped LUN 2. Created mapped LUN 1. Created mapped LUN 0.
注意给定示例的行为取决于所使用的设置。在这种情况下,使用全局设置 auto_add_mapped_luns。这会自动将 LUN 映射到任何创建的 ACL。您可以在目标服务器上的 TPG 节点中设置用户创建的 ACL:/iscsi/iqn.20...scsi:444/tpg1>
set attribute generate_node_acls=1 - 显示更改。
/iscsi/iqn.20...444/tpg1/acls> ls o- acls .................................................[1 ACL] o- iqn.2006-04.com.example.foo:888 ....[3 Mapped LUNs, auth] o- mapped_lun0 .............[lun0 ramdisk/ramdisk1 (rw)] o- mapped_lun1 .................[lun1 block/block1 (rw)] o- mapped_lun2 .................[lun2 fileio/file1 (rw)]
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
如果系统上存在 FCoE 接口,则创建后相应的选项卡将列出可用的接口。如果没有,请确保fcoeadm -i
显示活动的接口。 - 将后端存储映射到目标实例。
例 25.1. 将后端存储映射到目标实例的示例
/> tcm_fc/00:11:22:33:44:55:66:77
/> luns/ create /backstores/fileio/example2
- 允许从 FCoE 启动器访问 LUN。
/> acls/ create 00:99:88:77:66:55:44:33
现在,LUN 应该可以被该启动器访问。 - 要使更改在重启后保留,请使用 saveconfig 命令,并在提示时输入 yes。如果没有这样做,则配置将在重新引导后丢失。
- 通过键入 exit 或输入 ctrl+D 退出 targetcli。
25.1.8. 使用 targetcli删除对象
要删除后端存储,请使用以下命令:
/> /backstores/backstore-type/backstore-name
要删除 iSCSI 目标(如 ACL)的部分,请使用以下命令:
/> /iscsi/iqn-name/tpg/acls/ delete iqn-name
要删除整个目标,包括所有 ACL、LUN 和门户,请使用以下命令:
/> /iscsi delete iqn-name
25.1.9. targetcli 参考
有关 targetcli 的更多信息,请参阅以下资源:
- man targetcli
- targetcli 手册页。它包括示例步骤。
- Andy Grover 的录屏
- 注意这于 2012 年 2 月 28 日上传。因此,服务名称已从 targetcli 改为 target。