The Problem: When Storage Management Becomes a Nightmare
When I first took over a VMware cluster with 8 ESXi hosts and over 200 virtual machines (VMs), I found myself in a state of storage “chaos.” The system at that time was a mix of All-Flash NVMe for Databases and 7.2K RPM HDD arrays for file storage. Every time I created a new VM, I had to dig through an Excel spreadsheet to see which Datastore had free space, which one ran RAID 10, and which one ran RAID 5.
Managing things manually like this is extremely risky. Just one colleague accidentally moving a Database VM to a slow HDD would immediately cause a system bottleneck. Worse, vCenter wouldn’t issue any warnings about this performance mismatch. That was when I realized Storage Policy Based Management (SPBM) was no longer an option, but a necessity.
Why Should You Implement SPBM Immediately?
Without SPBM, vCenter treats every Datastore as identical data containers. SPBM allows you to inject “intelligence” into them. Instead of specifically choosing Datastore A or B, you simply request: “I want this VM to run on SSDs and have high redundancy.” The system will automatically find a location that meets those standards. If a Datastore issue occurs and the policy is no longer guaranteed, vSphere will trigger a red alert so you can handle it promptly.
Configuring Storage Policies Based on Tagging (For Traditional SAN/NAS)
For systems using external storage via FC or iSCSI, using Tags is the most effective way to categorize them. Here is the process I typically apply in practice.
Step 1: Categorize Datastores Using Tags
Don’t let your Datastores stay cluttered. Start by labeling them.
- Go to the vSphere Client and select Tags & Custom Attributes.
- Create a new Category named
Storage_Performance. - Create two Tags:
Gold_Tier(for SSDs) andSilver_Tier(for HDDs). - In the Storage section, right-click each Datastore and select Assign Tag to label them accordingly.
Step 2: Defining the “Rules of Engagement” with VM Storage Policies
This is where you set the standards for your virtual machines.
- Navigate to Policies and Profiles -> VM Storage Policies -> Create.
- Give it a memorable name like
Critical_DB_Policy. - In the Policy structure section, check Enable rules for “Tag based” storage.
- In the Tag based usage tab, select the Category
Storage_Performanceand the TagGold_Tier. - Check the list of compatible Datastores in the Storage compatibility section to ensure the configuration is correct.
Step 3: Applying Policies to Virtual Machines
When deploying a VM, in the Storage section, select the Policy you just created instead of leaving it as default. vSphere will automatically filter out Datastores that do not meet the criteria, helping you avoid accidentally selecting slow drives.
# Quickly check the Policy list using PowerCLI
Get-SpbmStoragePolicy | Select Name, Description
# Assign Policy to a VM via script to save time
$vm = Get-VM "Production_DB_01"
$policy = Get-SpbmStoragePolicy -Name "Critical_DB_Policy"
Set-SpbmEntityConfiguration -Configuration $vm -StoragePolicy $policy
Elevating Management with vSAN Policies
If you are running vSAN, SPBM is even more powerful. You can deeply intervene in how data is written to the disks.
In my experience, use RAID-1 (Mirroring) for applications requiring the lowest latency. Conversely, for VMs used as Test environments or File Servers, use RAID-5 (Erasure Coding). RAID-5 helps you save up to 33% capacity compared to RAID-1 while still ensuring data safety.
Note: Converting from RAID-1 to RAID-5 will consume I/O resources to recalculate data. You should perform these changes during off-peak hours (e.g., after 10 PM) to avoid slowing down applications.
Monitoring Compliance
The most “value for money” feature of SPBM is its self-monitoring capability. You don’t have to guess whether a VM is in the right place.
- Compliant: The VM is in the correct location and receiving the policy you defined.
- Non-compliant: The data is in the wrong place or the Datastore is experiencing an issue (disk full, connection lost).
To scan for all VMs violating policies, I often use this PowerCLI command:
# Find VMs in a Non-compliant state
Get-VM | Get-SpbmEntityConfiguration | Where-Object {$_.ComplianceStatus -ne "Compliant"}
Conclusion from Field Experience
Many people think SPBM is only for massive Datacenters. In reality, even with a small 3-host cluster, SPBM is a lifesaver.
Once, one of my Storage Controllers failed, causing hardware redundancy to become temporarily invalid. Thanks to SPBM, vCenter immediately warned of an Out of Date status for critical VMs. It only took me a few minutes to move them to a safe zone thanks to the precise suggestions from the Policy. If I had been managing manually, I definitely would have missed a few VMs, and the risk of data loss at that time would have been enormous.
Think of SPBM as a dedicated gatekeeper. You only need to set the rules once, and it will ensure everything operates on the right track forever.

