Configurar o Ubuntu 26.04 para NVMe-oF com storage ONTAP
NVMe over Fabrics (NVMe-oF), incluindo NVMe over Fibre Channel (NVMe/FC) e outros protocolos de transporte, é suportado no Ubuntu 26.04 e no Asymmetric Namespace Access (ANA). Em ambientes NVMe-oF, o ANA é o equivalente ao multipath ALUA em ambientes iSCSI e FC e é implementado com o multipath NVMe no kernel.
Aprenda como configurar hosts NVMe over Fabrics (NVMe-oF) para Ubuntu 26.04. Para obter mais informações sobre suporte e recursos, veja "Suporte e recursos do Ubuntu ONTAP".
O NVMe-oF com o Ubuntu 26.04 apresenta a seguinte limitação conhecida:
-
A inicialização SAN usando o protocolo NVMe-oF atualmente não é suportada para Ubuntu 26.04 com ONTAP.
Para obter detalhes adicionais sobre as configurações suportadas, consulte o "Ferramenta de Matriz de interoperabilidade".
Passo 1: Instale o Ubuntu e o software NVMe e verifique sua configuração
Para configurar seu host para NVMe-oF, você precisa instalar os pacotes de software do host e do NVMe, habilitar o multipathing e verificar a configuração NQN do seu host.
-
Instale o Ubuntu 26.04 no servidor. Após a conclusão da instalação, verifique se você está executando o kernel do Ubuntu 26.04 especificado:
uname -rExemplo de versão do kernel do Ubuntu:
7.0.0-27-generic
-
Instale o
nvme-clipacote:apt list | grep nvmeO exemplo a seguir mostra um
nvme-cliversão do pacote:nvme-cli/resolute,now 2.16-1 amd64
-
No host Ubuntu 26.04, verifique a string hostnqn em
/etc/nvme/hostnqn:cat /etc/nvme/hostnqnO exemplo a seguir mostra um
hostnqnvalor:nqn.2014-08.org.nvmexpress:uuid:4c4cxxxx-0050-xxxx-8035-c2cxxxxa5933
-
No sistema ONTAP, verifique se a
hostnqnstring de/etc/nvme/hostnqncorresponde àhostnqnstring do subsistema correspondente no sistema de storage ONTAP:vserver nvme subsystem host show -vserver vs_106_fc_nvmeMostrar exemplo
Vserver Subsystem Host NQN ----------- --------------- ---------------------------------------------------------- vs_106_fc_nvme ub_106 nqn.2014-08.org.nvmexpress:uuid:4c4cxxxx-0050-xxxx-8035-c2c04f4a5933
Se as hostnqn`strings não coincidirem, use o comando `vserver modifypara atualizar a stringhostnqnno subsistema do sistema de storage ONTAP correspondente para corresponder à stringhostnqnde/etc/nvme/hostnqnno host.
Etapa 2: Configurar NVMe/FC e NVMe/TCP
Configurar NVMe/FC para adaptadores Broadcom/Emulex ou Marvell/Qlogic, ou configurar NVMe/TCP usando descoberta manual e operações de conexão.
Configurar o NVMe/FC para um adaptador Broadcom/Emulex.
-
Verifique se você está usando o modelo de adaptador suportado:
-
Exibir os nomes dos modelos:
cat /sys/class/scsi_host/host*/modelnameVocê deve ver a seguinte saída:
LPe36002-M64 LPe36002-M64
-
Exibir as descrições do modelo:
cat /sys/class/scsi_host/host*/modeldescVocê deverá ver uma saída semelhante ao seguinte exemplo:
Emulex LPe36002-M64 2-Port 64Gb Fibre Channel Adapter Emulex LPe36002-M64 2-Port 64Gb Fibre Channel Adapter
-
-
Verifique se você está usando o firmware e o driver inbox da Broadcom recomendados:
lpfc-
Exibir a versão do firmware:
cat /sys/class/scsi_host/host*/fwrevO comando retorna as versões do firmware:
14.4.393.25, sli-4:6:d 14.4.393.25, sli-4:6:d
-
Exibir a versão do driver da caixa de entrada:
cat /sys/module/lpfc/versionO exemplo a seguir mostra uma versão do driver:
0:14.4.0.13
+ Para obter a lista atual de versões de firmware e drivers de adaptador suportados, consulte "Ferramenta de Matriz de interoperabilidade".
-
-
Verifique se
lpfc_enable_fc4_typeestá definido como3:cat /sys/module/lpfc/parameters/lpfc_enable_fc4_type -
Verifique se você pode exibir suas portas do iniciador:
cat /sys/class/fc_host/host*/<port_name>Você deverá ver uma saída semelhante a:
0x100000109bf0447b 0x100000109bf0447c
-
Verifique se as portas do iniciador estão online:
cat /sys/class/fc_host/host*/port_stateVocê deve ver a seguinte saída:
Online Online
-
Verifique se as portas do iniciador NVMe/FC estão ativadas e se as portas de destino estão visíveis:
cat /sys/class/scsi_host/host*/nvme_infoMostrar exemplo de saída
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
Configure o NVMe/FC para um adaptador Marvell/QLogic.
-
Verifique se você está usando as versões de firmware e driver do adaptador compatíveis:
cat /sys/class/fc_host/host*/symbolic_nameO exemplo a seguir mostra as versões do driver e do firmware:
QLE2872 FW: v9.15.17 DVR: v10.02.09.100-k QLE2872 FW: v9.15.17 DVR: v10.02.09.100-k
-
Verifique se
ql2xnvmeenableestá definido. Isso permite que o adaptador Marvell funcione como um iniciador NVMe/FC:cat /sys/module/qla2xxx/parameters/ql2xnvmeenableA saída esperada é 1.
O NVMe/TCP não suporta a operação de conexão automática. Em vez disso, você pode descobrir os subsistemas e namespaces do NVMe/TCP executando as operações NVMe/TCP connect ou connect-all manualmente.
-
Verifique se a porta iniciadora consegue obter os dados da página de log de descoberta através das LIFs NVMe/TCP suportadas:
nvme discover -t tcp -w <host-traddr> -a <traddr>Mostrar exemplo
# 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
-
Verifique se as outras combinações de LIF de iniciador-alvo NVMe/TCP podem recuperar com sucesso os dados da página de log de descoberta:
nvme discover -t tcp -w <host-traddr> -a <traddr>Mostrar exemplo de saída
#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
-
Execute o
nvme connect-allcomando em todos os LIFs de destino iniciador NVMe/TCP suportados nos nós:nvme connect-all -t tcp -w <host-traddr> -a <traddr>Mostrar exemplo
#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
A configuração padrão de tempo limite ctrl_loss_tmo para NVMe/TCP está desativada. Isso significa que não há limite para o número de tentativas (tentativa indefinida) e você não precisa configurar manualmente uma duração específica para o tempo limite ctrl_loss_tmo ao usar os nvme connectounvme connect-allcomandos (opção -l). Com esse comportamento padrão, os controladores NVMe/TCP não sofrem timeouts em caso de falha de caminho e permanecem conectados indefinidamente.
Etapa 3: opcionalmente, modifique a iopolicy nas regras udev
A partir do Ubuntu 26.04, a iopolicy padrão para NVMe-oF é definida como queue-depth. Você pode alterar a iopolicy para round-robin modificando as regras do udev.
-
Abra o arquivo de regras do udev em um editor de texto com privilégios de root:
/usr/lib/udev/rules.d/71-nvmf-netapp.rulesVocê deve ver a seguinte saída:
vi /usr/lib/udev/rules.d/71-nvmf-netapp.rules
-
Localize a linha que define a política de E/S (iopolicy) para o controlador NetApp ONTAP , conforme mostrado no exemplo de regra a seguir:
ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="queue-depth" -
Modifique a regra para que a profundidade da fila passe a ser round-robin:
ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="round-robin" -
Recarregue as regras udev e aplique as alterações:
udevadm control --reloadudevadm trigger --subsystem-match=nvme-subsystem -
Verifique a política de iopolicy atual para o seu subsistema:
cat /sys/class/nvme-subsystem/<subsystem>/iopolicyVocê deve ver a seguinte saída:
round-robin
|
|
A nova política de E/S (iopolicy) aplica-se automaticamente aos dispositivos NetApp ONTAP Controller correspondentes. Não é necessário reiniciar. |
Etapa 4: Opcionalmente, habilite 1 MB de E/S para NVMe/FC
O ONTAP relata um Tamanho Máximo de Transferência de Dados (MDTS) de 8 nos dados do Controlador de Identificação. Isso significa que o tamanho máximo da solicitação de E/S pode ser de até 1 MB. Para emitir solicitações de E/S de tamanho 1 MB para um host Broadcom NVMe/FC, você deve aumentar o lpfc valor do lpfc_sg_seg_cnt parâmetro para 256 do valor padrão de 64.
|
|
Essas etapas não se aplicam a hosts Qlogic NVMe/FC. |
-
Defina
lpfc_sg_seg_cnto parâmetro como 256:cat /etc/modprobe.d/lpfc.confVocê deverá ver uma saída semelhante ao exemplo a seguir:
options lpfc lpfc_sg_seg_cnt=256
-
Execute o
dracut -fcomando e reinicie o host. -
Verifique se o valor para
lpfc_sg_seg_cnté 256:cat /sys/module/lpfc/parameters/lpfc_sg_seg_cnt
Etapa 5: verificar os serviços de inicialização NVMe
O nvmefc-boot-connections.service e nvmf-autoconnect.service serviços de inicialização incluídos no NVMe/FC nvme-cli Os pacotes são ativados automaticamente quando o sistema é inicializado.
Após a inicialização ser concluída, verifique se o nvmefc-boot-connections.service e nvmf-autoconnect.service os serviços de inicialização estão habilitados.
-
Verifique se
nvmf-autoconnect.serviceestá ativado:systemctl status nvmf-autoconnect.serviceMostrar exemplo de saída
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. -
Verifique se
nvmefc-boot-connections.serviceestá ativado:systemctl status nvmefc-boot-connections.serviceMostrar exemplo de saída
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>
Etapa 6: verificar a configuração de multipath
Verifique se o status multipath do NVMe no kernel, o status ANA e os namespaces do ONTAP estão corretos para a configuração do NVMe-of.
-
Verifique se o multipath NVMe no kernel está habilitado:
cat /sys/module/nvme_core/parameters/multipathA saída esperada é "Y".
-
Verifique se as configurações apropriadas do NVMe-oF (como, por exemplo, modelo definido como NetApp ONTAP Controller e política de E/S de balanceamento de carga definida como queue-depth) para os respectivos namespaces ONTAP estão refletidas corretamente no host:
-
Exibir os subsistemas:
cat /sys/class/nvme-subsystem/nvme-subsys*/modelVocê deve ver a seguinte saída:
NetApp ONTAP Controller NetApp ONTAP Controller
-
Exibir a política:
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicyVocê deve ver a seguinte saída:
queue-depth queue-depth
-
-
Verifique se os namespaces são criados e descobertos corretamente no host:
nvme listMostrar exemplo de saída
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
-
Verifique se o estado do controlador de cada caminho está ativo e tem o status ANA correto:
NVMe/FCnvme list-subsys /dev/nvme0n1Os exemplos de saída a seguir mostram um namespace hospedado em um controlador ONTAP de dois nós para um sistema AFF, FAS, ASA ou ASA r2 com NVMe/FC.
Exibir exemplos de saída de 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-optimizedExibir exemplo de saída do 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/nvme1n1Os exemplos de saída a seguir mostram um namespace hospedado em um controlador ONTAP de dois nós para um sistema AFF, FAS, ASA ou ASA r2 com NVMe/TCP.
Exibir exemplos de saída de 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 optimizedExibir exemplo de saída do 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 -
Verifique se o plug-in NetApp exibe os valores corretos para cada dispositivo de namespace ONTAP:
Colunanvme netapp ontapdevices -o columnMostrar exemplo de saída
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 jsonMostrar exemplo de saída
{ "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 } ] }
Etapa 7: Revise os problemas conhecidos
Não há problemas conhecidos na configuração do host NVMe-oF para o Ubuntu 26.04 com o ONTAP.