<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.osnexus.com/index.php?action=history&amp;feed=atom&amp;title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V</id>
	<title>Windows MPIO for Failover Clusters and Hyper-V - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.osnexus.com/index.php?action=history&amp;feed=atom&amp;title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V"/>
	<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V&amp;action=history"/>
	<updated>2026-10-06T21:26:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.osnexus.com/index.php?title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V&amp;diff=28201&amp;oldid=prev</id>
		<title>Qadmin: Reword as the recommended configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V&amp;diff=28201&amp;oldid=prev"/>
		<updated>2026-10-06T16:02:04Z</updated>

		<summary type="html">&lt;p&gt;Reword as the recommended configuration&lt;/p&gt;
&lt;a href=&quot;https://wiki.osnexus.com/index.php?title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V&amp;amp;diff=28201&amp;amp;oldid=28198&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Qadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.osnexus.com/index.php?title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V&amp;diff=28198&amp;oldid=prev</id>
		<title>Qadmin: Recommended Windows MPIO setup and timer tuning for failover clusters, CSV and Hyper-V on QuantaStor HA pools</title>
		<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Windows_MPIO_for_Failover_Clusters_and_Hyper-V&amp;diff=28198&amp;oldid=prev"/>
		<updated>2026-10-06T15:58:54Z</updated>

		<summary type="html">&lt;p&gt;Recommended Windows MPIO setup and timer tuning for failover clusters, CSV and Hyper-V on QuantaStor HA pools&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:admin_guide]]&lt;br /&gt;
