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

ONTAP SAN ALUA Architecture diagram showing Active/Optimized paths to Node 1 and Active/Non-Optimized paths to Node 2

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):

ONTAP CLI — Inspecting & Modifying Reporting Nodes
# 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:

ONTAP CLI — SAN Provisioning Workflow
# 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.

/etc/multipath.conf — NetApp ONTAP Recommended Configuration
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]"
}
Linux CLI — Restarting & Checking Multipath
# 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_ALUA for standard AFF/FAS; VMW_SATP_DEFAULT_AA for ASA (or SATP_ALUA with active/active rules).
  • Path Selection Policy (PSP): VMW_PSP_RR (Round Robin). By default, ESXi uses VMW_PSP_FIXED for some devices. Switching to Round Robin with an I/O operation limit of 1 delivers optimal load balancing and minimal path latency.
ESXi CLI — Setting Default PSP to Round Robin (iops=1)
# 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):

PowerShell — Windows Server MPIO Configuration
# 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
Linux Native NVMe Multipathing (nvme_core.multipath=Y)
# 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.