配置 RHEL 9x 以使用 NVMe-oF 和ONTAP存储
Red Hat Enterpirse Linux (RHEL) 主机支持具有非对称命名空间访问 (ANA) 的 NVMe over Fibre Channel (NVMe/FC) 和 NVMe over TCP (NVMe/TCP) 协议。 ANA 提供与 iSCSI 和 FCP 环境中的非对称逻辑单元访问 (ALUA) 等效的多路径功能。
了解如何为 RHEL 9x 配置 NVMe over Fabrics (NVMe-oF) 主机。如需更多支持和功能信息,请参阅 "RHEL ONTAP支持和功能"。
NVMe-oF 与 RHEL 9x 存在以下已知限制:
-
这 `nvme disconnect-all`该命令会断开根文件系统和数据文件系统,可能会导致系统不稳定。请勿在通过 NVMe-TCP 或 NVMe-FC 命名空间从 SAN 启动的系统上执行此操作。
第1步:(可选)启用SAN启动
您可以配置主机以使用 SAN 启动来简化部署并提高可扩展性。使用"互操作性表工具"验证您的 Linux 操作系统、主机总线适配器 (HBA)、HBA 固件、HBA 启动 BIOS 和ONTAP版本是否支持 SAN 启动。
-
在服务器 BIOS 中为 SAN 启动命名空间映射到的端口启用 SAN 启动。
有关如何启用 HBA BIOS 的信息,请参见供应商专用文档。
-
重新启动主机并验证操作系统是否已启动并正在运行。
步骤 2:安装 RHEL 和 NVMe 软件并验证您的配置
要为 NVMe-oF 配置主机,您需要安装主机和 NVMe 软件包,启用多路径,并验证主机 NQN 配置。
-
在服务器上安装 RHEL 9x。安装完成后,请确认您运行的是所需的 RHEL 9x 内核:
uname -rRHEL 内核版本示例:
5.14.0-611.5.1.el9_7.x86_64
-
安装
NVMe-CLI软件包:rpm -qa|grep nvme-cli下面的例子展示了 `nvme-cli`软件包版本:
nvme-cli-2.13-1.el9.x86_64
-
安装
libnvme软件包:rpm -qa|grep libnvme下面的例子展示了 `libnvme`软件包版本:
libnvme-1.13-1.el9.x86_64
-
在主机上,检查 hostnqn 字符串
/etc/nvme/hostnqn:cat /etc/nvme/hostnqn下面的例子展示了 `hostnqn`版本:
nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633
-
在ONTAP系统中,验证以下信息: `hostnqn`字符串匹配 `hostnqn`ONTAP存储系统中相应子系统的字符串:
::> vserver nvme subsystem host show -vserver vs_188显示示例
Vserver Subsystem Priority Host NQN ------- --------- -------- ------------------------------------------------ vs_188 Nvme1 regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 Nvme10 regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 Nvme11 regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 Nvme12 regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 48 entries were displayed.
|
|
如果 `hostnqn`字符串不匹配,请使用 `vserver modify`命令来更新 `hostnqn`相应ONTAP存储系统子系统上的字符串以匹配 `hostnqn`字符串来自 `/etc/nvme/hostnqn`在主机上。 |
步骤 3:配置 NVMe/FC 和 NVMe/TCP
使用 Broadcom/Emulex 或 Marvell/QLogic 适配器配置 NVMe/FC,或使用手动发现和连接操作配置 NVMe/TCP。
为Broadcom/Emulex适配器配置NVMe/FC。
-
验证您使用的适配器型号是否受支持:
-
显示模型名称:
cat /sys/class/scsi_host/host*/modelname您应看到以下输出:
LPe36002-M64 LPe36002-M64
-
显示模型描述:
cat /sys/class/scsi_host/host*/modeldesc您应该看到类似于以下示例的输出:
Emulex LightPulse LPe36002-M64 2-Port 64Gb Fibre Channel Adapter Emulex LightPulse LPe36002-M64 2-Port 64Gb Fibre Channel Adapter
-
-
确认您使用的是建议的Broadcom
lpfc固件和内置驱动程序:-
显示固件版本:
cat /sys/class/scsi_host/host*/fwrev该命令返回固件版本:
14.4.393.53, sli-4:6:d 14.4.393.53, sli-4:6:d
-
显示收件箱驱动程序版本:
cat /sys/module/lpfc/version以下示例显示了驱动程序版本:
0:14.4.0.9
有关支持的适配器驱动程序和固件版本的最新列表,请参见"互操作性表工具"。
-
-
请验证
lpfc_enable_fc4_type设置为3:cat /sys/module/lpfc/parameters/lpfc_enable_fc4_type -
验证是否可以查看启动程序端口:
cat /sys/class/fc_host/host*/port_name以下示例显示端口标识:
0x100000109bf044b1 0x100000109bf044b2
-
验证启动程序端口是否联机:
cat /sys/class/fc_host/host*/port_state您应看到以下输出:
Online Online
-
验证NVMe/FC启动程序端口是否已启用且目标端口是否可见:
cat /sys/class/scsi_host/host*/nvme_info显示示例
NVME Initiator Enabled XRI Dist lpfc0 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc0 WWPN x100000109b954518 WWNN x200000109b954518 DID x020700 ONLINE NVME RPORT WWPN x2022d039eaa7dfc8 WWNN x201fd039eaa7dfc8 DID x020b03 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2023d039eaa7dfc8 WWNN x201fd039eaa7dfc8 DID x020103 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000548 Cmpl 0000000548 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 0000000000001a68 Issue 0000000000001a68 OutIO 0000000000000000 abort 00000000 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000000 Err 00000000 NVME Initiator Enabled XRI Dist lpfc1 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc1 WWPN x100000109b954519 WWNN x200000109b954519 DID x020500 ONLINE NVME RPORT WWPN x2027d039eaa7dfc8 WWNN x2025d039eaa7dfc8 DID x020b01 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 00000005ab Cmpl 00000005ab Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 0000000000086ce1 Issue 0000000000086ce2 OutIO 0000000000000001 abort 0000009c noxri 00000000 nondlp 00000002 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 000000b8 Err 000000b8 NVME Initiator Enabled XRI Dist lpfc2 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc2 WWPN x100000109bf044b1 WWNN x200000109bf044b1 DID x022a00 ONLINE NVME RPORT WWPN x2027d039eaa7dfc8 WWNN x2025d039eaa7dfc8 DID x020b01 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2011d039eaa7dfc8 WWNN x200fd039eaa7dfc8 DID x020b02 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2002d039eaa7dfc8 WWNN x2000d039eaa7dfc8 DID x020b05 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2026d039eaa7dfc8 WWNN x2025d039eaa7dfc8 DID x021301 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2010d039eaa7dfc8 WWNN x200fd039eaa7dfc8 DID x021302 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2001d039eaa7dfc8 WWNN x2000d039eaa7dfc8 DID x021305 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 000000c186 Cmpl 000000c186 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 00000000c348ca37 Issue 00000000c3344057 OutIO ffffffffffeb7620 abort 0000815b noxri 000018b5 nondlp 00000116 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 0000915b Err 000c6091 NVME Initiator Enabled XRI Dist lpfc3 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc3 WWPN x100000109bf044b2 WWNN x200000109bf044b2 DID x021b00 ONLINE NVME RPORT WWPN x2028d039eaa7dfc8 WWNN x2025d039eaa7dfc8 DID x020101 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2012d039eaa7dfc8 WWNN x200fd039eaa7dfc8 DID x020102 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2003d039eaa7dfc8 WWNN x2000d039eaa7dfc8 DID x020105 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2029d039eaa7dfc8 WWNN x2025d039eaa7dfc8 DID x022901 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2013d039eaa7dfc8 WWNN x200fd039eaa7dfc8 DID x022902 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2004d039eaa7dfc8 WWNN x2000d039eaa7dfc8 DID x022905 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 000000c186 Cmpl 000000c186 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 00000000b5761af5 Issue 00000000b564b55e OutIO ffffffffffee9a69 abort 000083d7 noxri 000016ea nondlp 00000195 qdepth 00000000 wqerr 00000002 err 00000000 FCP CMPL: xb 000094a4 Err 000c22e7
为Marvell/QLogic适配器配置NVMe/FC。
-
验证您使用的适配器驱动程序和固件版本是否受支持:
cat /sys/class/fc_host/host*/symbolic_name以下示例显示了驱动程序和固件版本:
QLE2872 FW:v9.15.06 DVR:v10.02.09.400-k QLE2872 FW:v9.15.06 DVR:v10.02.09.400-k
-
请验证
ql2xnvmeenable已设置。这样、Marvell适配器便可用作NVMe/FC启动程序:cat /sys/module/qla2xxx/parameters/ql2xnvmeenable预期输出为1。
NVMe/TCP 协议不支持自动连接操作。相反,您可以通过执行 NVMe/TCP 来发现 NVMe/TCP 子系统和命名空间 `connect`或者 `connect-all`手动操作。
-
检查启动器端口是否可以跨支持的 NVMe/TCP LIF 获取发现日志页面数据:
nvme discover -t tcp -w host-traddr -a traddr显示示例
nvme discover -t tcp -w 192.168.30.15 -a 192.168.30.48 Discovery Log Number of Records 8, Generation counter 18 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 8 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:discovery traddr: 192.168.31.49 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 1====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 7 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:discovery traddr: 192.168.31.48 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 2====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 6 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:discovery traddr: 192.168.30.49 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 3====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 5 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:discovery traddr: 192.168.30.48 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 4====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 8 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:subsystem.Nvme38 traddr: 192.168.31.49 eflags: none sectype: none =====Discovery Log Entry 5====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 7 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:subsystem.Nvme38 traddr: 192.168.31.48 eflags: none sectype: none =====Discovery Log Entry 6====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 6 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:subsystem.Nvme38 traddr: 192.168.30.49 eflags: none sectype: none =====Discovery Log Entry 7====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 5 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:subsystem.Nvme38 traddr: 192.168.30.48 eflags: none sectype: none
-
验证其他 NVMe/TCP 启动器-目标 LIF 组合是否可以成功检索发现日志页面数据:
nvme discover -t tcp -w host-traddr -a traddr显示示例
nvme discover -t tcp -w 192.168.30.15 -a 192.168.30.48 nvme discover -t tcp -w 192.168.30.15 -a 192.168.30.49 nvme discover -t tcp -w 192.168.31.15 -a 192.168.31.48 nvme discover -t tcp -w 192.168.31.15 -a 192.168.31.49
-
运行
nvme connect-all在节点中所有受支持的NVMe/TCP启动程序-目标SIP上运行命令:nvme connect-all -t tcp -w host-traddr -a traddr显示示例
nvme connect-all -t tcp -w 192.168.30.15 -a 192.168.30.48 nvme connect-all -t tcp -w 192.168.30.15 -a 192.168.30.49 nvme connect-all -t tcp -w 192.168.31.15 -a 192.168.31.48 nvme connect-all -t tcp -w 192.168.31.15 -a 192.168.31.49
从 RHEL 9.4 开始,NVMe/TCP 的设置 `ctrl_loss_tmo timeout`自动设置为“关闭”。因此:
-
重试次数没有限制(无限重试)。
-
您不需要手动配置特定的 `ctrl_loss_tmo timeout`使用时长 `nvme connect`或者 `nvme connect-all`命令(选项 -l )。
-
如果发生路径故障,NVMe/TCP 控制器不会超时,并且会无限期地保持连接。
步骤 4:(可选)修改 udev 规则中的 iopolicy
RHEL 9.6 将 NVMe-oF 的默认 iopolicy 设置为 round-robin。如果您使用的是 RHEL 9.6 并且想要更改 iopolicy,请执行以下操作: `queue-depth`修改 udev 规则文件如下:
-
使用 root 权限在文本编辑器中打开 udev 规则文件:
/usr/lib/udev/rules.d/71-nvmf-netapp.rules您应看到以下输出:
vi /usr/lib/udev/rules.d/71-nvmf-netapp.rules
-
找到为NetApp ONTAP控制器设置 iopolicy 的行,如下例所示:
ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="round-robin" -
修改规则,以便
round-robin`变成 `queue-depth:ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="queue-depth" -
重新加载udev规则并应用更改:
udevadm control --reload udevadm trigger --subsystem-match=nvme-subsystem -
请检查子系统的当前 I/O 策略。例如,替换<子系统>
nvme-subsys0。cat /sys/class/nvme-subsystem/<subsystem>/iopolicy您应看到以下输出:
queue-depth.
|
|
新的 iopolicy 会自动应用于匹配的NetApp ONTAP控制器设备。您无需重启。 |
步骤 5:可选,启用 NVMe/FC 的 1MB I/O。
ONTAP在识别控制器数据中报告最大数据传输大小 (MDTS) 为 8。这意味着最大 I/O 请求大小可达 1MB。要向 Broadcom NVMe/FC 主机发出 1MB 大小的 I/O 请求,您应该增加 `lpfc`的价值 `lpfc_sg_seg_cnt`参数从默认值 64 更改为 256。
|
|
这些步骤不适用于逻辑NVMe/FC主机。 |
-
将 `lpfc_sg_seg_cnt`参数设置为256:
cat /etc/modprobe.d/lpfc.conf您应该会看到类似于以下示例的输出:
options lpfc lpfc_sg_seg_cnt=256
-
运行 `dracut -f`命令并重新启动主机。
-
验证的值是否 `lpfc_sg_seg_cnt`为256:
cat /sys/module/lpfc/parameters/lpfc_sg_seg_cnt
步骤 6:验证 NVMe 启动服务
这 `nvmefc-boot-connections.service`和 `nvmf-autoconnect.service`NVMe/FC 中包含的启动服务 `nvme-cli`系统启动时,软件包会自动启用。
启动完成后,验证 `nvmefc-boot-connections.service`和 `nvmf-autoconnect.service`启动服务已启用。
-
验证是否 `nvmf-autoconnect.service`已启用:
systemctl status nvmf-autoconnect.service显示示例输出
nvmf-autoconnect.service - Connect NVMe-oF subsystems automatically during boot Loaded: loaded (/usr/lib/systemd/system/nvmf-autoconnect.service; enabled; preset: disabled) Active: inactive (dead) since Wed 2025-10-29 00:42:03 EDT; 6h ago Main PID: 8487 (code=exited, status=0/SUCCESS) CPU: 66ms Oct 29 00:42:03 R650-14-188 systemd[1]: Starting Connect NVMe-oF subsystems automatically during boot... Oct 29 00:42:03 R650-14-188 systemd[1]: nvmf-autoconnect.service: Deactivated successfully. Oct 29 00:42:03 R650-14-188 systemd[1]: Finished Connect NVMe-oF subsystems automatically during boot. -
验证是否 `nvmefc-boot-connections.service`已启用:
systemctl status nvmefc-boot-connections.service显示示例输出
nvmefc-boot-connections.service - Auto-connect to subsystems on FC-NVME devices found during boot Loaded: loaded (/usr/lib/systemd/system/nvmefc-boot-connections.service; enabled; preset:enabled) Active: inactive (dead) since Wed 2025-10-29 00:41:51 EDT; 6h ago Main PID: 4652 (code=exited, status=0/SUCCESS) CPU: 13ms Oct 29 00:41:51 R650-14-188 systemd[1]: Starting Auto-connect to subsystems on FC-NVME devices found during boot... Oct 29 00:41:51 R650-14-188 systemd[1]: nvmefc-boot-connections.service: Deactivated successfully. Oct 29 00:41:51 R650-14-188 systemd[1]: Finished Auto-connect to subsystems on FC-NVME devices found during boot
步骤 7:验证多路径配置
验证内核NVMe多路径状态、ANA状态和ONTAP命名空间是否适用于NVMe-oF配置。
-
验证是否已启用内核NVMe多路径:
cat /sys/module/nvme_core/parameters/multipath您应看到以下输出:
Y
-
验证主机上是否正确显示了相应ONTAP命名空间的 NVMe-oF 设置(例如,型号设置为NetApp ONTAP Controller,负载均衡 iopolicy 设置为 round-robin):
-
显示子系统:
cat /sys/class/nvme-subsystem/nvme-subsys*/model您应看到以下输出:
NetApp ONTAP Controller NetApp ONTAP Controller
-
显示策略:
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy您应看到以下输出:
queue-depth queue-depth
-
-
验证是否已在主机上创建并正确发现命名空间:
nvme list显示示例
Node Generic SN Model -------------------------------------------------------------------------------------- /dev/nvme100n1 /dev/ng100n1 81LJCJYaKOHhAAAAAAAf NetApp ONTAP Controller Namespace Usage Format FW Rev ----------------------------------------------------------- 0x1 1.19 GB / 5.37 GB 4 KiB + 0 B 9.18.1
-
验证每个路径的控制器状态是否为活动状态且是否具有正确的ANA状态:
NVMe/FCnvme list-subsys /dev/nvme100n1显示示例
nvme-subsys4 - NQN=nqn.1992-08.com.netapp:sn.3623e199617311f09257d039eaa7dfc9:subsystem.Nvme31 hostnqn=nqn.2014-08.org.nvmexpress:uuid: 4c4c4544-0056-5410-8048-b9c04f42563 \ +- nvme199 fc traddr=nn-0x200fd039eaa7dfc8:pn-0x2010d039eaa7dfc8,host_traddr=nn-0x200000109bf044b1:pn-0x100000109bf044b1 live optimized +- nvme246 fc traddr=nn-0x200fd039eaa7dfc8:pn-0x2011d039eaa7dfc8,host_traddr=nn-0x200000109bf044b1:pn-0x100000109bf044b1 live non-optimized +- nvme249 fc traddr=nn-0x200fd039eaa7dfc8:pn-0x2013d039eaa7dfc8,host_traddr=nn-0x200000109bf044b2:pn-0x100000109bf044b2 live optimized +- nvme251 fc traddr=nn-0x200fd039eaa7dfc8:pn-0x2012d039eaa7dfc8,host_traddr=nn-0x200000109bf044b2:pn-0x100000109bf044b2 live non-optimizedNVMe/TCPnvme list-subsys /dev/nvme0n1显示示例
nvme-subsys0 - NQN=nqn.1992-08.com.netapp:sn.51a3c9846e0c11f08f5dd039eaa7dfc9:subsystem.Nvme1 hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b5c04f444d33 \ +- nvme0 tcp traddr=192.168.30.48,trsvcid=4420,host_traddr=192.168.30.15, src_addr=192.168.30.15 live optimized +- nvme1 tcp traddr=192.168.30.49,trsvcid=4420,host_traddr=192.168.30.15, src_addr=192.168.30.15 live non-optimized +- nvme2 tcp traddr=192.168.31.48,trsvcid=4420,host_traddr=192.168.31.15, src_addr=192.168.31.15 live optimized +- nvme3 tcp traddr=192.168.31.49,trsvcid=4420,host_traddr=192.168.31.15, src_addr=192.168.31.15 live non-optimized
-
验证NetApp插件是否为每个ONTAP 命名空间设备显示正确的值:
列nvme netapp ontapdevices -o column显示示例
Device Vserver Subsystem Namespace Path NSID ------------ -------- ----------- ----------------- ---- /dev/nvme0n1 vs_iscsi_tcp Nvme1 /vol/Nvmevol1/ns1 1 UUID Size ------------------------------------- ----- d8efef7d-4dde-447f-b50e-b2c009298c66 26.84GB
JSONnvme netapp ontapdevices -o json显示示例
{ "ONTAPdevices":[ { "Device":"/dev/nvme0n1", "Vserver":"vs_iscsi_tcp", " Subsystem":"Nvme1", "Namespace_Path":"/vol/Nvmevol1/ns1", "NSID":1, "UUID":"d8efef7d-4dde-447f-b50e-b2c009298c66", "LBA_Size":4096, "Namespace_Size":26843545600, }, ] }
步骤 8:设置安全带内身份验证
支持通过 NVMe/TCP 在 RHEL 9x 主机和ONTAP控制器之间进行安全的带内身份验证。
每个主机或控制器必须与一个 `DH-HMAC-CHAP`密钥来设置安全身份验证。 `DH-HMAC-CHAP`密钥是 NVMe 主机或控制器的 NQN 与管理员配置的身份验证密钥的组合。要对其对等方进行身份验证、NVMe主机或控制器必须识别与对等方关联的密钥。
使用 CLI 或配置 JSON 文件设置安全带内身份验证。如果需要为不同的子系统指定不同的dhchap密钥、则必须使用config JSON文件。
使用命令行界面设置安全带内身份验证。
-
获取主机NQN:
cat /etc/nvme/hostnqn -
为 RHEL 9x 主机生成 dhchap 密钥。
以下输出描述了 `gen-dhchap-key`命令参数:
nvme gen-dhchap-key -s optional_secret -l key_length {32|48|64} -m HMAC_function {0|1|2|3} -n host_nqn • -s secret key in hexadecimal characters to be used to initialize the host key • -l length of the resulting key in bytes • -m HMAC function to use for key transformation 0 = none, 1- SHA-256, 2 = SHA-384, 3=SHA-512 • -n host NQN to use for key transformation在以下示例中、将生成一个随机dhchap密钥、其中HMAC设置为3 (SHA-512)。
nvme gen-dhchap-key -m 3 -n nqn.2014- 08.org.nvmexpress:uuid:e6dade64-216d-11ec-b7bb-7ed30a5482c3 DHHC-1:03:wSpuuKbBHTzC0W9JZxMBsYd9JFV8Si9aDh22k2BR/4m852vH7KGlrJeMpzhmyjDWOo0PJJM6yZsTeEpGkDHMHQ255+g=:
-
在ONTAP控制器上、添加主机并指定两个dhchap密钥:
vserver nvme subsystem host add -vserver <svm_name> -subsystem <subsystem> -host-nqn <host_nqn> -dhchap-host-secret <authentication_host_secret> -dhchap-controller-secret <authentication_controller_secret> -dhchap-hash-function {sha-256|sha-512} -dhchap-group {none|2048-bit|3072-bit|4096-bit|6144-bit|8192-bit} -
主机支持两种类型的身份验证方法:单向和双向。在主机上、连接到ONTAP控制器并根据所选身份验证方法指定dhchap密钥:
nvme connect -t tcp -w <host-traddr> -a <tr-addr> -n <host_nqn> -S <authentication_host_secret> -C <authentication_controller_secret> -
验证
nvme connect authentication命令、验证主机和控制器dhchap密钥:-
验证主机dhchap密钥:
cat /sys/class/nvme-subsystem/<nvme-subsysX>/nvme*/dhchap_secret显示单向配置的示例输出
cat /sys/class/nvme-subsystem/nvme-subsys1/nvme*/dhchap_secret DHHC-1:01:hhdIYK7rGxHiNYS4d421GxHeDRUAuY0vmdqCp/NOaYND2PSc: DHHC-1:01:hhdIYK7rGxHiNYS4d421GxHeDRUAuY0vmdqCp/NOaYND2PSc: DHHC-1:01:hhdIYK7rGxHiNYS4d421GxHeDRUAuY0vmdqCp/NOaYND2PSc: DHHC-1:01:hhdIYK7rGxHiNYS4d421GxHeDRUAuY0vmdqCp/NOaYND2PSc:
-
验证控制器dhchap密钥:
cat /sys/class/nvme-subsystem/<nvme-subsysX>/nvme*/dhchap_ctrl_secret显示双向配置的示例输出
cat /sys/class/nvme-subsystem/nvme- subsys*/nvme*/dhchap_ctrl_secret DHHC-1:03:ZCRrP9MQOeXhFitT7Fvvf/3P6K/qY1HfSmSfM8nLjESJdOjbjK/J6m00ygJgjm0VrRlrgrnHzjtWJmsnoVBO3rPDGEk=: DHHC-1:03:ZCRrP9MQOeXhFitT7Fvvf/3P6K/qY1HfSmSfM8nLjESJdOjbjK/J6m00ygJgjm0VrRlrgrnHzjtWJmsnoVBO3rPDGEk=: DHHC-1:03:ZCRrP9MQOeXhFitT7Fvvf/3P6K/qY1HfSmSfM8nLjESJdOjbjK/J6m00ygJgjm0VrRlrgrnHzjtWJmsnoVBO3rPDGEk=: DHHC-1:03:ZCRrP9MQOeXhFitT7Fvvf/3P6K/qY1HfSmSfM8nLjESJdOjbjK/J6m00ygJgjm0VrRlrgrnHzjtWJmsnoVBO3rPDGEk=:
-
当ONTAP控制器上有多个 NVMe 子系统可用时,您可以使用 `/etc/nvme/config.json`文件与 `nvme connect-all`命令。
使用 `-o`选项来生成 JSON 文件。有关更多语法选项,请参阅 NVMe connect-all 手册页。
-
配置 JSON 文件。
在以下示例中, dhchap_key`对应于 `dhchap_secret`和 `dhchap_ctrl_key`对应于 `dhchap_ctrl_secret。显示示例
cat /etc/nvme/config.json [ { "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b5c04f444d33", "hostid":"4c4c4544-0035-5910-804b-b5c04f444d33", "dhchap_key":"DHHC-1:01:GhgaLS+0h0W/IxKhSa0iaMHg17SOHRTzBduPzoJ6LKEJs3/f:", "subsystems":[ { "nqn":"nqn.1992-08.com.netapp:sn.2c0c80d9873a11f0bc60d039eab6cb6d:subsystem.istpMNTC_subsys", "ports":[ { "transport":"tcp", "traddr":"192.168.30.44", "host_traddr":"192.168.30.15", "trsvcid":"4420", "dhchap_ctrl_key":"DHHC-1:03:GaraCO84o/uM0jF4rKJlgTy22bVoV0dRn1M+9QDfQRNVwJDHfPu2LrK5Y+/XG8iGcRtBCdm3 fYm3ZmO6NiepCORoY5Q=:" }, { "transport":"tcp", "traddr":"192.168.30.45" "host_traddr":"192.168.30.15", "trsvcid":"4420", "dhchap_ctrl_key":"DHHC-1:03:GaraCO84o/uM0jF4rKJlgTy22bVoV0dRn1M+9QDfQRNVwJDHfPu2LrK5Y+/XG8iGcRtBCdm3 fYm3ZmO6NiepCORoY5Q=:" }, { "transport":"tcp", "traddr":"192.168.31.44", "host_traddr":"192.168.31.15", "trsvcid":"4420", "dhchap_ctrl_key":"DHHC- 1:03: GaraCO84o/uM0jF4rKJlgTy22bVoV0dRn1M+9QDfQRNVwJDHfPu2LrK5Y+/XG8iGc RtBCdm3fYm3ZmO6NiepCORoY5Q=:" }, { "transport":"tcp", "traddr":"192.168.31.45", "host_traddr":"192.168.31.15", "trsvcid":"4420", "dhchap_ctrl_key":"DHHC- 1:03: GaraCO84o/uM0jF4rKJlgTy22bVoV0dRn1M+9QDfQRNVwJDHfPu2LrK5Y+/XG8iGcRtBCdm3fYm3ZmO6NiepCORoY5Q=:" } ] ] } ] -
使用config JSON文件连接到ONTAP控制器:
nvme connect-all -J /etc/nvme/config.json显示示例
already connected to hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b5c04f444d33,nqn=nqn.1992-08.com.netapp:sn.2c0c80d9873a11f0bc60d039eab6cb6d:subsystem.istpMNTC_subsys,transport=tcp,traddr=192.168.30.44,trsvcid=4420 already connected to hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b5c04f444d33,nqn=nqn.1992-08.com.netapp:sn.2c0c80d9873a11f0bc60d039eab6cb6d:subsystem.istpMNTC_subsys,transport=tcp,traddr=192.168.31.44,trsvcid=4420 already connected to hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b5c04f444d33,nqn=nqn.1992-08.com.netapp:sn.2c0c80d9873a11f0bc60d039eab6cb6d:subsystem.istpMNTC_subsys,transport=tcp,traddr=192.168.30.45,trsvcid=4420 already connected to hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b5c04f444d33,nqn=nqn.1992-08.com.netapp:sn.2c0c80d9873a11f0bc60d039eab6cb6d:subsystem.istpMNTC_subsys,transport=tcp,traddr=192.168.31.45,trsvcid=4420
-
验证是否已为每个子系统的相应控制器启用dhchap密码:
-
验证主机dhchap密钥:
cat /sys/class/nvme-subsystem/nvme-subsys96/nvme96/dhchap_secret以下示例显示了 dhchap 密钥:
DHHC-1:01:hhdIYK7rGxHiNYS4d421GxHeDRUAuY0vmdqCp/NOaYND2PSc:
-
验证控制器dhchap密钥:
cat /sys/class/nvme-subsystem/nvme-subsys96/nvme96/dhchap_ctrl_secret您应该看到类似于以下示例的输出:
DHHC-1:03:ZCRrP9MQOeXhFitT7Fvvf/3P6K/qY1HfSmSfM8nLjESJdOjbjK/J6m00ygJgjm0VrRlrgrnHzjtWJmsnoVBO3rPDGEk=:
-
第9步:查看已知问题
这些是已知问题:
| NetApp 错误 ID | 标题 | Description |
|---|---|---|
1503468 |
在 RHEL 9.1 中, `nvme list-subsys`该命令返回给定子系统的重复 NVMe 控制器列表 |
这 `nvme list-subsys`命令返回给定子系统的 NVMe 控制器列表。在 RHEL 9.1 中,此命令显示子系统中所有命名空间的控制器及其 ANA 状态。由于 ANA 状态是每个命名空间的属性,因此该命令应显示具有每个命名空间的路径状态的唯一控制器条目。 |
RHEL 9.0 NVMe-oF 主机创建重复的持久发现控制器 (PDC) |
在 NVMe-oF 主机上,您可以使用 |