Configurare Ubuntu 26.04 per NVMe-oF con ONTAP storage
NVMe over Fabrics (NVMe-oF), inclusi NVMe over Fibre Channel (NVMe/FC) e altri protocolli di trasporto, è supportato con Ubuntu 26.04 e Asymmetric Namespace Access (ANA). Negli ambienti NVMe-oF, ANA è l'equivalente del multipathing ALUA negli ambienti iSCSI e FC ed è implementato con il multipathing NVMe integrato nel kernel.
Scopri come configurare gli host NVMe over Fabrics (NVMe-oF) per Ubuntu 26.04. Per ulteriori informazioni su supporto e funzionalità, consulta "Supporto e funzionalità di Ubuntu ONTAP".
NVMe-oF con Ubuntu 26.04 presenta la seguente limitazione nota:
-
L'avvio SAN tramite il protocollo NVMe-oF non è attualmente supportato per Ubuntu 26.04 con ONTAP.
Per ulteriori informazioni sulle configurazioni supportate, vedere "Tool di matrice di interoperabilità".
Passaggio 1: installa Ubuntu e il software NVMe e verifica la configurazione
Per configurare l'host per NVMe-oF è necessario installare i pacchetti software host e NVMe, abilitare il multipathing e verificare la configurazione NQN dell'host.
-
Installa Ubuntu 26.04 sul server. Dopo l'installazione, verifica che stai usando il kernel Ubuntu 26.04 specificato:
uname -rEsempio di versione del kernel Ubuntu:
7.0.0-27-generic
-
Installare
nvme-clipacchetto:apt list | grep nvmeL'esempio seguente mostra un
nvme-cliversione del pacchetto:nvme-cli/resolute,now 2.16-1 amd64
-
Sul sistema host Ubuntu 26.04, controlla la stringa hostnqn in
/etc/nvme/hostnqn:cat /etc/nvme/hostnqnL'esempio seguente mostra un
hostnqnvalore:nqn.2014-08.org.nvmexpress:uuid:4c4cxxxx-0050-xxxx-8035-c2cxxxxa5933
-
Sul sistema ONTAP, verificare che la
hostnqnstringa da/etc/nvme/hostnqncorrisponda allahostnqnstringa per il sottosistema corrispondente sul sistema storage ONTAP:vserver nvme subsystem host show -vserver vs_106_fc_nvmeMostra esempio
Vserver Subsystem Host NQN ----------- --------------- ---------------------------------------------------------- vs_106_fc_nvme ub_106 nqn.2014-08.org.nvmexpress:uuid:4c4cxxxx-0050-xxxx-8035-c2c04f4a5933
Se le hostnqnstringhe non corrispondono, usa ilvserver modifycomando per aggiornare lahostnqnstringa sul relativo subsystem del sistema storage ONTAP in modo che corrisponda allahostnqnstringa da/etc/nvme/hostnqnsull'host.
Passaggio 2: configurare NVMe/FC e NVMe/TCP
Configura NVMe/FC per adattatori Broadcom/Emulex o Marvell/Qlogic o configura NVMe/TCP utilizzando rilevamento e operazioni di connessione manuali.
Configurare NVMe/FC per un adattatore Broadcom/Emulex.
-
Verificare che si stia utilizzando il modello di scheda supportato:
-
Visualizza i nomi dei modelli:
cat /sys/class/scsi_host/host*/modelnameViene visualizzato il seguente output:
LPe36002-M64 LPe36002-M64
-
Visualizza le descrizioni dei modelli:
cat /sys/class/scsi_host/host*/modeldescDovresti vedere un output simile al seguente esempio:
Emulex LPe36002-M64 2-Port 64Gb Fibre Channel Adapter Emulex LPe36002-M64 2-Port 64Gb Fibre Channel Adapter
-
-
Verifica di utilizzare il firmware Broadcom
lpfcconsigliato e il driver inbox:-
Visualizza la versione del firmware:
cat /sys/class/scsi_host/host*/fwrevIl comando restituisce le versioni del firmware:
14.4.393.25, sli-4:6:d 14.4.393.25, sli-4:6:d
-
Visualizza la versione del driver in arrivo:
cat /sys/module/lpfc/versionL'esempio seguente mostra la versione del driver:
0:14.4.0.13
+ Per l'elenco aggiornato dei driver della scheda di rete supportati e delle versioni del firmware, vedere "Tool di matrice di interoperabilità".
-
-
Verificare che
lpfc_enable_fc4_typeè impostato su3:cat /sys/module/lpfc/parameters/lpfc_enable_fc4_type -
Verificare che sia possibile visualizzare le porte dell'iniziatore:
cat /sys/class/fc_host/host*/<port_name>Dovresti vedere un output simile a:
0x100000109bf0447b 0x100000109bf0447c
-
Verificare che le porte dell'iniziatore siano in linea:
cat /sys/class/fc_host/host*/port_stateViene visualizzato il seguente output:
Online Online
-
Verificare che le porte iniziatore NVMe/FC siano abilitate e che le porte di destinazione siano visibili:
cat /sys/class/scsi_host/host*/nvme_infoMostra output di esempio
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
Configurare NVMe/FC per un adattatore Marvell/QLogic.
-
Verificare di utilizzare le versioni supportate del driver e del firmware dell'adattatore:
cat /sys/class/fc_host/host*/symbolic_nameL'esempio seguente mostra le versioni del driver e del firmware:
QLE2872 FW: v9.15.17 DVR: v10.02.09.100-k QLE2872 FW: v9.15.17 DVR: v10.02.09.100-k
-
Verificare che
ql2xnvmeenableè impostato. Ciò consente all'adattatore Marvell di funzionare come iniziatore NVMe/FC:cat /sys/module/qla2xxx/parameters/ql2xnvmeenableL'uscita prevista è 1.
NVMe/TCP non supporta l'operazione di connessione automatica. In alternativa, puoi individuare i sottosistemi e gli spazi dei nomi NVMe/TCP eseguendo manualmente le operazioni NVMe/TCP connect o connect-all.
-
Verificare che la porta initiator possa recuperare i dati della discovery log page attraverso i LIF NVMe/TCP supportati:
nvme discover -t tcp -w <host-traddr> -a <traddr>Mostra esempio
# 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
-
Verificare che le altre combinazioni LIF NVMe/TCP initiator-target riescano a recuperare correttamente i dati della pagina del registro di individuazione:
nvme discover -t tcp -w <host-traddr> -a <traddr>Mostra output di esempio
#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
-
Eseguire
nvme connect-allCommand tra tutti i LIF target initiator NVMe/TCP supportati nei nodi:nvme connect-all -t tcp -w <host-traddr> -a <traddr>Mostra esempio
#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
L'impostazione predefinita del timeout di ctrl_loss_tmo per NVMe/TCP è disattivata. Ciò significa che non esiste un limite al numero di tentativi (tentativi illimitati) e non devi configurare manualmente una durata specifica per il timeout di ctrl_loss_tmo quando usi i comandi nvme connectonvme connect-all(opzione -l). Con questo comportamento predefinito, i controller NVMe/TCP non subiscono timeout in caso di errore del percorso e rimangono connessi indefinitamente.
Passaggio 3: Facoltativamente, modificare l'iopolicy nelle regole udev
A partire da Ubuntu 26.04, la iopolicy predefinita per NVMe-oF è impostata su queue-depth. Puoi cambiare la iopolicy in round-robin modificando le regole udev.
-
Aprire il file delle regole udev in un editor di testo con privilegi di root:
/usr/lib/udev/rules.d/71-nvmf-netapp.rulesViene visualizzato il seguente output:
vi /usr/lib/udev/rules.d/71-nvmf-netapp.rules
-
Trova la riga che imposta iopolicy per NetApp ONTAP Controller, come mostrato nella seguente regola di esempio:
ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="queue-depth" -
Modifica la regola in modo che queue-depth diventi round-robin:
ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="round-robin" -
Ricarica le regole udev e applica le modifiche:
udevadm control --reloadudevadm trigger --subsystem-match=nvme-subsystem -
Verifica la iopolicy corrente per il tuo sottosistema:
cat /sys/class/nvme-subsystem/<subsystem>/iopolicyViene visualizzato il seguente output:
round-robin
|
|
La nuova iopolicy si applica automaticamente ai dispositivi NetApp ONTAP Controller corrispondenti. Non è necessario riavviare. |
Passaggio 4: facoltativamente, abilitare 1 MB I/O per NVMe/FC
ONTAP segnala una dimensione massima di trasferimento dati (MDTS) pari a 8 nei dati Identify Controller. Ciò significa che la dimensione massima della richiesta di I/O può arrivare fino a 1 MB. Per emettere richieste di I/O di dimensione 1 MB per un host Broadcom NVMe/FC, è necessario aumentare il lpfc valore del lpfc_sg_seg_cnt parametro a 256 dal valore predefinito di 64.
|
|
Questi passaggi non si applicano agli host Qlogic NVMe/FC. |
-
Impostare il
lpfc_sg_seg_cntparametro su 256:cat /etc/modprobe.d/lpfc.confDovresti vedere un output simile al seguente esempio:
options lpfc lpfc_sg_seg_cnt=256
-
Eseguire il
dracut -fcomando e riavviare l'host. -
Verificare che il valore per
lpfc_sg_seg_cntsia 256:cat /sys/module/lpfc/parameters/lpfc_sg_seg_cnt
Passaggio 5: verificare i servizi di avvio NVMe
IL nvmefc-boot-connections.service E nvmf-autoconnect.service servizi di avvio inclusi in NVMe/FC nvme-cli i pacchetti vengono abilitati automaticamente all'avvio del sistema.
Dopo aver completato l'avvio, verificare che nvmefc-boot-connections.service E nvmf-autoconnect.service i servizi di avvio sono abilitati.
-
Verificare che
nvmf-autoconnect.servicesia attivato:systemctl status nvmf-autoconnect.serviceMostra output di esempio
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. -
Verificare che
nvmefc-boot-connections.servicesia attivato:systemctl status nvmefc-boot-connections.serviceMostra output di esempio
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>
Passaggio 6: verificare la configurazione multipathing
Verificare che lo stato multipath NVMe in-kernel, lo stato ANA e i namespace ONTAP siano corretti per la configurazione NVMe-of.
-
Verificare che il multipath NVMe nel kernel sia attivato:
cat /sys/module/nvme_core/parameters/multipathL'uscita prevista è "Y".
-
Verificare che le impostazioni NVMe-oF appropriate (ad esempio, modello impostato su NetApp ONTAP Controller e iopolicy di bilanciamento del carico impostato su queue-depth) per i rispettivi namespace ONTAP si riflettano correttamente sull'host:
-
Visualizza i sottosistemi:
cat /sys/class/nvme-subsystem/nvme-subsys*/modelViene visualizzato il seguente output:
NetApp ONTAP Controller NetApp ONTAP Controller
-
Visualizza la politica:
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicyViene visualizzato il seguente output:
queue-depth queue-depth
-
-
Verificare che gli spazi dei nomi siano stati creati e rilevati correttamente sull'host:
nvme listMostra output di esempio
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
-
Verificare che lo stato del controller di ciascun percorso sia attivo e che abbia lo stato ANA corretto:
NVMe/FCnvme list-subsys /dev/nvme0n1I seguenti output di esempio mostrano uno spazio dei nomi ospitato su un controller ONTAP a due nodi per un sistema AFF, FAS, ASA o ASA r2 con NVMe/FC.
Mostra l'output di esempio AFF, FAS e 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-optimizedMostra l'output di esempio di 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/nvme1n1I seguenti output di esempio mostrano uno spazio dei nomi ospitato su un controller ONTAP a due nodi per un sistema AFF, FAS, ASA o ASA r2 con NVMe/TCP.
Mostra l'output di esempio AFF, FAS e 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 optimizedMostra l'output di esempio di 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 -
Verificare che il plug-in NetApp visualizzi i valori corretti per ciascun dispositivo dello spazio dei nomi ONTAP:
Colonnanvme netapp ontapdevices -o columnMostra output di esempio
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 jsonMostra output di esempio
{ "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 } ] }
Passaggio 7: rivedi i problemi noti
Non sono noti problemi per la configurazione host NVMe-oF su Ubuntu 26.04 con la release ONTAP.