Configurer Proxmox VE 8.x pour NVMe-oF avec stockage ONTAP
L'hôte Proxmox VE 8.x prend en charge les protocoles NVMe over Fibre Channel (NVMe/FC) et NVMe over TCP (NVMe/TCP) avec Asymmetric Namespace Access (ANA). ANA fournit une fonctionnalité de multi-accès équivalente à l'accès aux unités logiques asymétriques (ALUA) dans les environnements iSCSI et FCP.
Apprenez à configurer les hôtes NVMe over Fabrics (NVMe-oF) pour Proxmox VE 8.x. Pour plus d'assistance et d'informations sur les fonctionnalités, consultez "Prise en charge et fonctionnalités ONTAP".
NVMe-oF avec Proxmox VE 8.x présente la limitation connue suivante :
-
La configuration de démarrage SAN pour NVMe-FC n'est pas prise en charge.
Étape 1 : Installez Proxmox VE et le logiciel NVMe, puis vérifiez votre configuration.
Pour configurer votre hôte pour NVMe-oF, vous devez installer les packages logiciels hôte et NVMe, activer le multipathing et vérifier la configuration NQN de votre hôte.
-
Installez Proxmox 8.x sur le serveur. Une fois l'installation terminée, vérifiez que vous utilisez bien le noyau Proxmox 8.x spécifié :
uname -rL'exemple suivant illustre une version du noyau Proxmox :
6.8.12-10-pve
-
Installer le
nvme-cligroupe :apt list|grep nvme-cliL'exemple suivant montre un
nvme-cliversion du paquet :nvme-cli/oldstable,now 2.4+really2.3-3 amd64
-
Installer le
libnvmegroupe :apt list|grep libnvmeL'exemple suivant montre un
libnvmeversion du paquet :libnvme1/oldstable,now 1.3-1+deb12u1 amd64
-
Sur l'hôte, vérifiez la chaîne hostnqn à
/etc/nvme/hostnqn:cat /etc/nvme/hostnqnL'exemple suivant montre un
hostnqnvaleur:nqn.2014-08.org.nvmexpress:uuid:1536c9a6-f954-11ea-b24d-0a94efb46eaf
-
Sur le système ONTAP , vérifiez que le
hostnqnLa chaîne correspond àhostnqnchaîne de caractères pour le sous-système correspondant sur la matrice ONTAP :::> vserver nvme subsystem host show -vserver proxmox_120_122Montrer l'exemple
Vserver Subsystem Priority Host NQN ------- --------- -------- --------- proxmox_120_122 proxmox_120_122 regular nqn.2014-08.org.nvmexpress:uuid:1536c9a6-f954-11ea-b24d-0a94efb46eaf regular nqn.2014-08.org.nvmexpress:uuid:991a7476-f9bf-11ea-8b73-0a94efb46c3b proxmox_120_122_tcp regular nqn.2014-08.org.nvmexpress:uuid:1536c9a6-f954-11ea-b24d-0a94efb46eaf regular nqn.2014-08.org.nvmexpress:uuid:991a7476-f9bf-11ea-8b73-0a94efb46c3b 2 entries were displayed.Si le hostnqnles chaînes ne correspondent pas, utilisez levserver modifycommande pour mettre à jour lehostnqnchaîne sur votre sous-système de stockage ONTAP correspondant pour correspondre à lahostnqnchaîne de/etc/nvme/hostnqnsur l'hôte.
Étape 2 : Configurer NVMe/FC et NVMe/TCP
Configurez NVMe/FC avec des adaptateurs Broadcom/Emulex ou Marvell/QLogic, ou configurez NVMe/TCP à l'aide d'opérations de découverte et de connexion manuelles.
Configuration de NVMe/FC pour une carte Broadcom/Emulex
-
Vérifiez que vous utilisez le modèle d'adaptateur pris en charge :
-
Afficher les noms des modèles :
cat /sys/class/scsi_host/host*/modelnameVous devriez voir le résultat suivant :
LPe35002-M2 LPe35002-M2
-
Afficher les descriptions des modèles :
cat /sys/class/scsi_host/host*/modeldescVous devriez voir un résultat similaire à l’exemple suivant :
Emulex LPe35002-M2 2-Port 32Gb Fibre Channel Adapter Emulex LPe35002-M2 2-Port 32Gb Fibre Channel Adapter
-
-
Vérifiez que vous utilisez la carte Broadcom recommandée
lpfcmicrologiciel et pilote de boîte de réception :-
Afficher la version du firmware :
cat /sys/class/scsi_host/host*/fwrevLa commande renvoie les versions du firmware :
14.0.505.12, sli-4:6:d 14.0.505.12, sli-4:6:d
-
Afficher la version du pilote de la boîte de réception :
cat /sys/module/lpfc/versionL'exemple suivant montre une version de pilote :
0:14.2.0.17
Pour obtenir la liste actuelle des versions de pilotes et de micrologiciels de carte prises en charge, consultez le "Matrice d'interopérabilité".
-
-
Vérifiez-le
lpfc_enable_fc4_typeest défini sur3:cat /sys/module/lpfc/parameters/lpfc_enable_fc4_type -
Vérifiez que vous pouvez afficher vos ports initiateurs :
cat /sys/class/fc_host/host*/port_nameVous devriez voir un résultat similaire à :
0x100000109b95467e 0x100000109b95467f
-
Vérifiez que vos ports initiateurs sont en ligne :
cat /sys/class/fc_host/host*/port_stateVous devriez voir le résultat suivant :
Online Online
-
Vérifiez que les ports initiateurs NVMe/FC sont activés et que les ports cibles sont visibles :
cat /sys/class/scsi_host/host*/nvme_infoMontrer l'exemple
NVME Initiator Enabled XRI Dist lpfc0 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc0 WWPN x10005ced8c531948 WWNN x20005ced8c531948 DID x082400 ONLINE NVME RPORT WWPN x200ed039eac79573 WWNN x200dd039eac79573 DID x060902 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2001d039eac79573 WWNN x2000d039eac79573 DID x060904 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000034 Cmpl 0000000034 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 0000000000142cfb Issue 0000000000142cfc OutIO 0000000000000001 abort 00000005 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000005 Err 00000005 NVME Initiator Enabled XRI Dist lpfc1 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc1 WWPN x10005ced8c531949 WWNN x20005ced8c531949 DID x082500 ONLINE NVME RPORT WWPN x2010d039eac79573 WWNN x200dd039eac79573 DID x062902 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2007d039eac79573 WWNN x2000d039eac79573 DID x062904 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000034 Cmpl 0000000034 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 00000000000d39f1 Issue 00000000000d39f2 OutIO 0000000000000001 abort 00000005 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000005 Err 00000005
Configuration du NVMe/FC pour un adaptateur Marvell/QLogic
-
Vérifiez que vous utilisez les versions de pilote d'adaptateur et de micrologiciel prises en charge :
cat /sys/class/fc_host/host*/symbolic_nameL'exemple suivant montre les versions du pilote et du micrologiciel :
QLE2872 FW:v9.15.00 DVR:v10.02.09.300-k QLE2872 FW:v9.15.00 DVR:v10.02.09.300-k
-
Vérifiez-le
ql2xnvmeenableest défini. L'adaptateur Marvell peut ainsi fonctionner en tant qu'initiateur NVMe/FC :cat /sys/module/qla2xxx/parameters/ql2xnvmeenableLa sortie attendue est 1.
Le protocole NVMe/TCP ne prend pas en charge l'opération de connexion automatique. Au lieu de cela, vous pouvez découvrir les sous-systèmes et espaces de noms NVMe/TCP en exécutant l'opération NVMe/TCP. connect ou connect-all opérations manuellement.
-
Vérifiez que le port initiateur peut obtenir les données de la page du journal de découverte sur les LIF NVMe/TCP pris en charge :
nvme discover -t tcp -w host-traddr -a traddrMontrer l'exemple
nvme discover -t tcp -w 192.168.2.22 -a 192.168.2.30 Discovery Log Number of Records 12, Generation counter 13 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 10 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:discovery traddr: 192.168.2.30 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: 9 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:discovery traddr: 192.168.1.30 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: 12 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:discovery traddr: 192.168.2.25 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: 11 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:discovery traddr: 192.168.1.25 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 4====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 10 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122 traddr: 192.168.2.30 eflags: none sectype: none =====Discovery Log Entry 5====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 9 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122 traddr: 192.168.1.30 eflags: none sectype: none =====Discovery Log Entry 6====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 12 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122 traddr: 192.168.2.25 eflags: none sectype: none =====Discovery Log Entry 7====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 11 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122 traddr: 192.168.1.25 eflags: none sectype: none =====Discovery Log Entry 8====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 10 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122_tcp traddr: 192.168.2.30 eflags: none sectype: none =====Discovery Log Entry 9====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 9 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122_tcp traddr: 192.168.1.30 eflags: none sectype: none =====Discovery Log Entry 10====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 12 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122_tcp traddr: 192.168.2.25 eflags: none sectype: none =====Discovery Log Entry 11====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 11 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122_tcp traddr: 192.168.1.25 eflags: none sectype: none
-
Vérifiez que les autres combinaisons LIF initiateur-cible NVMe/TCP peuvent récupérer avec succès les données de la page du journal de découverte :
nvme discover -t tcp -w host-traddr -a traddrMontrer l'exemple
nvme discover -t tcp -w 192.168.1.22 -a 192.168.1.30 nvme discover -t tcp -w 192.168.2.22 -a 192.168.2.30 nvme discover -t tcp -w 192.168.1.22 -a 192.168.1.25 nvme discover -t tcp -w 192.168.2.22 -a 192.168.2.25
-
Exécutez le
nvme connect-allCommande sur toutes les LIF cible-initiateur NVMe/TCP prises en charge sur l'ensemble des nœuds :nvme connect-all -t tcp -w host-traddr -a traddrMontrer l'exemple
nvme connect-all -t tcp -w 192.168.1.22 -a 192.168.1.30 nvme connect-all -t tcp -w 192.168.2.22 -a 192.168.2.30 nvme connect-all -t tcp -w 192.168.1.22 -a 192.168.1.25 nvme connect-all -t tcp -w 192.168.2.22 -a 192.168.2.25
Le paramètre pour NVMe/TCP ctrl_loss_tmo timeout est automatiquement réglé sur « désactivé ». Par conséquent:
-
Il n'y a pas de limite au nombre de tentatives (nouvelle tentative indéfinie).
-
Vous n'avez pas besoin de configurer manuellement un élément spécifique
ctrl_loss_tmo timeoutdurée lors de l'utilisation dunvme connectounvme connect-allcommandes (option -l ). -
Les contrôleurs NVMe/TCP ne subissent pas de dépassement de délai en cas de défaillance d'un chemin et restent connectés indéfiniment.
Étape 3 : Vous pouvez activer l’E/S à 1 Mo pour NVMe/FC (optionnel).
ONTAP signale une taille de transfert de données maximale (MDTS) de 8 dans les données du contrôleur d'identification. Cela signifie que la taille maximale de la demande d'E/S peut atteindre 1 Mo. Pour émettre des requêtes d'E/S d'une taille de 1 Mo pour un hôte Broadcom NVMe/FC, vous devez augmenter la lpfc valeur de la lpfc_sg_seg_cnt paramètre à 256 à partir de la valeur par défaut de 64.
|
|
Ces étapes ne s'appliquent pas aux hôtes NVMe/FC Qlogic. |
-
Réglez le
lpfc_sg_seg_cntparamètre sur 256 :cat /etc/modprobe.d/lpfc.confVous devriez voir une sortie similaire à l’exemple suivant :
options lpfc lpfc_sg_seg_cnt=256
-
Exécutez le
update-initramfscommande, puis redémarrez l'hôte. -
Vérifier que la valeur de
lpfc_sg_seg_cntest 256 :cat /sys/module/lpfc/parameters/lpfc_sg_seg_cnt
Étape 4 : Vérifier les services de démarrage NVMe
Avec Proxmox 8.x, nvmefc-boot-connections.service et nvmf-autoconnect.service Services de démarrage inclus dans NVMe/FC nvme-cli Les paquets sont automatiquement activés au démarrage du système.
Une fois le démarrage terminé, vérifiez que le nvmefc-boot-connections.service et nvmf-autoconnect.service les services de démarrage sont activés.
-
Vérifiez que
nvmf-autoconnect.serviceest activé :systemctl status nvmf-autoconnect.serviceAffiche un exemple de résultat
○ nvmf-autoconnect.service - Connect NVMe-oF subsystems automatically during boot Loaded: loaded (/lib/systemd/system/nvmf-autoconnect.service; enabled; preset: enabled) Active: inactive (dead) since Fri 2025-11-21 19:59:10 IST; 8s ago Process: 256613 ExecStartPre=/sbin/modprobe nvme-fabrics (code=exited, status=0/SUCCESS) Process: 256614 ExecStart=/usr/sbin/nvme connect-all (code=exited, status=0/SUCCESS) Main PID: 256614 (code=exited, status=0/SUCCESS) CPU: 18ms Nov 21 19:59:07 SR665-14-122.lab.eng.btc.netapp.in systemd[1]: Starting nvmf-autoconnect.service - Connect NVMe-oF subsystems automatically during boot... Nov 21 19:59:10 SR665-14-122.lab.eng.btc.netapp.in nvme[256614]: Failed to write to /dev/nvme-fabrics: Invalid argument Nov 21 19:59:10 SR665-14-122.lab.eng.btc.netapp.in nvme[256614]: Failed to write to /dev/nvme-fabrics: Invalid argument Nov 21 19:59:10 SR665-14-122.lab.eng.btc.netapp.in systemd[1]: nvmf-autoconnect.service: Deactivated successfully. Nov 21 19:59:10 SR665-14-122.lab.eng.btc.netapp.in systemd[1]: Finished nvmf-autoconnect.service - Connect NVMe-oF subsystems automatically during boot. -
Vérifiez que
nvmefc-boot-connections.serviceest activé :systemctl status nvmefc-boot-connections.serviceAffiche un exemple de résultat
○ nvmefc-boot-connections.service - Auto-connect to subsystems on FC-NVME devices found during boot Loaded: loaded (/lib/systemd/system/nvmefc-boot-connections.service; enabled; preset: enabled) Active: inactive (dead) since Thu 2025-11-20 17:48:29 IST; 1 day 2h ago Process: 1381 ExecStart=/bin/sh -c echo add > /sys/class/fc/fc_udev_device/nvme_discovery (code=exited, status=0/SUCCESS) Main PID: 1381 (code=exited, status=0/SUCCESS) CPU: 3ms Nov 20 17:48:29 SR665-14-122.lab.eng.btc.netapp.in systemd[1]: Starting nvmefc-boot-connections.service - Auto-connect to subsystems on FC-NVME devices found during boot.. Nov 20 17:48:29 SR665-14-122.lab.eng.btc.netapp.in systemd[1]: nvmefc-boot-connections.service: Deactivated successfully. Nov 20 17:48:29 SR665-14-122.lab.eng.btc.netapp.in systemd[1]: Finished nvmefc-boot-connections.service - Auto-connect to subsystems on FC-NVME devices found during boot...
Étape 5 : Vérifier la configuration multivoie
Vérifiez que l'état des chemins d'accès multiples NVMe in-kernel, l'état ANA et les namespaces ONTAP sont corrects pour la configuration NVMe-of.
-
Vérifiez que le chemin d'accès multiples NVMe intégré au noyau est activé :
cat /sys/module/nvme_core/parameters/multipathVous devriez voir le résultat suivant :
Y
-
Vérifiez que les paramètres NVMe-oF appropriés (par exemple, le modèle défini sur NetApp ONTAP Controller et la stratégie d'E/S d'équilibrage de charge définie sur round-robin) pour les espaces de noms ONTAP apparaissent correctement sur l'hôte :
-
Afficher les sous-systèmes :
cat /sys/class/nvme-subsystem/nvme-subsys*/modelVous devriez voir le résultat suivant :
NetApp ONTAP Controller NetApp ONTAP Controller
-
Afficher la politique :
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicyVous devriez voir le résultat suivant :
round-robin round-robin
-
-
Vérifiez que les espaces de noms sont créés et correctement découverts sur l'hôte :
nvme listMontrer l'exemple
Node Generic SN Model Namespace Usage Format FW Rev --------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- -------- /dev/nvme2n20 /dev/ng2n20 81K13BUDdygsAAAAAAAG NetApp ONTAP Controller 10 5.56 GB / 91.27 GB 4 KiB + 0 B 9.18.1
-
Vérifiez que l'état du contrôleur de chaque chemin est actif et que l'état ANA est correct :
NVMe/FCnvme list-subsys /dev/nvme2n20Montrer l'exemple
nvme-subsys2 - NQN= nqn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122_tcp \ +- nvme1 fc traddr=nn-0x200dd039eac79573:pn-0x2010d039eac79573,host_traddr=nn-0x20005ced8c531949:pn-0x10005ced8c531949 live optimized +- nvme3 fc traddr=nn-0x200dd039eac79573:pn-0x200ed039eac79573,host_traddr=nn-0x20005ced8c531948:pn-0x10005ced8c531948 live optimized +- nvme5 fc traddr=nn-0x200dd039eac79573:pn-0x200fd039eac79573,host_traddr=nn-0x20005ced8c531949:pn-0x10005ced8c531949 live non-optimized +- nvme7 fc traddr=nn-0x200dd039eac79573:pn-0x2011d039eac79573,host_traddr=nn-0x20005ced8c531948:pn-0x10005ced8c531948 live non-optimized
NVMe/TCPnvme list-subsys /dev/nvme2n3Montrer l'exemple
nvme-subsys2 - NQN= qn.1992-08.com.netapp:sn.ae9f2d55a7ec11ef8751d039ea9e891c:subsystem.proxmox_120_122_tcp \ +- nvme2 tcp traddr=192.168.1.30,trsvcid=4420,host_traddr=192.168.1.22,src_addr=192.168.1.22 live optimized +- nvme4 tcp traddr=192.168.2.30,trsvcid=4420,host_traddr=192.168.2.22,src_addr=192.168.2.22 live optimized +- nvme6 tcp traddr=192.168.1.25,trsvcid=4420,host_traddr=192.168.1.22,src_addr=192.168.1.22 live non-optimized +- nvme8 tcp traddr=192.168.2.25,trsvcid=4420,host_traddr=192.168.2.22,src_addr=192.168.2.22 live non-optimized
-
Vérifier que le plug-in NetApp affiche les valeurs correctes pour chaque périphérique d'espace de noms ONTAP :
Colonnenvme netapp ontapdevices -o columnMontrer l'exemple
Device Vserver Namespace Path ------------- --------------------- ------------------------------ /dev/nvme2n11 proxmox_120_122 / /vol/vm120_tcp1/ns NSID UUID Size ---- ------------------------------------ -------- 1 5aefea74-f0cf-4794-a7e9-e113c4659aca 37.58GB
JSONnvme netapp ontapdevices -o jsonMontrer l'exemple
{ "Device":"/dev/nvme2n11", "Vserver":"proxmox_120_122", "Namespace_Path":"/vol/vm120_tcp1/ns", "NSID":1, "UUID":"5aefea74-f0cf-4794-a7e9-e113c4659aca", “Size”:”37.58GB”, "LBA_Data_Size":4096, "Namespace_Size":32212254720 } ]
Étape 6 : passez en revue les problèmes connus
Il n'y a pas de problème connu.