ALUA and multipath I/O

In Lesson 23 your Linux host found one LUN through two paths, and sanlun called one of them primary and the other secondary. That label isn’t random, and getting it wrong can quietly double your latency.

Here you’ll learn how ONTAP tells a host which path is best (ALUA), how the host’s multipath software uses that, and what happens when the LUN moves or a port dies.

Where this lesson fits

Lesson 24 of 56 in NetApp ONTAP Storage Administration · Phase 2: Protocols and day-to-day administration · Before this: Lesson 23, LUNs and igroups · Next: Lesson 25, iSCSI on Linux

TimeYou needBy the end you can
50 minutesThe practice shell; optionally linux1 from Lesson 2Read path states, explain Active/Optimized and Active/Non-optimized, and check that a host fails over to its other path

What it is, in one line

ALUA (Asymmetric Logical Unit Access) is how ONTAP tells a host “this path is the short road, that one is the long road”, so multipath software sends I/O down the short road and keeps the long one for emergencies.

In Simple Words

Two roads to the same shop

Say you go to a shop every day. One road takes you straight to its front door. The other road reaches the back gate, and the shopkeeper has to walk through the store to serve you, so it takes longer.

Both roads work. On a normal day you take the front road, but if it’s dug up for repairs you happily use the back gate rather than go home empty-handed.

ALUA is the signboard that says which road is the front one, and your multipath software is the driver that reads it.

Engineer's View

How an engineer describes it

A LUN belongs to a volume, and the volume sits on an aggregate owned by one node. Paths through that node’s LIFs are Active/Optimized (AO). Paths through its HA partner are Active/Non-optimized (ANO): they work, but each I/O has to cross the cluster network to the owning node, which adds latency.

The host learns these states with the SCSI REPORT TARGET PORT GROUPS command. Linux dm-multipath (with prio alua and hardware_handler "1 alua"), Windows MPIO with the ONTAP DSM policy, and VMware’s VMW_SATP_ALUA all group the paths by priority and send I/O only to the AO group while it has a working path.

The states follow the data. Move the volume to the partner’s aggregate, or take over a node, and ONTAP flips the states; the host picks it up on its next check. SAN LIFs themselves never fail over, so the host must always have paths through both nodes.

How it works, step by step

1The host logs in to LIFs on both nodes

One iSCSI LIF (or FC LIF) per node is the minimum. With SLM, only the owning node and its partner report the LUN, so a host normally sees two paths per fabric or network.

ONTAP ALUA path selection from LUN to application

2ONTAP reports a state for each path

The node that owns the aggregate answers “optimized”, the partner answers “non-optimized”. In multipath -ll you see two path groups: prio=50 status=active for AO and prio=10 status=enabled for ANO.

3Multipath sends I/O down the AO group

Inside the AO group the host spreads I/O over all optimized paths (service-time or round-robin). The ANO group stays idle while any AO path works.

ONTAP ALUA failover from optimized to non-optimized path

4Something changes, and the host adapts

If every AO path fails, I/O moves to the ANO group and keeps running, a bit slower. If the volume moves to the partner, ONTAP swaps the states and the host follows without a remount.

Host OSMultipath stackCheck command
Linux (RHEL, Rocky, Ubuntu, SUSE)dm-multipath, built-in NETAPP defaultsmultipath -ll
Windows ServerMPIO feature + ONTAP DSM settings (Round Robin with Subset)mpclaim -s -d
VMware ESXiNMP with VMW_SATP_ALUA, Round Robin PSPesxcli storage nmp device list

In System Manager you won’t see per-path states; open Hosts › SAN Initiator Groups to check the initiators are connected, and use the host’s own tools for paths.

System Manager SAN initiator groups page showing ig_linux1 and ig_win1 with initiators connected
System Manager: Hosts > SAN initiator groups shows whether each host initiator is connected; path states come from the host.

Good to know: how many paths is enough

More paths don’t always mean more safety. NetApp’s guidance is to stay at or below eight paths from a host to each node, and with Selective LUN Map a LUN normally reports paths only through its owning node and that node’s HA partner.

A common design is two paths per fabric or network: one through the owning node (optimized) and one through the partner (non-optimized). That gives four paths per LUN, which survives a switch, a cable or a controller failure without making path lists hard to read.

Hands-on lab: watch optimized paths move

Before you run any command, double-check it

Read every command twice before you press Enter. Check the target: the server name, the user, the disk or device name, the path and the sizes. These commands are for learning and were tested in our lab, not on your system. At work, run the read-only commands first, follow your change process, make sure a backup exists, and ask a second person to check anything that changes or deletes data. You run them at your own risk.

