Balancing I/O and Capacity in vSphere: A Practical Guide to Storage DRS
Learn how VMware’s Storage DRS auto‑balances I/O and capacity across datastore clusters, with a step‑by‑step setup, example migration, trade‑offs, and practical checks to keep your vSphere environment running smoothly.
06 Jan 2026, 05:43 UTC

Problem: Manual Storage Management is a Pain
In a busy virtual environment, storage capacity and I/O can quickly become uneven. Administrators often spend hours moving virtual disks, thin‑provisioning, and re‑allocating datastores to keep performance smooth. The question is: can we let the system decide where a VM should live?
Thesis: Storage DRS Automates the Heavy‑Lifting
VMware’s Storage Distributed Resource Scheduler (Storage DRS) is a feature that watches VM I/O and space usage across a Datastore Cluster and moves thin‑provisioned disks or entire VMs to balance load. It does not move VMs between clusters, only within a single cluster, and it can be tuned for either performance or capacity sensitivity.
Prerequisites & Setup
Storage DRS works only when the following conditions are met:
- vSphere 7.0 or newer (8.0 adds more tuning options)
- A Datastore Cluster with shared storage (e.g., vSAN, NFS, or shared SAN)
- Datastore Cluster DRS enabled (not to be confused with VM DRS)
- VMs are thin‑provisioned or have thin‑provisioned disks
Below is a step‑by‑step example using the vSphere Web Client and PowerCLI.
1. Create a Datastore Cluster (if not already existing)
# vSphere Client: Datacenter > Storage > Create Datastore Cluster
# Add existing datastores to the cluster and enable DRS
2. Enable Storage DRS on the Cluster
Using the Web Client:
Datacenter > Storage > > Edit Settings
• Storage DRS: Enabled
• Move Threshold: 75% (default)
• Space Threshold: 70% (default)
• I/O Threshold: 70% (default)
• Enable VM I/O monitoring: Yes
Or via PowerCLI:
Connect-VIServer -Server
$cluster = Get-Cluster -Name
Set-StorageDrsProvider -DatastoreCluster $cluster -Enabled $true \
-MoveThreshold 75 -SpaceThreshold 70 -IOTreshold 70
Replace <CLUSTER_NAME> and <vcenter> with your environment values.
3. Mark Critical VMs as Non‑Movable (Optional)
To prevent Storage DRS from moving a high‑priority VM, set the Non‑Movable flag:
Set-VM -Name -NonMovable $true
How Storage DRS Works
Every 5 minutes (configurable), the Storage DRS engine collects three key metrics from each datastore in the cluster:
- Space Utilization: Percentage of used space.
- I/O Utilization: Current read/write throughput relative to the datastore’s capacity.
- VM I/O: Aggregated I/O from VMs residing on the datastore.
When a datastore exceeds the configured thresholds, Storage DRS proposes a move of a VM or a thin‑provisioned disk to a less‑utilized datastore. The move is performed as a storage migration—the VM remains powered on, and the disk is copied over.
Concrete Example: Triggering a Move
Suppose you have a datastore cluster with two datastores: DS1 (70% used, 80% I/O) and DS2 (30% used, 20% I/O). A new VM, WebServer01, is thin‑provisioned and created on DS1. The cluster’s Storage DRS thresholds are set to 75% for space and 70% for I/O.
After creating the VM, you run a synthetic I/O test (e.g., fio) on WebServer01 for 15 minutes. The I/O on DS1 spikes to 90%, exceeding the threshold. Within the next 5‑minute cycle, Storage DRS will:
- Detect that
DS1is over the I/O threshold. - Identify
WebServer01as a candidate for migration. - Move the VM’s virtual disk(s) to
DS2. - Leave the VM powered on and running.
You can verify the move in the vSphere Client:
Datacenter > Storage > > Storage DRS > Move History
Or via PowerCLI:
Get-StorageDrsMove -DatastoreCluster | Format-Table VMName, Source, Destination, Status
Trade‑Offs and Limitations
- CPU Overhead: Storage DRS runs every few minutes, polling metrics and making decisions. In large clusters, this can add a measurable CPU load to the vCenter server.
- Move Timing: Moves can occur during peak workloads, potentially impacting performance. Adjust the Move Threshold or schedule a maintenance window.
- Scope: Storage DRS only moves VMs or disks within the same datastore cluster. It will not relocate a VM to a different cluster or to a different vCenter.
- Application Awareness: The algorithm considers only space and I/O. It does not understand application latency requirements, which can lead to suboptimal placement for latency‑sensitive workloads.
- Non‑Movable VMs: Administrators can mark VMs as non‑movable, but this disables automatic balancing for those VMs, potentially leaving them on a saturated datastore.
Practical Checklist Before Enabling
- Ensure all datastores in the cluster support shared storage and are healthy.
- Verify that VMs are thin‑provisioned; thick disks are not automatically moved.
- Run a pilot in a non‑production cluster: enable Storage DRS, monitor moves, and adjust thresholds.
- Document critical workloads and set them as non‑movable.
- Plan for potential performance impact during the first few cycles.
- Set up alerts:
Storage DRS Move CompletedorDatastore Space Utilization Exceeded.
Actionable Closing
Storage DRS can reduce manual storage re‑allocation and improve I/O balance, but it is not a silver bullet. Start with a test cluster, fine‑tune thresholds, and monitor the move history. If you notice performance dips during migrations, consider raising the Move Threshold or scheduling moves during low‑usage windows. Remember, the feature only works within a datastore cluster and relies on thin provisioning—so plan accordingly.
By following the steps above, you’ll give your vSphere environment a built‑in balancing mechanism that keeps I/O and capacity in check without constant manual intervention.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.