VM Storage Policy Non-Compliance Fix
Your VMs show non-compliant status with storage policies. This guide walks you through quick, moderate, and deep fixes.
What You're Seeing
You log into vCenter, go to your VMs, and under the "Storage Policies" tab, you see a big red "Non-Compliant" status. This can happen after you move VMs, upgrade vCenter, or change storage in your cluster. I've seen it most often when someone pushes a new storage policy without re-applying it to existing VMs. It's annoying, but it's usually not breaking anything—your VMs still run fine. But if you ignore it, you won't be able to use storage DRS, and your VMs might not get the performance or protection you think they have.
The good news? You can fix this in under 30 seconds for most cases. Let's start there.
Simple Fix (30 Seconds)
This is the one that solves 80% of non-compliance issues I've seen. vCenter sometimes just needs a refresh. Here's how:
- In vCenter, go to Hosts and Clusters or VMs and Templates.
- Right-click the non-compliant VM.
- Select Storage Policies > Check Compliance.
- Wait 10-15 seconds. You'll see a small window pop up saying "Compliance check initiated." Then go back to the VM's storage policy tab—the status often flips to "Compliant."
If that didn't work, don't panic. Try the same thing but on the cluster level:
- Right-click the cluster where the VM lives.
- Go to Storage > Check Compliance.
- Wait 30 seconds. Check the VM again.
I've seen this fix it for VMs that just needed a prod. If it's still red after that, move on.
Moderate Fix (5 Minutes)
This is the real fix for most people. The VM's virtual disks aren't actually using the policy you assigned. This happens when you change policies after the VM was created. Here's how to force-reapply the policy:
- Right-click the non-compliant VM.
- Select VM Policies > Edit VM Storage Policies.
- You'll see a window with two sections: VM Home and Hard Disk. For each one, click the dropdown and select the policy you want (or "Default" if you just want to use the cluster's default).
- Click Apply.
- After a few seconds, you'll see a task in the Recent Tasks pane: "Reconfiguring virtual machine." Let it finish.
- Now run the compliance check again (right-click > Storage Policies > Check Compliance).
If it still shows non-compliant, there's a good chance the VM has snapshots. Snapshots freeze the disk's policy. Delete any snapshots, then reapply the policy. Here's how to check:
- Right-click VM > Snapshots > Manage Snapshots.
- If you see any snapshots, delete them. It takes 2-3 minutes depending on disk size.
- After deletion, reapply the storage policy again.
This has fixed every case I've encountered in the last 3 years. But if you're still stuck, the deep fix is for you.
Advanced Fix (15+ Minutes)
This one's for when the VM is on vSAN storage, or when you're dealing with a cluster that has mixed storage types (SSD + HDD, or different vSAN disk groups). The policy might be trying to enforce rules that your storage can't meet.
Let me explain: vSAN policies have rules like "Number of failures to tolerate" or "Stripe width." If your vSAN cluster doesn't have enough hosts or disks to meet those rules, the VM will be permanently non-compliant. You have to adjust the policy or add storage.
Here's how to check what the policy actually requires:
- In vCenter, go to Policies and Profiles > VM Storage Policies.
- Find the policy assigned to your VM. Double-click it.
- Go to the Rules tab. You'll see what it demands. For example: "Failures to tolerate = 2" means the cluster needs 3+ hosts.
- Check your cluster's host count. If you have 2 hosts but the policy needs 3, that's your problem.
The fix: either edit the policy to lower the requirements, or add hosts/disks to your cluster. I'd say 90% of the time, the fix is just creating a more relaxed policy and reassigning it.
To create a new policy:
- Go to Policies and Profiles > VM Storage Policies.
- Click Create. Name it something clear like "vSAN Basic - 1 Failure."
- For vSAN, choose vSAN as the storage type.
- Set Failures to tolerate to 1 (this works for 3+ hosts) or 0 (works for 2 hosts).
- Leave other settings as default unless you know what you need.
- Finish creation, then assign this new policy to your VM using the steps from the Moderate Fix.
After reassignment, run compliance check. It should turn green.
One last thing: if you're using Storage DRS, non-compliant VMs won't migrate. So after you fix compliance, enable Storage DRS if you want automatic load balancing.
Pro tip from experience: I always keep a "basic" policy with minimal rules for troubleshooting. It saves me 30 minutes every time a VM won't go compliant. Don't overthink the policy design until you know the VM works.
That's it. You should be compliant now. If not, check the vCenter version—some older builds had bugs. Upgrade to the latest patch. I've seen that fix a handful of stubborn cases.
Was this solution helpful?