使用 ONTAP 儲存設備為 Ubuntu 26.04 設定 NVMe-oF
Ubuntu 26.04 支援 NVMe over Fabrics (NVMe-oF),包括 NVMe over Fibre Channel (NVMe/FC) 和其他傳輸方式,並支援非對稱命名空間存取 (ANA)。在 NVMe-oF 環境中,ANA 相當於 iSCSI 和 FC 環境中的 ALUA 多重路徑,並透過核心級 NVMe 多重路徑實作。
了解如何為 Ubuntu 26.04 配置 NVMe over Fabrics(NVMe-oF)主機。有關更多支援和功能資訊,請參閱 "Ubuntu ONTAP 支援與功能"。
NVMe-oF 與 Ubuntu 26.04 有以下已知限制:
-
目前 Ubuntu 26.04 與 ONTAP 不支援使用 NVMe-oF 傳輸協定進行 SAN 開機。
如需支援組態的其他詳細資訊,請參閱"互通性對照表工具"。
步驟 1:安裝 Ubuntu 和 NVMe 軟體並驗證您的組態
若要為 NVMe-oF 設定主機,您需要安裝主機和 NVMe 軟體包,啟用多路徑,並驗證主機 NQN 設定。
-
在伺服器上安裝 Ubuntu 26.04。安裝完成後,請確認您執行的是指定的 Ubuntu 26.04 核心:
uname -rUbuntu 核心版本範例:
7.0.0-27-generic
-
安裝「NVMe-CLI(NVMe - CLI)套件:
apt list | grep nvme下面的例子展示了 `nvme-cli`軟體包版本:
nvme-cli/resolute,now 2.16-1 amd64
-
在 Ubuntu 26.04 主機上,檢查 hostnqn 字串,位於
/etc/nvme/hostnqn:cat /etc/nvme/hostnqn下面的例子展示了 `hostnqn`價值:
nqn.2014-08.org.nvmexpress:uuid:4c4cxxxx-0050-xxxx-8035-c2cxxxxa5933
-
在 ONTAP 系統中,驗證 `hostnqn`字串 `/etc/nvme/hostnqn`是否與 ONTAP 儲存系統中對應子系統的 `hostnqn`字串相符:
vserver nvme subsystem host show -vserver vs_106_fc_nvme顯示範例
Vserver Subsystem Host NQN ----------- --------------- ---------------------------------------------------------- vs_106_fc_nvme ub_106 nqn.2014-08.org.nvmexpress:uuid:4c4cxxxx-0050-xxxx-8035-c2c04f4a5933
如果 hostnqn字串不相符,請使用vserver modify指令來更新對應 ONTAP 儲存系統子系統上的hostnqn字串,使其與主機上/etc/nvme/hostnqn的hostnqn字串相符。
步驟 2:設定 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 LPe36002-M64 2-Port 64Gb Fibre Channel Adapter Emulex LPe36002-M64 2-Port 64Gb Fibre Channel Adapter
-
-
請確認您使用的是推薦的 Broadcom
lpfc韌體和內建驅動程式:-
顯示韌體版本:
cat /sys/class/scsi_host/host*/fwrev該命令返回韌體版本:
14.4.393.25, sli-4:6:d 14.4.393.25, sli-4:6:d
-
顯示收件匣驅動程式版本:
cat /sys/module/lpfc/version以下範例顯示了驅動程式版本:
0:14.4.0.13
+ 如需支援的介面卡驅動程式和韌體版本的最新清單,請參閱"互通性對照表工具"。
-
-
請確認
lpfc_enable_fc4_type設為3:cat /sys/module/lpfc/parameters/lpfc_enable_fc4_type -
確認您可以檢視啟動器連接埠:
cat /sys/class/fc_host/host*/<port_name>您應該會看到類似如下的輸出:
0x100000109bf0447b 0x100000109bf0447c
-
驗證啟動器連接埠是否在線上:
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 x100000109bf0447b WWNN x200000109bf0447b DID x022600 ONLINE NVME RPORT WWPN x200fd039eaa8138b WWNN x200ad039eaa8138b DID x021006 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000187 Cmpl 0000000187 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 0000000014096514 Issue 000000001407fcd6 OutIO fffffffffffe97c2 abort 00000048 noxri 00000000 nondlp 0000001c qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000048 Err 00000077 NVME Initiator Enabled XRI Dist lpfc1 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc1 WWPN x100000109bf0447c WWNN x200000109bf0447c DID x022300 ONLINE NVME RPORT WWPN x2010d039eaa8138b WWNN x200ad039eaa8138b DID x021106 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000187 Cmpl 0000000187 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 00000000140970ed Issue 00000000140813da OutIO fffffffffffea2ed abort 00000047 noxri 00000000 nondlp 0000002b qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000047 Err 00000075
為 Marvell/QLogic 介面卡設定 NVMe / FC 。
-
驗證您使用的適配器驅動程式和韌體版本是否受支援:
cat /sys/class/fc_host/host*/symbolic_name以下範例顯示了驅動程式和韌體版本:
QLE2872 FW: v9.15.17 DVR: v10.02.09.100-k QLE2872 FW: v9.15.17 DVR: v10.02.09.100-k
-
請確認
ql2xnvmeenable已設定。這可讓 Marvell 介面卡作為 NVMe / FC 啟動器運作:cat /sys/module/qla2xxx/parameters/ql2xnvmeenable預期輸出為 1 。
NVMe/TCP 不支援自動連線操作。您可以透過手動執行 NVMe/TCP connect 或 connect-all 操作來探索 NVMe/TCP 子系統和命名空間。
-
檢查啟動器連接埠是否能夠透過支援的 NVMe/TCP LIF 擷取探索記錄頁面資料:
nvme discover -t tcp -w <host-traddr> -a <traddr>顯示範例
# nvme discover -t tcp -w 192.168.167.150 -a 192.168.167.155 Discovery Log Number of Records 8, Generation counter 10 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 4 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:discovery traddr: 192.168.167.156 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: 2 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:discovery traddr: 192.168.166.156 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: 3 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:discovery traddr: 192.168.167.155 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: 1 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:discovery traddr: 192.168.166.155 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 4====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 4 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:subsystem.ubuntu_26.04_tcp_211 traddr: 192.168.167.156 eflags: none sectype: none =====Discovery Log Entry 5====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 2 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:subsystem.ubuntu_26.04_tcp_211 traddr: 192.168.166.156 eflags: none sectype: none =====Discovery Log Entry 6====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 3 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:subsystem.ubuntu_26.04_tcp_211 traddr: 192.168.167.155 eflags: none sectype: none =====Discovery Log Entry 7====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 1 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.9b7d42b764ff11efb8fed039eabac370:subsystem.ubuntu_26.04_tcp_211 traddr: 192.168.166.155 eflags: none sectype: none
-
驗證其他 NVMe/TCP 啟動器-目標 LIF 組合是否可以成功檢索發現日誌頁面資料:
nvme discover -t tcp -w <host-traddr> -a <traddr>顯示範例輸出
#nvme discover -t tcp -w 192.168.167.150 -a 192.168.167.155 #nvme discover -t tcp -w 192.168.167.150 -a 192.168.167.156 #nvme discover -t tcp -w 192.168.166.150 -a 192.168.166.155 #nvme discover -t tcp -w 192.168.166.150 -a 192.168.166.156
-
執行
nvme connect-all跨所有節點支援的 NVMe / TCP 啟動器目標生命體執行命令:nvme connect-all -t tcp -w <host-traddr> -a <traddr>顯示範例
#nvme connect-all -t tcp -w 192.168.167.150 -a 192.168.167.155 #nvme connect-all -t tcp -w 192.168.167.150 -a 192.168.167.156 #nvme connect-all -t tcp -w 192.168.166.150 -a 192.168.166.155 #nvme connect-all -t tcp -w 192.168.166.150 -a 192.168.166.156
NVMe/TCP 的 ctrl_loss_tmo 逾時預設設定為關閉。這表示重試次數沒有限制(無限重試),在使用 `nvme connect`或 `nvme connect-all`命令(選項 -l)時,無需手動設定特定的 ctrl_loss_tmo 逾時時長。在此預設行為下,NVMe/TCP 控制器在路徑故障事件中不會發生逾時,並會無限期保持連線。
步驟 3:(選用)修改 udev 規則中的 iopolicy
從 Ubuntu 26.04 開始,NVMe-oF 的預設 iopolicy 設定為 queue-depth。您可以透過修改 udev 規則將 iopolicy 變更為 round-robin。
-
使用 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}="queue-depth" -
修改規則,使佇列深度變成循環配置資源:
ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="round-robin" -
重新載入udev規則並套用變更:
udevadm control --reloadudevadm trigger --subsystem-match=nvme-subsystem -
請確認子系統目前的 iopolicy:
cat /sys/class/nvme-subsystem/<subsystem>/iopolicy您應該會看到下列輸出:
round-robin
|
|
新的 iopolicy 會自動套用於相符的NetApp ONTAP控制器設備。您無需重啟。 |
步驟 4:(可選)為 NVMe/FC 啟用 1MB I/O
ONTAP在識別控制器資料中報告最大資料傳輸大小 (MDTS) 為 8。這意味著最大 I/O 請求大小可達 1MB。若要向 Broadcom NVMe/FC 主機發出 1MB 大小的 I/O 要求,您應該會增加 `lpfc`的價值 `lpfc_sg_seg_cnt`參數從預設值 64 更改為 256。
|
|
這些步驟不適用於 Qlogic 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
步驟 5:驗證 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: enabled) Active: inactive (dead) since Tue 2026-07-07 08:20:42 UTC; 1 week 6 days ago Invocation: fdc6a9313f584a27af26dc76f3e467c8 Main PID: 15938 (code=exited, status=0/SUCCESS) Mem peak: 2M CPU: 24ms Jul 07 08:20:42 SR630-13-203 systemd[1]: Starting nvmf-autoconnect.service - Connect NVMe-oF subsystems automatically during boot... Jul 07 08:20:42 SR630-13-203 systemd[1]: nvmf-autoconnect.service: Deactivated successfully. Jul 07 08:20:42 SR630-13-203 systemd[1]: Finished nvmf-autoconnect.service - 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 Tue 2026-07-07 08:18:38 UTC; 1 week 6 days ago Invocation: 6f0a5c2d278b461bae223d4450ec6c51 Main PID: 5137 (code=exited, status=0/SUCCESS) Mem peak: 2M CPU: 19ms Jul 07 08:18:38 SR630-13-203 systemd[1]: Starting nvmefc-boot-connections.service - Auto-connect to subsystems on FC-NVME devices found du> Jul 07 08:18:38 SR630-13-203 systemd[1]: nvmefc-boot-connections.service: Deactivated successfully. Jul 07 08:18:38 SR630-13-203 systemd[1]: Finished nvmefc-boot-connections.service - Auto-connect to subsystems on FC-NVME devices found du>
步驟 6:驗證多重路徑組態
驗證核心內建 NVMe 多重路徑狀態, ANA 狀態和 ONTAP 命名空間是否適用於 NVMe 組態。
-
確認已啟用核心內建 NVMe 多重路徑:
cat /sys/module/nvme_core/parameters/multipath預期輸出為「 Y 」。
-
驗證對應的ONTAP命名空間的 NVMe-oF 設定(例如,將型號設定為NetApp ONTAP Controller,並將負載平衡 iopolicy 設定為 queue-depth)是否正確反映在主機上:
-
顯示子系統:
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 SN Model --------------------------------------------------------- /dev/nvme0n1 81CZ5BQuUNfGAAAAAAAB NetApp ONTAP Controller Namespace Usage Format FW Rev ----------------------------------------------------------- 1 21.47 GB / 21.47 GB 4 KiB + 0 B FFFFFFFF
-
確認每個路徑的控制器狀態均為有效、且具有正確的ANA狀態:
NVMe / FCnvme list-subsys /dev/nvme0n1以下範例輸出顯示了託管在雙節點 ONTAP 控制器上的命名空間,適用於具有 NVMe/FC 的 AFF、FAS、ASA 或 ASA r2 系統。
顯示 AFF、FAS 和 ASA 範例輸出
nvme-subsys5 - NQN=nqn.1992-08.com.netapp:sn.f7565b15a66911ef9668d039ea951c46:subsystem.nvme1 hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-c7c04f425633 \ +- nvme126 fc traddr=nn-0x2036d039ea951c45:pn-0x2038d039ea951c45,host_traddr=nn-0x2000f4c7aa0cd7c3:pn-0x2100f4c7aa0cd7c3 live optimized +- nvme176 fc traddr=nn-0x2036d039ea951c45:pn-0x2037d039ea951c45,host_traddr=nn-0x2000f4c7aa0cd7c2:pn-0x2100f4c7aa0cd7c2 live optimized +- nvme5 fc traddr=nn-0x2036d039ea951c45:pn-0x2039d039ea951c45,host_traddr=nn-0x2000f4c7aa0cd7c2:pn-0x2100f4c7aa0cd7c2 live non-optimized +- nvme71 fc traddr=nn-0x2036d039ea951c45:pn-0x203ad039ea951c45,host_traddr=nn-0x2000f4c7aa0cd7c3:pn-0x2100f4c7aa0cd7c3 live non-optimized顯示 ASA r2 範例輸出
nvme-subsys96 - NQN=nqn.1992-08.om.netapp:sn.b351b2b6777b11f0b3c2d039ea5cfc91:subsystem.nvme24 hostnqn=nqn.2014-08.org.nvmexpress:uuid:d3b581b4-c975-11e6-8425-0894ef31a074 \ +- nvme203 fc traddr=nn-0x2011d039ea5cfc90:pn-0x2015d039ea5cfc90,host_traddr=nn-0x200000109bdacc76:pn-0x100000109bdacc76 live optimized +- nvme25 fc traddr=nn-0x2011d039ea5cfc90:pn-0x2014d039ea5cfc90,host_traddr=nn-0x200000109bdacc75:pn-0x100000109bdacc75 live optimized +- nvme30 fc traddr=nn-0x2011d039ea5cfc90:pn-0x2012d039ea5cfc90,host_traddr=nn-0x200000109bdacc75:pn-0x100000109bdacc75 live optimized +- nvme32 fc traddr=nn-0x2011d039ea5cfc90:pn-0x2013d039ea5cfc90,host_traddr=nn-0x200000109bdacc76:pn-0x100000109bdacc76 live optimizedNVMe / TCPnvme list-subsys /dev/nvme1n1以下範例輸出顯示了託管在雙節點 ONTAP 控制器上的命名空間,適用於具有 NVMe/TCP 的 AFF、FAS、ASA 或 ASA r2 系統。
顯示 AFF、FAS 和 ASA 範例輸出
nvme-subsys4 - NQN=nqn.1992-08.com.netapp:sn.64e65e6caae711ef9668d039ea951c46:subsystem.nvme4 hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-c2c04f444d33 \ +- nvme102 tcp traddr=192.168.21.20,trsvcid=4420,host_traddr=192.168.21.1,src_addr=192.168.21.1 live non-optimized +- nvme151 tcp traddr=192.168.21.21,trsvcid=4420,host_traddr=192.168.21.1,src_addr=192.168.21.1 live optimized +- nvme4 tcp traddr=192.168.20.20,trsvcid=4420,host_traddr=192.168.20.1,src_addr=192.168.20.1 live non-optimized +- nvme53 tcp traddr=192.168.20.21,trsvcid=4420,host_traddr=192.168.20.1,src_addr=192.168.20.1 live optimized顯示 ASA r2 範例輸出
nvme-subsys9 - NQN=nqn.1992-08.com.netapp:sn.9927e165694211f0b4f4d039eab31e9d:subsystem.nvme10 hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4cxxxx-0035-xxxx-804b-b7cxxxx44d33 \ +- nvme105 tcp traddr=192.168.39.10,trsvcid=4420,host_traddr=192.168.39.20,src_addr=192.168.39.20 live optimized +- nvme153 tcp traddr=192.168.39.11,trsvcid=4420,host_traddr=192.168.39.20,src_addr=192.168.39.20 live optimized +- nvme57 tcp traddr=192.168.38.11,trsvcid=4420,host_traddr=192.168.38.20,src_addr=192.168.38.20 live optimized +- nvme9 tcp traddr=192.168.38.10,trsvcid=4420,host_traddr=192.168.38.20,src_addr=192.168.38.20 live optimized -
驗證NetApp外掛程式是否顯示每ONTAP 個版本名稱空間裝置的正確值:
欄位nvme netapp ontapdevices -o column顯示範例輸出
Device Vserver Namespace Path NSID UUID Size ------------- ------------- ----------------------- ---- -------------------------------------- --------- /dev/nvme0n1 vs_211_tcp /vol/tcpvol1/ns1 1 1cc7bc78-8d7b-4d8e-a3c4-750f9461a6e9 21.47GB
JSONnvme netapp ontapdevices -o json顯示範例輸出
{ "ONTAPdevices" : [ { "Device":"/dev/nvme0n9", "Vserver":"vs_211_tcp", "Namespace_Path":"/vol/tcpvol9/ns9", "NSID":9, "UUID":"99640dd9-8463-4c12-8282-b525b39fc10b", "Size":"21.47GB", "LBA_Data_Size":4096, "Namespace_Size":5242880 } ] }
步驟 7:檢閱已知問題
對於 Ubuntu 26.04 和 ONTAP 版本,NVMe-oF 主機組態沒有已知問題。