When connecting workstations or hypervisor hosts to enterprise storage area networks (SAN) over Fibre Channel, iSCSI, or SAS interfaces, redundant physical network connections are standard practice. Dual host bus adapters (HBAs) or dedicated network interfaces connect through redundant fabric switches to dual storage controllers. However, without multi-pathing software, the operating system detects each physical path to a storage LUN as an entirely separate disk drive, creating storage corruption risks and severe I/O confusion.
Microsoft Multi-Path I/O (MPIO) provides path fault tolerance and high-throughput load balancing by aggregating redundant data paths into a single logical storage device managed by the Microsoft Device Specific Module (MSDSM). While MPIO is commonly associated with Windows Server, high-end Windows 11 Pro and Enterprise workstations running data-intensive creative suites, local virtualisation labs, or CAD workloads can leverage MPIO natively. This guide demonstrates how to install MPIO, register storage array hardware identifiers, configure load-balancing policies, and monitor path health using PowerShell in Windows 11.
Installing the MPIO Optional Feature via PowerShell
In Windows 11, the Multi-Path I/O framework is an optional operating system feature that must be enabled before management cmdlets become available.
Launch an elevated PowerShell session as Administrator and execute:
# Enable the MultiPathIO optional feature
Enable-WindowsOptionalFeature -Online -FeatureName MultiPathIO -All -NoRestart
After enabling the feature, a system restart is required to load the MPIO bus driver (mpio.sys) and the Microsoft Device Specific Module (msdsm.sys) into the Windows kernel:
Restart-Computer
Once the machine restarts, verify that the MPIO PowerShell module and underlying services are functional:
Get-Service -Name msdsm
Get-Command -Module MPIO
Claiming Storage Hardware with the Microsoft DSM
To enable MPIO on target storage volumes, the Microsoft DSM must be instructed to claim the hardware identifiers (Vendor ID and Product ID) of your connected SAN or NAS storage array.
First, inspect the active physical disks detected over iSCSI or Fibre Channel to determine their reported vendor string:
Get-Disk | Select-Object Number, FriendlyName, BusType, Model
To automatically claim all detected iSCSI devices on your Windows 11 system, execute:
# Automatically claim all iSCSI targets for MPIO
Enable-MSDSMAutomaticClaim -BusType iSCSI
If you are connecting over SAS or Fibre Channel, or if you prefer declaring specific hardware devices manually, use New-MSDSMSupportedHW. Note that the Vendor ID must be padded to exactly 8 characters and the Product ID to exactly 16 characters:
# Register custom storage hardware identifier
New-MSDSMSupportedHW -VendorId "SYNOLOGY" -ProductId "Storage LUN "
To view all storage hardware profiles currently claimed by the Microsoft DSM, run:
Get-MSDSMSupportedHW
Understanding and Configuring MPIO Load Balancing Policies
The Microsoft DSM supports several load balancing algorithms that govern how read and write I/O operations are distributed across redundant data paths:
| Policy Identifier | Policy Name | Behaviour & Workload Suitability |
|---|---|---|
FOO |
Failover Only | One primary active path processes all I/O; standby paths take over only if the primary fails. |
RR |
Round Robin | I/O requests are distributed sequentially across all healthy active paths. |
RRWS |
Round Robin with Subset | I/O cycles across designated active paths while maintaining separate standby paths. |
LQD |
Least Queue Depth | Directs incoming I/O to the path currently holding the fewest pending requests; ideal for latency-sensitive databases. |
WP |
Weighted Paths | Assigns numerical weights to paths, routing higher I/O volume to faster physical links (e.g. 25GbE vs 10GbE). |
LB |
Least Blocks | Routes requests to the path that has processed the fewest total data blocks. |
To configure a default global load balancing policy for all newly claimed storage LUNs, use Set-MSDSMGlobalDefaultLoadBalancePolicy:
# Set default policy to Round Robin
Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy RR
# Or set default policy to Least Queue Depth for maximum transactional throughput
Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy LQD
Verify the active global policy configuration:
Get-MSDSMGlobalDefaultLoadBalancePolicy
Setting Path Policies on Individual Disks and LUNs
In environments hosting mixed storage tiers, you may wish to assign different policies to specific disk volumes (for example, Least Queue Depth for high-IOPS NVMe-over-Fabrics targets and Failover Only for backup volumes).
To query individual MPIO disk targets and their assigned path configurations, run:
# Query MPIO disk devices
mpclaim -s -d
To modify the load balancing policy for a specific target disk (such as MPIO Disk 1), run:
# Set Disk 1 to Round Robin policy (Policy code 2)
mpclaim -l -d 1 2
Auditing Path Health, Failover Timers, and Diagnostic States
Maintaining high-availability storage requires verifying that path health monitoring and failover timers are properly tuned.
To inspect global MPIO timer settings, execute:
Get-MPIOSetting
Key timer configurations include:
PathRecoveryInterval: How frequently (in seconds) the DSM tests failed paths to determine if they have recovered (default: 40 seconds).PathVerifyPeriod: How frequently active paths are polled with test commands to detect silent dropouts (default: 30 seconds).PDORemovePeriod: How long the OS retains the virtual disk object after all physical paths have dropped before terminating dependent file handles (default: 20 seconds).
To optimize failover detection on high-speed low-latency enterprise local networks, adjust these intervals in PowerShell:
Set-MPIOSetting -NewPathVerifyPeriod 15 -NewPathRecoveryInterval 20
To audit MPIO path transitions and hardware failover events in real time, query the Windows Event Log:
Get-WinEvent -LogName "System" | Where-Object { $_.ProviderName -in "mpio", "msdsm" } | Select-Object -First 10 | Format-Table TimeCreated, Id, Message -Wrap