ONTAP SAN Host Configuration & Multipathing
A comprehensive engineering guide to configuring block storage on NetApp ONTAP: ALUA target architecture, Selective LUN Mapping (SLM), initiator groups, and verified multipathing configs for Linux DM-Multipath, VMware ESXi, and Windows Server.
1. ONTAP SAN Target Architecture & ALUA
In standard ONTAP (FAS and AFF systems), LUNs reside inside flexible volumes contained within aggregates. Because a volume aggregate is physically owned and serviced by a single cluster node (the home node), ONTAP utilizes ALUA (Asymmetric Logical Unit Access — SCSI T10 standard) to present LUNs across both controller nodes in an HA pair:
| ALUA State | Target Node | I/O Path Behavior | Latency Profile |
|---|---|---|---|
| Active / Optimized (AO) | Node hosting the aggregate / volume | Direct execution on the local WAFL subsystem | Lowest latency, maximum throughput |
| Active / Non-Optimized (ANO) | Partner node in the HA pair | I/O is received on partner LIF and proxied across cluster interconnect | Additional latency (~0.5ms–1.5ms) due to internal fabric traversal |
| Standby / Unavailable | Node not in HA pair or disabled LIF | Path does not accept active SCSI read/write commands | Used only during cluster reconfiguration or failover |
When configured properly, the host multipathing software sends 100% of I/O down the Active/Optimized (AO) paths. If all AO paths fail (e.g. cable pull, local HBA failure), the host immediately switches I/O to the Active/Non-Optimized (ANO) paths through the partner controller, ensuring non-disruptive operations.
2. FAS/AFF Asymmetric vs. ASA Symmetric Active/Active
Depending on the storage platform, ONTAP delivers two distinct multipath models:
- Standard AFF / FAS: Asymmetric ALUA. Paths to the aggregate owner are Active/Optimized; paths to the HA partner are Active/Non-Optimized. Hosts must prioritize AO paths.
- All-SAN Array (ASA) & ASA r2: Symmetric Active/Active. Both controllers in the HA pair serve I/O directly and concurrently to all LUNs with zero interconnect proxy penalty. All paths across both nodes are marked Active/Optimized. Host multipathing policies distribute I/O across all paths simultaneously (Round Robin).
3. Selective LUN Map (SLM) & Reporting Nodes
In ONTAP clusters with 4, 8, or up to 24 nodes, presenting every LUN across all nodes would cause massive path explosion on host initiators (e.g., 24 nodes × 2 LIFs = 48 paths per LUN). High path counts saturate host OS memory and slow down failover discovery scans.
Selective LUN Map (SLM) restricts LUN visibility by default to the two nodes in the HA pair owning the volume (the volume home node and partner node):
# View current reporting nodes for a LUN
cluster1::> lun mapping show -vserver svm_san -volume vol_boot -fields reporting-nodes
# Verify SLM configuration on a volume
cluster1::> lun show -vserver svm_san -volume vol_db -fields select-nodes
# Add destination node to reporting nodes BEFORE moving a volume across HA pairs
cluster1::> lun mapping add-reporting-nodes -vserver svm_san -path /vol/vol_db/lun_db1 -nodes node3,node4 -igroup ig_linux_db
# Move the volume to the new aggregate on node3
cluster1::> volume move start -vserver svm_san -volume vol_db -destination-aggregate aggr1_node3
# Clean up old reporting nodes after volume move completes
cluster1::> lun mapping remove-reporting-nodes -vserver svm_san -path /vol/vol_db/lun_db1 -nodes node1,node2 -igroup ig_linux_db
4. ONTAP CLI Configuration (LUNs, igroups, mappings)
Here is the end-to-end command sequence for creating initiator groups, provisioning LUNs, and binding them with the correct OS type:
# 1. Create an Initiator Group (igroup) with proper ostype
# Available ostypes: linux, vmware, windows, aix, solaris, hpux, netware, openvms, xen
cluster1::> igroup create -vserver svm_san -igroup ig_esxi_cluster -protocol fcp -ostype vmware -initiator 21:00:00:24:ff:52:1a:00,21:00:00:24:ff:52:1a:01
# For iSCSI:
cluster1::> igroup create -vserver svm_san -igroup ig_linux_iscsi -protocol iscsi -ostype linux -initiator iqn.1994-05.com.redhat:srv-app01
# 2. Create the SAN Volume and LUN
cluster1::> volume create -vserver svm_san -volume vol_san_vmfs01 -aggregate aggr1_node1 -size 2TB -space-guarantee none -tiering-policy none
cluster1::> lun create -vserver svm_san -path /vol/vol_san_vmfs01/lun_vmfs01 -size 1.8TB -ostype vmware -space-reserve disabled
# 3. Map the LUN to the igroup
cluster1::> lun map -vserver svm_san -path /vol/vol_san_vmfs01/lun_vmfs01 -igroup ig_esxi_cluster -lun-id 0
# 4. Verify LUN status and mapping
cluster1::> lun show -vserver svm_san -path /vol/vol_san_vmfs01/lun_vmfs01 -instance
5. Linux DM-Multipath Configuration (RHEL, Ubuntu, SLES)
Linux kernels use device-mapper-multipath. NetApp provides standard parameters built into upstream hardware tables, but explicit definitions in /etc/multipath.conf ensure predictable failover timing and path recovery.
defaults {
user_friendly_names yes
find_multipaths no
enable_foreign "^$"
}
devices {
device {
vendor "NETAPP"
product "LUN.*"
path_grouping_policy "group_by_prio"
path_checker "tur"
features "3 queue_if_no_path pg_init_retries 50"
hardware_handler "1 alua"
prio "alua"
failback immediate
rr_weight "uniform"
rr_min_io_rq 1
fast_io_fail_tmo 5
dev_loss_tmo 30
}
}
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z]"
}
# Restart the multipath daemon
# systemctl restart multipathd
# View multipath topology and ALUA priorities
# multipath -ll
# Output Example:
# mpatha (3600a098038304445672b4f6864313233) dm-2 NETAPP,LUN C-Mode
# size=1.8T features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
# |-+- policy='service-time 0' prio=50 status=active <-- Active/Optimized
# | |- 0:0:1:0 sdb 8:16 active ready running
# | `- 1:0:1:0 sdc 8:32 active ready running
# `-+- policy='service-time 0' prio=10 status=enabled <-- Active/Non-Optimized
# |- 0:0:2:0 sdd 8:48 active ready running
# `- 1:0:2:0 sde 8:64 active ready running
6. VMware ESXi Multipathing (NMP, SATP & PSP)
VMware ESXi connects to ONTAP via Native Multipathing Plugin (NMP):
- Storage Array Type Plugin (SATP):
VMW_SATP_ALUAfor standard AFF/FAS;VMW_SATP_DEFAULT_AAfor ASA (or SATP_ALUA with active/active rules). - Path Selection Policy (PSP):
VMW_PSP_RR(Round Robin). By default, ESXi usesVMW_PSP_FIXEDfor some devices. Switching to Round Robin with an I/O operation limit of 1 delivers optimal load balancing and minimal path latency.
# Set default PSP for all future NetApp ALUA LUNs to Round Robin
[root@esxi01:~] esxcli storage nmp satp set --satp=VMW_SATP_ALUA --default-psp=VMW_PSP_RR
# Change existing LUN path policy to Round Robin
[root@esxi01:~] esxcli storage nmp device set --device=naa.600a098038304445672b4f6864313233 --psp=VMW_PSP_RR
# Change the switching frequency to 1 I/O operation (NetApp Best Practice)
[root@esxi01:~] esxcli storage nmp psp roundrobin deviceconfig set --device=naa.600a098038304445672b4f6864313233 --type=iops --iops=1
# Verify path states (Active (I/O) on Optimized paths, Active on Non-Optimized)
[root@esxi01:~] esxcli storage nmp path list --device=naa.600a098038304445672b4f6864313233
7. Microsoft Windows Server MPIO Configuration
Windows Server utilizes the built-in Microsoft MPIO feature with the Microsoft Device Specific Module (MSDSM):
# 1. Install MPIO feature
Install-WindowsFeature -Name Multipath-IO -IncludeManagementTools
# 2. Claim NetApp LUN hardware identifiers
Enable-MSDSMWebsiteSupport
New-MSDSMSupportedHW -VendorId "NETAPP " -ProductId "LUN "
# 3. Configure Load Balance Policy (Round Robin with Subset for ALUA)
# For Standard FAS/AFF: "RoundRobinWithSubset" (RR over AO paths; failover to ANO)
# For ASA: "RoundRobin" (RR across all paths)
Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy RRWS
# 4. Tune Timers for Fast Failover
Set-MPIOSetting -CustomPathRecovery Enabled -PathRecoveryInterval 30 -DiskTimeout 60
8. NVMe-oF (NVMe/FC & NVMe/TCP) Multipathing
ONTAP 9.4+ supports NVMe over Fibre Channel (NVMe/FC) and ONTAP 9.10.1+ supports NVMe over TCP (NVMe/TCP). NVMe-oF does not use SCSI ALUA; instead, it uses the NVMe Asymmetric Namespace Access (ANA) protocol specification.
| ANA Group State | Description | Host Behavior |
|---|---|---|
| ANA Accessible / Optimized | Local node owning the NVMe subsystem subsystem namespace | Active I/O submitted directly |
| ANA Accessible / Non-Optimized | HA partner node | Backup path, used if all optimized paths drop |
| ANA Inaccessible | Nodes outside the reporting set or offline subsystem | No I/O submitted |
| ANA Change State | Volume move or node takeover in progress | Host pauses and queues I/O briefly until new state is published |
# Verify kernel native NVMe multipath is active
# cat /sys/module/nvme_core/parameters/multipath
Y
# Discover and connect to NVMe/FC subsystem
# nvme discover -t fc -a traddr=nn-0x200400a0984f6864:pn-0x200500a0984f6864 -w wwpn=0x21000024ff521a00
# nvme connect-all -t fc -a traddr=nn-0x200400a0984f6864:pn-0x200500a0984f6864
# Display ANA path topology and states
# nvme list-subsys
9. Path Verification & Troubleshooting Commands
Use this diagnostic matrix when experiencing path drops, I/O timeouts, or unexpected latency on SAN LUNs:
| Symptom | Probable Root Cause | Diagnostic & Remediation Commands |
|---|---|---|
| All I/O traversing Non-Optimized paths | Volume aggregate moved to partner or host igroup ostype mismatch | Check volume show -fields home-node,current-node and igroup show -fields ostype. If volume is on partner, giveback or reallocate. |
| Path thrashing / Ping-ponging | Multipath policy set to standard Round Robin without ALUA awareness | In Linux: verify path_grouping_policy "group_by_prio" and prio "alua". In Windows: set RRWS (Round Robin with Subset). |
| LUN missing after reboot | Missing persistent discovery or SAN boot timing race | For iSCSI: ensure node.startup = automatic in /etc/iscsi/iscsid.conf. For FC: check HBA queue depth and link speed. |
| Path drop on node reboot | Single-fabric zoning or missing LIFs on partner node | Verify SAN LIFs exist on both nodes across both Fabric A and Fabric B: network interface show -data-protocol fcp,iscsi. |