0x80070070 or 'Cannot allocate virtual disk'

Virtual Disk Allocation Failed: Real Fix for Hyper-V and VMware

Server & Cloud Intermediate 👁 9 views 📅 Jun 27, 2026

You get this when creating or expanding a VHDX or VMDK. It's usually low host disk space or a SAN capacity issue. Here's the fix from real jobs.

When This Error Shows Up

You're building a new VM in Hyper-V Manager or vSphere. You click 'Create Virtual Hard Disk' or 'Expand' — and bam, you get a message like 'Cannot allocate virtual disk' or error code 0x80070070. Sometimes it's a thin disk that suddenly fails to grow. I had a client last month whose file server VM was stuck at 500GB because the host's C: drive had 2GB free. The error doesn't always say 'disk full' — it just dies with a generic allocation failure.

Why It Happens

The root cause is almost always one of three things:

  • Host disk is out of space — The physical drive where the VHDX or VMDK lives is full. Hyper-V and vSphere need room for metadata, snapshots, and temp files.
  • SAN or NAS quota exceeded — Your storage array has a thin provisioning limit or a hard quota. The host sees free space, but the array says no.
  • Thick provision lazy zeroed failure — When you choose thick provision (eager zeroed), the host tries to write zeros across the whole disk. If the storage can't keep up or is fragmented, it fails.

I've also seen this happen when the Hyper-V host's VHDX file is on an NTFS volume that's 95% full. The OS reserves space for the MFT, so even if there's 5% free, the allocation fails.

The Fix — Step by Step

Skip the reboots and the 'repair disk' nonsense. Here's what works:

Step 1: Check Host Disk Space

Open File Explorer on the Hyper-V host or the ESXi host's datastore browser. Look at the drive where the virtual disk lives. You need at least 10% free, but 20% is safer. On Windows, run wmic logicaldisk get size,freespace,caption as admin. On ESXi, go to Storage > Datastores and check the capacity.

Step 2: Free Up Space or Move the Disk

If the host is full, delete old snapshots, export VMs you don't need, or move the VHDX to another drive. For Hyper-V, I use Move-VMStorage in PowerShell:

Move-VMStorage -VMName "FileServer" -DestinationStoragePath "D:\VMs\"

For vSphere, migrate the VM to another datastore using Storage vMotion or a cold migrate. If you don't have vMotion, shut down the VM, copy the VMDK to another datastore, then reattach it.

Step 3: Check SAN Quotas

Log into your SAN management interface (EMC Unity, NetApp ONTAP, etc.). Look at the LUN or volume where the datastore resides. See if there's a quota or thin provisioning limit. I've seen cases where the LUN reports 500GB free but the thin pool is 98% allocated. If so, expand the LUN or delete old snapshots on the array.

Step 4: Use Thick Provision Eager Zeroed with Caution

If you need thick provision, do it in smaller chunks. Or use vmkfstools on ESXi to create the disk from the command line:

vmkfstools -c 200G -d eagerzeroedthick /vmfs/volumes/datastore1/VM/disk.vmdk

This sometimes works when the GUI fails. It also gives you a clearer error if the storage can't handle it.

Step 5: Restart the Hyper-V Virtual Disk Service

On Hyper-V hosts, the Virtual Disk Service (VDS) can get stuck. Restart it:

net stop vds
net start vds

Then retry the allocation. This fixed it for a client who had a stuck metadata lock on the VHDX.

Still Fails? Check These

If you did all that and the error persists, look at these:

  • NTFS fragmentation — Run defrag C: /U /V on the host drive (not the VM). Heavy fragmentation can block allocation of large files.
  • Antivirus real-time scanning — Some AV software (especially Symantec Endpoint Protection) locks VHDX files during creation. Exclude the VM folder from scanning.
  • Storage controller firmware — On older SAN arrays, a firmware bug can cause allocation to fail on large disks. Check your vendor's KB. I had a Dell MD3200 that needed a firmware update to handle disks over 2TB.
  • Cluster shared volumes — If you're on a Hyper-V cluster, the CSV might have a conflicting reservation. Use Get-ClusterSharedVolume in PowerShell and see if the volume is in a degraded state.

One last tip: try creating a tiny virtual disk first (1GB). If that works, your storage can allocate. If even 1GB fails, it's a fundamental problem with the host or array.

Was this solution helpful?