This lab uses the SaatVedha ONTAP practice shell, our own learning tool. It is not NetApp software: real ONTAP output looks like this but is not identical.

1Build the starting point

This setup file repeats Lesson 23: an SVM with an iSCSI LIF on each node, a 20 GB LUN on node 01’s aggregate, and linux1 logged in. Save it as setup-24.txt.

storage aggregate create -aggregate aggr1_01 -node saat-cluster-01 -diskcount 8 -disktype SAS
storage aggregate create -aggregate aggr1_02 -node saat-cluster-02 -diskcount 8 -disktype SAS
vserver create -vserver svm1 -aggregate aggr1_01 -rootvolume-security-style unix
network interface create -vserver svm1 -lif svm1_iscsi1 -service-policy default-data-iscsi -home-node saat-cluster-01 -home-port e0d -address 192.168.56.131 -netmask 255.255.255.0
network interface create -vserver svm1 -lif svm1_iscsi2 -service-policy default-data-iscsi -home-node saat-cluster-02 -home-port e0d -address 192.168.56.132 -netmask 255.255.255.0
vserver iscsi create -vserver svm1
volume create -vserver svm1 -volume vol_db1 -aggregate aggr1_01 -size 24g -space-guarantee none -snapshot-policy none
lun create -vserver svm1 -path /vol/vol_db1/lun_db1 -size 20g -ostype linux -space-reserve disabled
lun igroup create -vserver svm1 -igroup ig_linux1 -protocol iscsi -ostype linux -initiator iqn.2004-10.com.ubuntu:01:5a7e1a2b3c4d
lun mapping create -vserver svm1 -path /vol/vol_db1/lun_db1 -igroup ig_linux1
simctl host linux1 iscsi-discover 192.168.56.131
simctl host linux1 iscsi-login
simctl host linux1 rescan
python ontapsim.py -c "simctl reset"
python ontapsim.py --run setup-24.txt

✅ Checkpoint: The last line says 2 new or changed device(s) found.

2Read the paths from the host

simctl host linux1 multipath
simctl host linux1 sanlun

You should see this (sanlun trimmed):