&lt;br /&gt;
This page covers the recommended Microsoft Multipath I/O (MPIO) setup and tuning for Windows Server hosts that use QuantaStor storage volumes as shared cluster disks: Windows Server Failover Clustering, Cluster Shared Volumes, Hyper-V clusters and SQL Server Failover Cluster Instances. It applies to Fibre Channel and iSCSI access to a QuantaStor HA pool, and it is the client-side companion to [[Clustered SCSI-3 Persistent Reservations]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Summary.&amp;#039;&amp;#039;&amp;#039; Install MPIO, let the Microsoft DSM claim QuantaStor devices, and raise three MPIO timers above their Windows defaults so that a disk survives a QuantaStor HA failover or an appliance reboot without Windows removing it. The settings were validated on Windows Server 2022 Hyper-V clusters connected over Fibre Channel to a QuantaStor HA pair.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Section !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Why the defaults are not enough|Why the defaults are not enough]] || What Windows does when every path to a disk is briefly unavailable&lt;br /&gt;
|-&lt;br /&gt;
| [[#Installing MPIO and claiming QuantaStor devices|Installing MPIO and claiming QuantaStor devices]] || The MPIO feature and the QuantaStor hardware ID&lt;br /&gt;
|-&lt;br /&gt;
| [[#Recommended MPIO settings|Recommended MPIO settings]] || The timer values, and how to apply and verify them&lt;br /&gt;
|-&lt;br /&gt;
| [[#Paths and load balancing|Paths and load balancing]] || What a correctly configured disk looks like&lt;br /&gt;
|-&lt;br /&gt;
| [[#After maintenance on a QuantaStor appliance|After maintenance on a QuantaStor appliance]] || Checking that a rebooted appliance&amp;#039;s paths are back before failing pools to it&lt;br /&gt;
|-&lt;br /&gt;
| [[#Troubleshooting|Troubleshooting]] || Disks that go offline during a failover, and missing paths&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Why the defaults are not enough ==&lt;br /&gt;
&lt;br /&gt;
During an HA failover the pool moves from one QuantaStor appliance to the other. For a short time no path to a volume can complete I/O: the departing appliance has stopped serving the pool and the receiving appliance has not yet finished importing it. With Fibre Channel and ALUA, QuantaStor keeps the standby paths through the partner appliance present throughout, so Windows sees the paths change state rather than disappear; the I/O stall is typically well under a minute.&lt;br /&gt;
&lt;br /&gt;
Windows decides how long to wait with three MPIO settings. With the defaults, MPIO deletes the disk 20 seconds after its last path stops working (PDORemovePeriod), and each I/O times out after 60 seconds (DiskTimeoutValue). A failover that runs longer than that, for example because the pool export runs up to its configured Export Timeout, makes Windows remove the disk. For a cluster disk that means the disk goes Failed or Offline, a Cluster Shared Volume stops, and Hyper-V virtual machines lose their storage. Windows does not bring a removed disk back on its own when the pool comes back: an administrator has to rescan storage and bring the cluster disk online again.&lt;br /&gt;
&lt;br /&gt;
Raising the timers makes Windows hold I/O and keep the disk while the pool moves, so the failover appears to the cluster as a pause rather than a disk failure.&lt;br /&gt;
&lt;br /&gt;
== Installing MPIO and claiming QuantaStor devices ==&lt;br /&gt;
&lt;br /&gt;
Do this on every cluster node, before presenting QuantaStor volumes to it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Install the Multipath I/O feature&amp;#039;&amp;#039;&amp;#039; (requires a reboot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
Install-WindowsFeature -Name Multipath-IO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Add the QuantaStor hardware ID to the Microsoft DSM&amp;#039;&amp;#039;&amp;#039; so that MPIO combines the paths to each QuantaStor volume into one disk:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
New-MSDSMSupportedHW -VendorId OSNEXUS -ProductId QUANTASTOR&lt;br /&gt;
Get-MSDSMSupportedHW | Where-Object VendorId -match OSNEXUS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PowerShell cmdlet pads the vendor and product IDs to their SCSI field widths. If you use the MPIO control panel or {{Code|1=mpclaim}} instead, the string must be exactly {{Code|1=OSNEXUS QUANTASTOR}} followed by six trailing spaces, as described in [[Multipath IO Configuration#Configuring Microsoft MPIO|Configuring Microsoft MPIO]]. Without this entry each path appears as a separate disk.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3. Reboot&amp;#039;&amp;#039;&amp;#039; the node so MPIO claims the devices, then confirm in Disk Management or with {{Code|1=Get-Disk}} that each QuantaStor volume appears once.&lt;br /&gt;
&lt;br /&gt;
For iSCSI, also connect one session per path in the iSCSI Initiator with &amp;#039;&amp;#039;&amp;#039;Enable multi-path&amp;#039;&amp;#039;&amp;#039; selected, using addresses on separate subnets; see [[ISCSI Initiator Setup]] and [[Multipath IO Configuration]]. For an HA pool, connect to the pool&amp;#039;s HA virtual interfaces rather than an appliance&amp;#039;s own addresses, so the sessions follow the pool when it fails over.&lt;br /&gt;
&lt;br /&gt;
== Recommended MPIO settings ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting !! Windows default !! Recommended !! Effect&lt;br /&gt;
|-&lt;br /&gt;
| PDORemovePeriod || 20 || &amp;#039;&amp;#039;&amp;#039;240&amp;#039;&amp;#039;&amp;#039; || Seconds MPIO keeps a disk after its last path has failed before removing it. Must be longer than the slowest failover you expect.&lt;br /&gt;
|-&lt;br /&gt;
| DiskTimeoutValue || 60 || &amp;#039;&amp;#039;&amp;#039;100&amp;#039;&amp;#039;&amp;#039; || Seconds before Windows times out an individual I/O. 100 is the largest value {{Code|1=Set-MPIOSetting}} accepts.&lt;br /&gt;
|-&lt;br /&gt;
| PathVerificationState || Disabled || &amp;#039;&amp;#039;&amp;#039;Enabled&amp;#039;&amp;#039;&amp;#039; || MPIO periodically tests every path, so a failed path is detected and a recovered path is put back into use without waiting for I/O to hit it.&lt;br /&gt;
|-&lt;br /&gt;
| PathVerificationPeriod || 30 || 30 || Seconds between path tests. The default is fine.&lt;br /&gt;
|-&lt;br /&gt;
| RetryCount || 3 || 3 || Times MPIO retries a failed I/O on a path. Leave at the default.&lt;br /&gt;
|-&lt;br /&gt;
| RetryInterval || 1 || 1 || Seconds between those retries. Leave at the default.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Apply them in an elevated PowerShell on each cluster node:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
Set-MPIOSetting -NewPathVerificationState Enabled -NewPathVerificationPeriod 30 -NewPDORemovePeriod 240 -NewRetryCount 3 -NewRetryInterval 1 -NewDiskTimeout 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Reboot the node for the settings to take effect.&amp;#039;&amp;#039;&amp;#039; In a running cluster, drain one node at a time (Pause, Drain Roles in Failover Cluster Manager, or {{Code|1=Suspend-ClusterNode -Drain}}), reboot it, resume it, and move on to the next.&lt;br /&gt;
&lt;br /&gt;
Verify with {{Code|1=Get-MPIOSetting}}, which is the authoritative view; the cmdlet stores the values through WMI, so reading the MPIO registry key directly can be misleading:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
PS C:\&amp;gt; Get-MPIOSetting&lt;br /&gt;
&lt;br /&gt;
PathVerificationState     : Enabled&lt;br /&gt;
PathVerificationPeriod    : 30&lt;br /&gt;
PDORemovePeriod           : 240&lt;br /&gt;
RetryCount                : 3&lt;br /&gt;
RetryInterval             : 1&lt;br /&gt;
UseCustomPathRecoveryTime : Disabled&lt;br /&gt;
CustomPathRecoveryTime    : 40&lt;br /&gt;
DiskTimeoutValue          : 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If {{Code|1=Set-MPIOSetting}} reports a parameter error, for example a {{Code|1=-NewDiskTimeout}} above 100, none of the values in that command are applied. Check the output for errors and run {{Code|1=Get-MPIOSetting}} afterwards.&lt;br /&gt;
&lt;br /&gt;
Leave the Fibre Channel HBA driver parameters at the vendor defaults; these settings were validated with the QLogic Windows driver at its defaults.&lt;br /&gt;
&lt;br /&gt;
== Paths and load balancing ==&lt;br /&gt;
&lt;br /&gt;
Leave the Microsoft DSM load-balance policy at its default. QuantaStor reports ALUA path states for HA pools: paths through the appliance that owns the pool are Active/Optimized and paths through the partner appliance are Standby. The Microsoft DSM&amp;#039;s default for ALUA storage, Round Robin With Subset, sends I/O across the Active/Optimized paths only and switches to the other set when the states change.&lt;br /&gt;
&lt;br /&gt;
Check a disk&amp;#039;s paths with {{Code|1=mpclaim}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
mpclaim -s -d              # list MPIO disks&lt;br /&gt;
mpclaim -s -d 1            # paths and their states for MPIO disk 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A host with two HBA ports zoned to both appliances of an HA pair shows four paths per disk: two Active/Optimized and two Standby. After a failover, the states swap between the two appliances, and the number of paths stays the same.&lt;br /&gt;
&lt;br /&gt;
== After maintenance on a QuantaStor appliance ==&lt;br /&gt;
&lt;br /&gt;
When a QuantaStor appliance reboots or its Fibre Channel ports go down, Windows marks its paths as failed. When the appliance returns, Windows does not always add its paths back on its own. A disk then keeps running on the partner appliance&amp;#039;s paths, but a pool failed back to the returning appliance would find that host with standby paths only.&lt;br /&gt;
&lt;br /&gt;
After any appliance reboot, and before failing a pool back to it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;On every cluster node, rescan storage:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: smaller&amp;quot;&amp;gt;&lt;br /&gt;
Update-HostStorageCache&lt;br /&gt;
pnputil /scan-devices&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If paths are still missing, run {{Code|1=rescan}} in {{Code|1=diskpart}}.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Check with {{Code|1=mpclaim -s -d &amp;lt;n&amp;gt;}} that every QuantaStor disk shows its full path count again.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Only then fail the pool back.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QuantaStor holds an appliance&amp;#039;s Fibre Channel target ports disabled during startup until its LUNs are mapped and ALUA states are set, so wait until the appliance is fully up, with its Storage Pools showing a Normal state in the web interface, before rescanning.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A cluster disk went Failed or Offline during a failover, and the disk disappeared from Disk Management.&amp;#039;&amp;#039;&amp;#039; MPIO removed the disk because the failover outlasted PDORemovePeriod. Check {{Code|1=Get-MPIOSetting}} on every node; the values above must be in effect, which requires a reboot after setting them. To recover, run {{Code|1=Update-HostStorageCache}} and a {{Code|1=diskpart}} rescan on each node, then bring the cluster disk online in Failover Cluster Manager ({{Code|1=Start-ClusterResource}}).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cluster disks went offline after a failover, but the disks are still present in Windows.&amp;#039;&amp;#039;&amp;#039; Check that [[Clustered SCSI-3 Persistent Reservations]] is Enabled on the pool&amp;#039;s HA group. Without it the reservations the cluster placed on the disks are lost when the pool moves, and the cluster treats the disks as failed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A disk shows only Standby paths, or fewer paths than expected.&amp;#039;&amp;#039;&amp;#039; One appliance&amp;#039;s paths were not re-added after it rebooted. Follow [[#After maintenance on a QuantaStor appliance|After maintenance on a QuantaStor appliance]]. Also confirm that both of the host&amp;#039;s HBA ports are zoned to both appliances, and that both of its WWPNs are listed under the host in QuantaStor.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Each QuantaStor volume appears more than once in Disk Management.&amp;#039;&amp;#039;&amp;#039; MPIO has not claimed the devices. Check {{Code|1=Get-MSDSMSupportedHW}} for the OSNEXUS QUANTASTOR entry, add it if missing, and reboot.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Keep the appliances&amp;#039; Fibre Channel ports in the default target-only mode.&amp;#039;&amp;#039;&amp;#039; Dual initiator and target mode ({{Code|1=qs-util enabledualmode}}) is a diagnostic setting. On an appliance that serves an HA pool, it can log out host sessions whenever the fabric changes, for example while the partner appliance reboots, which shows up on Windows as long I/O stalls.&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Clustered SCSI-3 Persistent Reservations]] -- the HA group setting Windows failover clusters need&lt;br /&gt;
* [[Multipath IO Configuration]] -- MPIO and Linux multipath basics for QuantaStor volumes&lt;br /&gt;
* [[ISCSI Initiator Setup]] -- connecting iSCSI initiators&lt;br /&gt;
* [[Fibre Channel Target Port Management]] -- presenting volumes over Fibre Channel&lt;br /&gt;
* [[Hosts and Host Groups]] -- host records, initiators, and Host Groups for clusters&lt;br /&gt;
* [[HA Cluster Setup (JBODs)]] -- HA groups and failover&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Qadmin</name></author>
	</entry>
</feed>