3600a0980574c595642543063646d767 dm-2 NETAPP,LUN C-Mode
size=20G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- 30:0:0:0 sdj 8:16 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
  `- 32:0:0:0 sdl 8:48 active ready running
saat-cluster::> simctl host linux1 sanlun

                    ONTAP Path: svm1:/vol/vol_db1/lun_db1
                           LUN: 0
...
up        primary    sdb     host30       svm1_iscsi1
up        secondary  sdc     host31       svm1_iscsi2

Two path groups: prio=50 (active) is the optimized group and prio=10 (enabled) is the standby. sanlun names the LIF behind each path: primary through svm1_iscsi1 on node 01, which owns aggr1_01. The WWID and sd names on your screen may differ.

✅ Checkpoint: You can say which LIF carries the optimized path.

3Move the LUN’s volume to the partner

volume move start -vserver svm1 -volume vol_db1 -destination-aggregate aggr1_02
simctl tick 3
volume show -vserver svm1 -volume vol_db1 -fields aggregate,node
simctl host linux1 sanlun

You should see this (trimmed):

vserver volume  aggregate node
------- ------- --------- ---------------
svm1    vol_db1 aggr1_02  saat-cluster-02
saat-cluster::> simctl host linux1 sanlun
...
up        secondary  sdb     host30       svm1_iscsi1
up        primary    sdc     host31       svm1_iscsi2

The volume now lives on node 02, so the path through svm1_iscsi2 became primary. The host didn’t log out, remount or rescan: ALUA told it the roads had swapped.

✅ Checkpoint: primary now shows svm1_iscsi2.

4Check the reporting nodes

lun mapping show -vserver svm1 -fields reporting-nodes

You should see this:

vserver path                 igroup    reporting-nodes
------- -------------------- --------- -------------------------------
svm1    /vol/vol_db1/lun_db1 ig_linux1 saat-cluster-01,saat-cluster-02

The move stayed inside one HA pair, so nothing needed to change. On a bigger cluster, before you move a LUN’s volume to another HA pair, run lun mapping add-reporting-nodes -vserver svm1 -path /vol/vol_db1/lun_db1 -igroup ig_linux1 -destination-aggregate <new aggr>, then rescan the hosts so they see the new paths first.

✅ Checkpoint: Both nodes are reporting nodes.

5If you built linux1 in Lesson 2

On a real Ubuntu host, sudo multipath -ll shows the same two groups. The NETAPP defaults are already built into dm-multipath, so the /etc/multipath.conf file only has to exist with a basic defaults section; don’t copy old overrides into it. You’ll set this up for real in Lesson 25.

Practice shell: ONTAP ALUA primary path moves to svm1_iscsi2 after a volume move
After the volume move, the primary (optimized) path is svm1_iscsi2 on node 02.

Break It, Then Fix It

Now take away the optimized road and see what the host does.

1Pull the cable on the owning node’s iSCSI port

vol_db1 lives on node 02 after the move, so break node 02’s e0d:

simctl break port-down saat-cluster-02 e0d
simctl host linux1 multipath
simctl host linux1 sanlun

You’ll get this (sanlun trimmed):

3600a0980574c595642543063646d767 dm-2 NETAPP,LUN C-Mode
size=20G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
`-+- policy='service-time 0' prio=10 status=enabled
  `- 30:0:0:0 sdj 8:16 active ready running
saat-cluster::> simctl host linux1 sanlun
...
up        secondary  sdb     host30       svm1_iscsi1

The LUN is still there and I/O carries on, but only through the non-optimized path on node 01. Every I/O now crosses the cluster network, and on a busy system users would notice the extra latency.

Practice shell: optimized path lost when port e0d goes down
Only the prio=10 group is left: the host is running on the non-optimized path.

2Find the cause from the storage side

network interface show -vserver svm1
event log show -severity <=ERROR

You'll see this (trimmed):

            svm1_iscsi2
                       up/down    192.168.56.132/24  saat-cluster-02 e0d     true
saat-cluster::> event log show -severity <=ERROR
Time                Node             Severity      Event
11/7/2026 06:45:14  saat-cluster-02  ERROR         vifmgr.portdown: A link down event was received on node saat-cluster-02, port e0d.

The SAN LIF stayed on its port and went down with it. That's by design: SAN LIFs don't move, the host's multipath does the failover.

3Fix it and check the host is back on the short road

simctl fix port-down
simctl host linux1 sanlun

You should see this (trimmed):

up        secondary  sdb     host30       svm1_iscsi1
up        primary    sdc     host31       svm1_iscsi2

✅ Checkpoint: Both paths are up and primary is back on svm1_iscsi2.

On a real host, check multipath -ll after every network change. A host that quietly runs on its non-optimized path for weeks is a classic hidden problem.

This happened at work

The sale that ran on the back road

An online fashion store in Delhi ran its order database on LUNs from a four-node ONTAP cluster. Two weeks before a big festival sale, the team moved the database volumes to a new HA pair to spread the load, and they remembered to add the new reporting nodes first.

On sale day, database latency doubled. The storage graphs showed most of the time sitting in the Cluster column of qos statistics volume latency show, which means I/O was crossing the cluster network instead of landing on the owning node.

The cause was on the hosts. Someone had copied an old multipath.conf from another vendor’s array with path_grouping_policy multibus, so the servers spread I/O over all paths, optimized or not.

They removed the override, reloaded multipathd host by host, and latency dropped back within minutes. Since then every new host build checks multipath -ll for two priority groups.

Common mistakes and troubleshooting

MistakeWhat happensDo this instead
Only one SAN LIF, or LIFs on one node onlyA node failover or port failure cuts the host offAt least one LIF per node per fabric or network
Copying old multipath.conf overridesI/O goes over non-optimized paths and latency risesUse the built-in NETAPP defaults; check two prio groups in multipath -ll
Expecting SAN LIFs to fail over like NAS LIFsConfusion when a LIF shows up/down after a port failsRemember: SAN LIFs stay put, host multipath fails over
Moving a LUN volume to another HA pair without reporting nodesHosts lose all optimized paths, or the LUN disappearsadd-reporting-nodes before the move, rescan, then remove old ones
Never checking paths after network workHosts run for weeks on the slow path or a single pathCheck multipath -ll, mpclaim or esxcli after every change

Interview questions

Click a question to open it. Each one is written the way an interviewer would ask it. Under it you will see why they ask it and one way you could answer, in your own words.

Fresher level

1. What do Active/Optimized and Active/Non-optimized mean for a NetApp LUN?

Why they ask this: They want to know you understand the two path states and why they matter.

How you might answer: Active/Optimized paths go through the node that owns the LUN’s volume, so I/O is handled locally. Active/Non-optimized paths go through the HA partner, which forwards the I/O over the cluster network, so they work but are slower. Multipath uses the optimized ones and keeps the others as backup.

2. Why must a host have paths through both nodes of an HA pair?

Why they ask this: They’re checking that you know SAN LIFs don’t move during failover.

How you might answer: SAN LIFs never fail over. If a node goes down, its LIFs go down with it, so the host needs paths through the partner to keep running. Multipath moves I/O to those paths and back again after giveback.

2–5 years experience

3. A DBA says latency went up after a storage change, and qos statistics shows most latency under Cluster. What do you suspect?

Why they ask this: They want to see you can connect a latency breakdown to path selection.

How you might answer: High Cluster latency usually means I/O is arriving at the partner node and being forwarded, so the host is using non-optimized paths. I’d check multipath -ll on the host for two priority groups, and check the reporting nodes if the volume moved to another HA pair recently.

4. How do you move a LUN’s volume to another HA pair without hurting the host?

Why they ask this: They’re testing whether you know the reporting-nodes steps in the right order.

How you might answer: Before the move I’d run lun mapping add-reporting-nodes with the destination aggregate, then have the host rescan so it sees the new paths. After the move finishes I’d confirm the optimized paths are on the new nodes and then remove the old reporting nodes, followed by another rescan.

Senior level

5. You’re setting the standard for SAN host builds across Linux, Windows and ESXi. What would you put in it about multipathing?

Why they ask this: They want to see that you can turn knowledge into a repeatable standard for a team.

How you might answer: For each OS I’d name the stack and the check: dm-multipath with the built-in NETAPP defaults on Linux, MPIO with the ONTAP host utilities settings on Windows, and VMW_SATP_ALUA with Round Robin on ESXi.

Every build ends with proof of at least two paths through both nodes and the right priority groups, saved in the build record. After any network change we check paths again.

6. During a planned takeover, one application hung while others were fine. How would you investigate?

Why they ask this: They’re checking structured troubleshooting across storage and host teams.

How you might answer: I’d first check whether that host had paths through both nodes before the takeover, using the host’s multipath output and lun igroup show -instance. A host with a single path, or with its timeouts set too short, is the usual cause.

Then I’d compare its multipath settings with our standard and fix it before the next maintenance.

Quick quiz

Q1. Which path to a LUN is Active/Optimized?

  1. Any path on a 10 GbE port
  2. A path through the node that owns the LUN’s aggregate
  3. A path through the cluster management LIF
  4. The first path the host found
Show answer

B — the owning node’s paths are optimized; the partner’s are non-optimized.

Q2. In multipath -ll, what does prio=10 status=enabled usually mean for an ONTAP LUN?

  1. The optimized group in use
  2. The non-optimized standby group
  3. A failed path
  4. A disabled LUN
Show answer

B — prio=50 active is the optimized group; prio=10 enabled is the standby group.

Q3. What happens to an iSCSI LIF when its port goes down?

  1. It fails over to the partner
  2. It stays on the port and goes down; the host uses another path
  3. It moves to e0M
  4. The LUN goes offline
Show answer

B — SAN LIFs don’t fail over; host multipath handles the loss.

Q4. After a volume move to the HA partner, what changes for the host?

  1. It must remount the LUN
  2. The LUN ID changes
  3. The optimized and non-optimized paths swap
  4. Nothing at all
Show answer

C — ALUA states follow the owning node, so the paths swap roles.

Q5. Which latency column points to non-optimized paths being used?

  1. Disk
  2. Network
  3. Cluster
  4. QoS Max
Show answer

C — Cluster latency is time spent forwarding I/O between nodes.

Quick recap

  • ALUA tells the host which paths are optimized (owning node) and which are non-optimized (partner).
  • Multipath sends I/O to the optimized group and keeps the other as standby.
  • SAN LIFs never fail over; give every host paths through both nodes.
  • Volume moves and takeovers swap path states without a remount.
  • Before moving a LUN to another HA pair, add reporting nodes first.

Next lesson

Lesson 25: iSCSI on Linux → You’ll set up open-iscsi and dm-multipath on a real Ubuntu VM, log in to a target, and make the disk survive a reboot.

Further reading: ONTAP ALUA

Want to go deeper into ONTAP ALUA? Read NetApp’s ONTAP concepts guide for how SAN paths and HA pairs work together, and keep the LUN checks from the Command Builder handy. You can also see the full plan for this course on the NetApp ONTAP Storage Administration course page.

Scroll to Top

This website uses cookies

We use a few cookies to keep this site working. If you allow it, we also use Google Analytics to count visits so we can improve our lessons. You can accept all, deny the optional ones, or choose what to allow.