VMware vSAN Knowledge Base

Phase 6 — Performance & Capacity ⚠ Break Scenarios ✓ Fix Procedures
15
Performance & Capacity Issues
6
Break Scenarios
9
Fix Procedures
Phase 6
Current Phase
51
vSAN Congestion (Backpressure) — Diagnosis & Immediate Relief
VMs experience severe latency spikes and I/O stalls due to vSAN congestion throttling — the #1 performance killer
Impact: vSAN congestion is an internal throttling mechanism that slows VM I/O when backend storage cannot keep up. VMs see latency jump from sub-millisecond to 50-500ms+. Applications time out. Databases hang. This is NOT a bug — it is vSAN protecting data integrity, but it signals a serious capacity or performance bottleneck.
Symptoms
  • vSphere Client > vSAN Performance: "Congestion" value > 0
  • VM latency spikes to 50ms–500ms+ (normal: <2ms)
  • Applications report timeouts, slow queries, or connection drops
  • esxtop shows KAVG (kernel average latency) > 20ms
  • vSAN Health: no alarm — congestion is NOT flagged as a health issue
Root Causes (in priority order)
  • 1. OSA write buffer full: Cache SSD write buffer at 30% capacity — destage to capacity disks too slow
  • 2. Capacity disk overload: HDD or SSD capacity tier saturated with I/O
  • 3. Active resync: Object rebuild competing with VM I/O
  • 4. Component congestion: Remote host's disk group is the bottleneck
  • 5. Network latency: vSAN VMkernel RTT too high (>1ms between hosts)
  • 6. Snapshot chain: Deep snapshot chain causing read amplification
1

Identify congestion using esxtop (real-time)

# SSH to each ESXi host and run esxtop:
esxtop

# Press 'u' for disk device view (vSAN)
# Key columns:
#   DAVG — Device Average latency (should be <2ms for SSD, <10ms for HDD)
#   KAVG — Kernel Average latency (includes vSAN overhead, <5ms normal)
#   GAVG — Guest Average latency (what the VM sees)
#   QUED — Queue depth (high = saturation)

# If KAVG >> DAVG, the bottleneck is in the vSAN stack (congestion)
# If DAVG is high, the physical device is the bottleneck

# For vSAN-specific view, press 'v' for vSAN stats:
#   Look for "CONGESTION" column — any value > 0 is active throttling
2

Check vSAN Performance Service for congestion history

# In vSphere Client:
# Cluster > Monitor > vSAN > Performance

# Key charts:
#   "Congestion" — shows congestion value over time (0-255 scale)
#      0 = no congestion
#      1-30 = light throttling (may be imperceptible)
#      31-60 = moderate (applications notice)
#      61+ = severe (applications time out)

#   "Latency" — Read/Write latency graph
#   "IOPS" — drops during congestion (throttled)
#   "Throughput" — drops correlate with congestion spikes

# Per-host breakdown:
# Cluster > Monitor > vSAN > Performance > Host
# Identify which host(s) are the congestion source
3

Identify the root cause tier

# Check OSA write buffer fill level (OSA clusters only):
esxcli vsan storage list
# Look for "Write Buffer Free %" — if below 20%, write buffer is causing congestion

# Check capacity disk utilization:
esxtop
# Press 'd' — look at %BUSY for capacity devices
# If HDD at 100% busy — capacity tier overload

# Check active resync:
# Cluster > Monitor > vSAN > Resyncing Objects
# If resync is active, it competes with VM I/O — see KB #52 for throttling

# Check network RTT between hosts:
vmkping -I vmk1 <other-host-vSAN-IP>
# RTT should be <1ms on same rack, <5ms cross-rack
# If >5ms — investigate physical network

# Check snapshot chains:
# VM > Snapshots > Manage Snapshots
# If chain depth > 3 — consolidate immediately
4

Immediate relief actions

# Action 1: If resync is causing congestion — throttle it:
# Cluster > Configure > vSAN > Services > Resync Throttle → "Low"
# This prioritizes VM I/O over resync

# Action 2: If a single VM is generating excessive I/O:
# VM > Edit Settings > Hard Disk > Shares: "Low" (temporary)
# Or set IOPS Limit in the VM storage policy

# Action 3: If capacity disk is saturated (OSA with HDD):
# Long-term: Replace HDD capacity with SSD
# Short-term: Migrate heavy I/O VMs to hosts with less-loaded disk groups

# Action 4: If write buffer is full (OSA):
# Check cache SSD health — SMART wear level approaching 100% = replace
esxcli vsan storage list | grep -A5 "Cache Tier"
# Replace the cache SSD with a higher endurance model

# Action 5: For ESA clusters:
# ESA rarely has congestion — if it does, check NVMe SMART health
# A failing NVMe causes latency spikes before it fully fails
🛈 Key Insight: vSAN congestion is always a symptom, never the root cause. The fix is always to address the underlying bottleneck: faster storage, more capacity, less resync load, or better network. Adding more RAM or CPU will NOT fix vSAN congestion.
52
Resync Throttle — Balancing Object Recovery vs VM Performance
Controlling vSAN resync bandwidth to minimize VM performance impact during disk rebuilds and rebalance operations
Trade-off: vSAN resync rebuilds data redundancy after a failure or maintenance operation. Faster resync = quicker return to full protection, but more I/O impact on VMs. Slower resync = less VM impact, but extended window of reduced redundancy. Finding the right balance is critical.
Resync Categories
  • Repair resync: After disk/host failure — rebuilds missing components on other hosts
  • Rebalance resync: Redistributes data for even capacity utilization
  • Policy compliance resync: After storage policy change — restructures objects
  • Stale component resync: After host returns from maintenance — syncs missed writes
Resync Timing
  • 60-minute delay: After host failure, vSAN waits 60 min before full rebuild (configurable)
  • Immediate: After host exits maintenance mode — stale component sync starts immediately
  • On-demand: Rebalance only triggers when disk usage variance exceeds 30%
  • Parallel: Multiple resync operations can run simultaneously
1

Check current resync status and throttle setting

# In vSphere Client:
# Cluster > Monitor > vSAN > Resyncing Objects
# Shows:
#   - Total objects being resynced
#   - Bytes remaining
#   - Estimated time to completion

# Current throttle setting:
# Cluster > Configure > vSAN > Services
# "Resync throttle" setting: Low / Medium / High

# From ESXi Shell:
esxcli vsan health cluster list | grep -i "resync"

# Check resync bandwidth consumption:
# Cluster > Monitor > vSAN > Performance > "Resync"
# Shows MB/s dedicated to resync operations
2

Adjust resync throttle during business hours

# During production hours — minimize VM impact:
# Cluster > Configure > vSAN > Services
# Set Resync Throttle to: "Low"
# This limits resync to ~30% of available bandwidth

# During maintenance windows — maximize resync speed:
# Set Resync Throttle to: "High"
# This allows resync to consume up to ~90% of available bandwidth

# Medium (default): ~60% bandwidth for resync

# There is no automated schedule — you must change it manually
# Consider creating a scheduled task or alarm action to switch
3

Adjust the 60-minute repair delay timer

# The default 60-minute delay before full rebuild can be changed:
# This is useful if you know a host will return quickly (planned reboot)

# In vSphere Client:
# Cluster > Configure > vSAN > Advanced Options
# Setting: "ObjectRepairTimer"
# Default: 60 (minutes)
# Range: 0-120 minutes

# Set to 0: Immediate rebuild (risky — waste of I/O if host returns soon)
# Set to 120: Wait 2 hours (use if host replacement takes time but you have
#              sufficient fault tolerance in the meantime)

# For ESA clusters, the repair timer works the same way
# ESA resyncs are faster due to NVMe speed — shorter delay is less risky
4

Monitor resync impact on VM workloads

# During active resync, monitor these in parallel:
# Cluster > Monitor > vSAN > Performance

# Watch for:
#   Congestion > 0 → resync is impacting VMs
#   VM Latency > 5ms → applications may notice
#   Resync MB/s → how fast data is rebuilding

# If congestion appears during resync:
# 1. Switch throttle to "Low" immediately
# 2. Identify which VMs are most impacted:
#    VM > Monitor > Performance > Virtual Disk > Latency
# 3. Consider temporarily migrating critical VMs to a less-impacted host

# Resync completion estimate:
# Cluster > Monitor > vSAN > Resyncing Objects
# "ETA" column — plan your throttle changes around this
Best Practice: During planned maintenance (host reboot, firmware update), use "Ensure data accessibility" mode instead of "Full data migration". This skips the full rebuild and only resyncs stale components when the host returns — much faster and less I/O impact.
53
vSAN Capacity Planning — Sizing Formulas & Threshold Alerts
Correctly calculating usable capacity, understanding overhead, and setting proactive alerts before running out of space
Critical: Running out of vSAN capacity is the #1 preventable cluster-killing event. At 80% used, performance degrades. At 95%, vSAN stops accepting new writes. At 100%, VMs freeze. Recovery from a full datastore is extremely difficult and may require emergency disk adds or VM deletion.
Overhead Components
  • vSAN on-disk format: ~1-2% for metadata, checksums, witness components
  • Slack space: 25-30% reserved for component rebuild during failure (the biggest consumer)
  • FTT overhead: RAID-1 FTT=1 = 2x, RAID-5 FTT=1 = 1.33x, RAID-6 FTT=2 = 1.5x
  • Swap files: Each running VM creates a swap file = VM memory size (if not reserved)
  • Snapshots: Consume space proportional to changed blocks
  • OSA cache tier: Not counted as usable capacity
Sizing Formula
  • Raw Capacity = Sum of all capacity devices (excluding OSA cache)
  • After FTT = Raw ÷ FTT multiplier (2x for RAID-1, 1.33x for RAID-5)
  • After Slack = After FTT × 0.70 (reserve 30% for rebuild)
  • Usable = After Slack − metadata overhead (~2%)
  • Example: 4 hosts × 6 × 1.92TB = 46.08TB raw
  • RAID-5: 46.08 ÷ 1.33 = 34.6TB → × 0.70 = 24.2TB usable
  • RAID-1: 46.08 ÷ 2.0 = 23.0TB → × 0.70 = 16.1TB usable
1

Check current capacity status

# In vSphere Client:
# Cluster > Monitor > vSAN > Capacity
# Key metrics:
#   Total Raw Capacity
#   Used Capacity (after dedup/compress for ESA)
#   Free Capacity
#   Dedup/Compression savings (ESA)

# Per-host usage breakdown:
# Cluster > Monitor > vSAN > Capacity > "Used Capacity Breakdown"
# Shows: VM data, vSAN overhead, Swap objects, Performance mgmt objects

# From ESXi Shell:
esxcli vsan storage list
# Shows per-device: Total Capacity, Used, Free
2

Configure capacity threshold alarms

# In vSphere Client:
# Cluster > Configure > Alarm Definitions
# Find: "vSAN Datastore Usage on Disk" (or create custom)

# Recommended thresholds:
#   Warning: 70% used (start planning expansion)
#   Critical: 80% used (immediate action required)
#   Emergency: 90% used (VMs at risk — add disks NOW)

# Custom alarm creation:
# Cluster > Configure > Alarm Definitions > Add
# Trigger: Metric > vSAN > Capacity > "Percentage Used"
# Warning: > 70%
# Critical: > 80%
# Action: Send email notification

# vSAN Health also monitors capacity:
# Cluster > Monitor > vSAN > Health > "Capacity"
# "Space efficiency usage health" — flags underperforming dedup ratio
3

Calculate growth rate and forecast exhaustion

# In vSphere Client:
# Cluster > Monitor > vSAN > Capacity
# Set time range to 30/60/90 days
# Look at the capacity trend graph:
#   - Linear growth → predictable exhaustion date
#   - Exponential growth → faster action needed

# Manual calculation:
#   Current Free: 10 TB
#   30-day growth rate: 500 GB/month
#   Time to exhaustion: 10TB ÷ 0.5TB/month = 20 months
#   Time to 80% threshold: calculate accordingly

# Aria Operations (if available):
# Dashboards > vSAN Capacity Planning
# Shows automated "Days Remaining" forecast
# Much more accurate with ML-based trending

# IMPORTANT: Account for one host failure scenario
# If a host fails, its capacity is lost AND its objects rebuild on remaining hosts
# This can consume 2x the host's used capacity temporarily
4

Emergency: cluster approaching 95%+ used

# IMMEDIATE ACTIONS when capacity is critical:

# 1. Identify and delete unnecessary snapshots:
# Cluster > VMs > sort by "Snapshot" column
# Delete all non-essential snapshots immediately

# 2. Identify orphaned VMDKs:
# Datastore Browser > look for .vmdk files not attached to any VM
# Delete orphaned disks after verification

# 3. Storage vMotion VMs to external storage (if available):
# Right-click VM > Migrate > Change Storage Only
# Move to NFS/iSCSI/FC datastore

# 4. Reduce VM swap overhead:
# Set memory reservation on VMs = allocated memory
# This eliminates the swap file (saves GB per VM)
# VM > Edit Settings > Resources > Memory Reservation = full

# 5. Add capacity disks:
# If hardware available, hot-add NVMe/SSD to hosts
# Host > Configure > vSAN > Disk Management > Claim Unused Disks

# 6. Change storage policy to more efficient type:
# RAID-1 → RAID-5 saves 33% capacity (requires policy change per VM)
Never let a vSAN cluster exceed 80% capacity. The 20% headroom is not optional — it is required for object rebuilds, resyncs, and ongoing operations. A cluster at 90% cannot safely tolerate a host failure without risking data loss.
54
esxtop Deep Dive — vSAN Performance Diagnostics from CLI
Using esxtop to identify storage bottlenecks, measure latency components, and diagnose vSAN performance issues in real-time
🛈 Context: esxtop is the most powerful real-time diagnostic tool for vSAN performance. It provides per-device, per-VM, and per-world latency breakdowns that are NOT available in vSphere Client. When you need to pinpoint exactly WHERE latency is coming from, esxtop is the answer.
1

Disk Device view — identify storage bottleneck

# SSH to ESXi host:
esxtop

# Press 'd' for disk device view
# Key columns (press 'f' to select fields):

# DEVICE — physical device ID (naa.xxx for local, vSAN for vSAN devices)
# CMDS/s — commands per second (IOPS)
# READS/s — read IOPS
# WRITES/s — write IOPS
# MBREAD/s — read throughput
# MBWRTN/s — write throughput
# DAVG/cmd — Device Average latency per command (ms)
#   SSD: should be <1ms
#   NVMe: should be <0.5ms
#   HDD: should be <15ms
# KAVG/cmd — Kernel Average latency (includes vSAN overhead)
# GAVG/cmd — Guest Average latency (what the VM sees)
# QUED — Commands queued (saturation indicator)

# CRITICAL RULE:
# GAVG = DAVG + KAVG
# If KAVG >> DAVG → vSAN stack bottleneck (congestion, network)
# If DAVG is high → physical device bottleneck (replace disk)
2

Virtual Machine disk view — per-VM I/O analysis

# In esxtop, press 'v' for VM storage view
# This shows per-virtual-disk metrics:

# VMDK — virtual disk file
# CMDS/s — IOPS for this specific VMDK
# GAVG/cmd — guest-visible latency for this VMDK
# KAVG/cmd — kernel overhead for this VMDK

# To filter for a specific VM:
# Press 'V' (shift+v) to toggle VM name display
# Look for your VM name in the list

# To capture to CSV for later analysis:
esxtop -b -d 5 -n 120 > /tmp/esxtop-output.csv
# -b = batch mode
# -d 5 = sample every 5 seconds
# -n 120 = 120 samples (10 minutes)
# Import CSV into Excel/Google Sheets for graphing
3

Network view — vSAN VMkernel throughput

# In esxtop, press 'n' for network view
# Key columns:

# PORT-ID — virtual port identifier
# UPLINK — physical NIC
# MbTX/s — transmit throughput (MB/s)
# MbRX/s — receive throughput (MB/s)
# DRPTX/s — dropped transmit packets (should be 0!)
# DRPRX/s — dropped receive packets (should be 0!)

# Identify the vSAN VMkernel (vmk1 typically):
# Look for vmk1 PORT-ID — check MbTX/s and MbRX/s
# If near NIC speed limit (e.g., 10000 Mb/s for 10GbE) → network saturated

# Dropped packets on vSAN vmk = CRITICAL issue
# Any DRPTX or DRPRX > 0 causes retransmits, adding latency
# Fix: increase ring buffer, check physical switch, enable jumbo frames
4

Advanced: vSAN-specific counters

# vSAN DOM (Distributed Object Manager) stats:
# In esxtop, some vSAN-specific devices appear as:
#   vSAN — aggregated vSAN datastore metrics
#   Individual component UUIDs

# For deeper vSAN diagnostics beyond esxtop:
# Use vSAN Observer (web-based, built into RVC):
# SSH to vCenter:
rvc root@localhost
# Navigate to cluster:
cd /datacenter/computers/cluster
# Run vSAN observer:
vsan.observer . --run-webserver

# vSAN Observer provides:
#   Per-component latency breakdown
#   DOM client/owner/component stats
#   LSOM stats (disk I/O per device)
#   Network I/O between hosts
#   Access at: https://<vcenter>:8010/observer.html
Quick Reference: Normal vSAN latency targets: DAVG <1ms (SSD/NVMe), KAVG <2ms, GAVG <5ms. If GAVG >10ms consistently, investigate. If GAVG >50ms, you have active congestion — see KB #51.
55
High Write Latency — OSA Cache Destage Bottleneck
Write operations stall because the OSA write buffer cannot destage fast enough to capacity tier disks
Impact: In OSA, all writes first land in the cache SSD's write buffer (30% of cache capacity). When the capacity tier cannot absorb destaged data fast enough, the write buffer fills up. Once full, vSAN applies backpressure — write latency jumps from <1ms to 50-500ms. This is the #1 OSA performance issue.
Symptoms
  • Write latency spikes while read latency remains normal
  • esxtop: DAVG on capacity devices >15ms (HDD) or >5ms (SSD capacity)
  • vSAN Performance: "Congestion" appears during write-heavy periods
  • Write buffer fill percentage approaching 80-100%
  • Cache SSD SMART data shows high wear level (>90%)
Root Causes
  • HDD capacity tier too slow for workload write rate
  • Cache SSD approaching end-of-life (write endurance exhausted)
  • Too many capacity disks per cache device (7:1 ratio maxed out)
  • Write-heavy workload (databases, logging) overwhelming the destage pipeline
  • Dedup/compression enabled — destage must dedup before writing to capacity (overhead)
1

Check write buffer fill level and cache SSD health

# Check cache SSD health and write buffer:
esxcli vsan storage list
# Look for each "Cache Tier" device:
#   "Write Buffer Free %" — should be >30%
#   If <20% — destage is not keeping up

# Check cache SSD wear level:
esxcli vsan storage list | grep -A10 "Cache Tier"
# Look for: "Wear Level" — percentage of write endurance consumed
# If >90% — the SSD is slowing down, replace immediately

# Check SMART data for the cache SSD:
esxcli storage core device smart get -d naa.xxxxxxxxxxxxxxxxxxxx
# Key indicators:
#   Percentage Used Endurance — should be <80%
#   Reallocated Sector Count — should be 0
#   Program Fail Count — should be 0
2

Identify the destage bottleneck with esxtop

# Run esxtop and press 'd' for disk view:
esxtop

# Compare cache device vs capacity device metrics:
# Cache SSD (naa.xxx — Cache Tier):
#   DAVG should be <0.5ms
#   If DAVG >2ms — cache SSD is degraded (wear/firmware issue)

# Capacity devices (naa.xxx — Capacity Tier):
#   DAVG for HDD: normally 5-15ms, problematic at >20ms
#   DAVG for SSD: normally <1ms, problematic at >3ms
#   %BUSY — if 100% — capacity device is saturated

# The destage rate depends on capacity tier speed:
#   HDD: ~100-200 IOPS destage rate
#   SSD: ~10,000+ IOPS destage rate
# If VM write rate exceeds destage rate, buffer fills up
3

Immediate relief actions

# Action 1: Move write-intensive VMs to a different disk group or host:
# Identify the heavy writer:
# VM > Monitor > Performance > Virtual Disk > Write IOPS
# Storage vMotion this VM to a less-loaded disk group

# Action 2: If dedup/compression is enabled and causing destage overhead:
# Evaluate if savings justify the performance hit
# Cluster > Configure > vSAN > Services > Deduplication and Compression
# If savings ratio <1.5x — consider disabling (OSA only, requires data evacuation)

# Action 3: Reduce VM swap file overhead:
# VM > Edit Settings > Resources > Memory Reservation = full
# This eliminates the swap file, reducing write I/O to vSAN

# Action 4: Check for runaway writes inside guest OS:
# Windows: Resource Monitor > Disk tab > sort by Write (B/sec)
# Linux: iotop -o (shows processes with active I/O)
# Common culprits: log rotation, backup agents, indexing services
4

Long-term fix: upgrade capacity tier or migrate to ESA

# Option A: Replace HDD capacity with SSD capacity (hybrid → all-flash OSA)
# 1. Add new SSDs to the server
# 2. Create new all-flash disk group
# 3. Migrate objects from HDD disk group to SSD disk group
# 4. Remove old HDD disk group

# Option B: Add more disk groups to distribute destage load
# More disk groups = more parallel destage paths
# Each new disk group needs its own cache SSD

# Option C: Replace worn cache SSD with higher-endurance model
# Use enterprise-grade write-intensive SSDs (3+ DWPD)
# Consumer SSDs (0.3 DWPD) wear out quickly in vSAN cache tier

# Option D: Migrate to ESA (recommended long-term)
# ESA eliminates the cache destage bottleneck entirely
# See KB #43 for OSA → ESA migration workflow

# For new clusters: always choose ESA if hardware qualifies
🛈 ESA Note: This entire problem category does NOT exist in ESA. ESA has no cache tier, no write buffer, and no destage pipeline. Writes go directly to the NVMe storage pool. If you're experiencing write latency on ESA, the root cause is different — check NVMe health and congestion (KB #51).
56
Read Latency Spikes — OSA Cache Miss Storm
Read operations bypass the SSD cache and hit slow capacity tier disks, causing dramatic latency increases
Impact: OSA uses 70% of the cache SSD as read cache. When VMs access data not in the read cache (cache miss), reads go to the capacity tier. On HDD capacity, a cache miss means 5-15ms latency instead of <1ms. A "cache miss storm" happens when many VMs simultaneously access cold data — saturating the HDD tier.
Symptoms
  • Read latency spikes to 10-50ms (normally <1ms on all-flash)
  • Read latency is highly variable — fast sometimes, slow other times
  • esxtop: DAVG on capacity HDD is high, cache SSD DAVG is fine
  • Typically happens after: VM migration, host reboot, new VMs, or backup operations
  • Performance returns to normal after cache "warms up" (hours to days)
Root Causes
  • Working set size exceeds read cache capacity (cache too small for data)
  • After host reboot — read cache is cold (all reads hit capacity tier)
  • VMs with random read patterns (databases, VDI) thrash the cache
  • Backup operations read entire VMDKs — evicts hot data from cache
  • All-flash OSA clusters with all SSD capacity do NOT have this issue
1

Measure cache hit rate

# vSAN Performance Service:
# Cluster > Monitor > vSAN > Performance > Host > Select Host
# Look at "Read Cache Hit Rate" metric:
#   >90% = healthy (most reads served from cache)
#   70-90% = moderate misses (noticeable on HDD capacity)
#   <70% = severe misses (performance degraded)

# From ESXi Shell:
esxcli vsan storage list
# Per-device stats show cache utilization

# esxtop disk view:
esxtop
# Press 'd' — compare:
#   Cache SSD READS/s vs Capacity disk READS/s
#   If capacity disk READS/s is high → cache misses are going to capacity
2

Identify the working set size vs cache capacity

# Calculate your working set:
# Working set = data actively being read by VMs at any given time
# This is NOT total VMDK size — it's the "hot" data subset

# Rule of thumb for cache sizing:
#   Read cache = 70% of cache SSD capacity
#   E.g., 800GB cache SSD → 560GB read cache
#   If working set > 560GB → cache misses are expected

# Check total VM disk allocation:
# Cluster > VMs tab > sort by "Storage Used"
# If total active VM data significantly exceeds cache size → undersized

# For database VMs: working set ≈ actively queried tables + indexes
# For VDI VMs: working set ≈ (OS + apps) × linked-clone count

# If working set > cache capacity → options:
#   1. Upgrade to larger cache SSD
#   2. Replace HDD capacity with SSD (eliminates the problem)
#   3. Migrate to ESA (eliminates cache concept entirely)
3

Mitigate cache miss impact

# Action 1: Schedule backups outside business hours
# Backup software reads entire VMDKs, polluting the read cache
# Schedule backups for off-peak when cache misses don't impact users

# Action 2: Use Content-Based Read Cache (CBRC) for VDI
# For Horizon VDI deployments:
# vSphere Client > Host > Configure > Advanced System Settings
# Set: CBRC.Enable = 1
# This adds a RAM-based read cache layer for linked-clone reads

# Action 3: Move random-read-heavy VMs to all-flash disk groups
# If you have mixed disk groups (hybrid + all-flash on same host):
# Storage vMotion the database VM to the all-flash disk group

# Action 4: Upgrade capacity tier to SSD (long-term)
# All-flash OSA: cache miss still hits SSD capacity → still fast (<1ms)
# Hybrid OSA: cache miss hits HDD → slow (5-15ms)
# Replacing HDD with SSD eliminates the cache miss penalty
ESA Note: ESA eliminates this entire problem category. With no cache tier, ALL reads go directly to NVMe storage pool at consistent sub-millisecond latency. No cache warm-up period, no cache miss penalty. For read-intensive workloads, ESA is the definitive solution.
57
VM Storage Policy IOPS Limiting — Taming Noisy Neighbors
Using vSAN storage policy IOPS limits to prevent a single VM from starving other VMs of storage bandwidth
🛈 Context: vSAN supports per-object IOPS limits in the storage policy. This is the primary mechanism to implement storage QoS and prevent "noisy neighbor" scenarios where one VM's heavy I/O degrades performance for other VMs on the same cluster.
Good Use Cases
  • Multi-tenant environments sharing a vSAN cluster
  • Dev/test VMs that should not impact production
  • Backup proxy VMs during backup windows
  • Known I/O-heavy VMs (log collectors, indexing services)
  • VDI environments — cap per-desktop IOPS for predictability
Cautions
  • IOPS limits throttle the VM — it cannot burst above the limit
  • Setting limits too low causes application performance issues
  • No "minimum IOPS" guarantee — only maximum cap
  • IOPS counted as normalized IOPS (32KB I/O = 1 IOPS, 64KB = 2 IOPS)
  • Limits apply per VMDK object, not per VM total
1

Create an IOPS-limited storage policy

# In vSphere Client:
# Menu > Policies and Profiles > VM Storage Policies
# Click "Create"

# Name: "vSAN-RAID5-IOPS-5000"
# Rules:
#   vSAN > Failures to Tolerate: 1
#   vSAN > Failure Tolerance Method: RAID-5
#   vSAN > IOPS limit for object: 5000
#     (this means 5000 normalized 32KB IOPS per VMDK)

# Common limit values:
#   VDI desktop: 200-500 IOPS
#   Dev/test VM: 1000-2000 IOPS
#   General production: 5000-10000 IOPS
#   High-performance DB: No limit (or 20000+ IOPS)
2

Apply the policy and monitor throttling

# Apply to a VM:
# VM > Configure > Policies > Edit VM Storage Policies
# Select "vSAN-RAID5-IOPS-5000" for the VM's disks
# Click OK

# Monitor if the VM is being throttled:
# VM > Monitor > Performance > Virtual Disk
# Watch "Normalized Latency" — if it suddenly increases when
# IOPS reaches the limit, the policy is throttling

# In vSAN Performance:
# Cluster > Monitor > vSAN > Performance > VM
# Compare VM IOPS before and after policy change
# IOPS should plateau at the limit value

# To see current policy assignments:
# VM > Configure > Policies
# Shows policy name and compliance status for each VMDK
3

Troubleshoot unexpected throttling

# If a VM is slower than expected, check for accidental IOPS limits:
# VM > Configure > Policies
# Click on the policy name — review "IOPS limit for object"
# If set to a low value, this is why the VM is slow

# Also check if the DEFAULT storage policy has an IOPS limit:
# Menu > Policies and Profiles > VM Storage Policies
# Look at "vSAN Default Storage Policy"
# If it has an IOPS limit, ALL VMs without explicit policy are throttled

# To remove the limit:
# VM > Configure > Policies > Edit
# Change to a policy without IOPS limit
# Or set IOPS limit to 0 (means unlimited)

# Note: Changing the policy triggers a vSAN object reconfiguration
# This is non-disruptive but may take a few minutes
Important: IOPS limits are normalized to 32KB I/O size. A 64KB write counts as 2 IOPS. A 4KB write counts as 1 IOPS. This means database workloads with large I/O sizes consume their IOPS budget faster than expected. Always benchmark with your actual workload before setting production limits.
58
vSAN ReadyNode Sizing — Host Count & Hardware Selection
Selecting the right server configuration, disk layout, and host count for vSAN using ReadyNode validated configurations
🛈 Context: vSAN ReadyNodes are server configurations pre-validated by VMware/Broadcom and the hardware vendor. Using ReadyNodes eliminates HCL compatibility guesswork and ensures the disk controller, firmware, driver, and NIC combination is supported. Always start with ReadyNode when sizing a new vSAN cluster.
Host Count Rules
  • Minimum 3 hosts: Smallest vSAN cluster (FTT=1 RAID-1)
  • 4 hosts recommended: Allows one host failure + maintenance
  • 6+ hosts: Required for RAID-6 (FTT=2) in OSA
  • N+1 rule: Always have at least 1 spare host capacity
  • N+2 rule: For production — tolerate failure + maintenance simultaneously
  • Stretched cluster: Minimum 6+1 (3+3 data + 1 witness)
ReadyNode Categories
  • Hybrid: SSD cache + HDD capacity (cost-optimized, lower perf)
  • All-Flash OSA: SSD cache + SSD capacity (high performance)
  • ESA: NVMe-only storage pool (highest performance, recommended)
  • Compute-heavy: More CPU/RAM, fewer disks (VDI, general compute)
  • Storage-heavy: More disks, moderate CPU (file services, archival)
  • 2-node ROBO: Remote office — 2 data hosts + witness at central site
1

Determine compute requirements

# Calculate total CPU and RAM needed:
# Sum across all VMs:
#   Total vCPU = Σ (VM vCPU count)
#   Total RAM = Σ (VM RAM allocation)

# Apply consolidation ratio:
#   Physical cores needed = Total vCPU ÷ consolidation ratio
#   Consolidation ratio: 3:1 (conservative) to 6:1 (aggressive)
#   Example: 200 vCPUs ÷ 4:1 = 50 physical cores needed

# Per-host calculation:
#   If using dual-socket servers with 24-core CPUs:
#   48 cores per host → 50 ÷ 48 = 2 hosts for compute
#   RAM: Total RAM ÷ Per-host RAM = host count for RAM

# The higher of compute/RAM host count is your minimum
# Then apply N+1 for HA: minimum + 1 = production host count
2

Determine storage requirements

# Calculate total raw storage needed:
# Sum across all VMs:
#   Total VMDK = Σ (VM disk provisioned size)
#
# Apply overhead multipliers:
#   After FTT:
#     RAID-1 FTT=1: Total VMDK × 2.0
#     RAID-5 FTT=1: Total VMDK × 1.33
#     RAID-6 FTT=2: Total VMDK × 1.5
#
#   After slack space (30% reserve):
#     After FTT ÷ 0.70
#
#   After overhead (2% metadata):
#     ÷ 0.98
#
# Example: 50TB VMs, RAID-5, 30% slack:
#   50 × 1.33 = 66.5TB → ÷ 0.70 = 95TB → ÷ 0.98 = 97TB raw needed
#
# For ESA with dedup (conservative 2x ratio):
#   97TB ÷ 2 = 48.5TB raw NVMe needed

# Per-host: 97TB ÷ 4 hosts = 24.25TB per host
# Select ReadyNode with ≥25TB capacity disks per host
3

Select ReadyNode from VMware HCL

# Navigate to VMware Compatibility Guide:
# https://www.vmware.com/resources/compatibility
# Select: vSAN > ReadyNode

# Filter by:
#   Architecture: ESA or OSA
#   Vendor: Dell, HPE, Lenovo, Supermicro, etc.
#   Server Model: based on your procurement agreements
#   Drive Configuration: NVMe count and capacity matching your sizing

# Verify the EXACT configuration:
#   - Storage controller model and firmware version
#   - NVMe/SSD model numbers and firmware versions
#   - NIC model and driver version
#   - Boot device type (M.2, SD, USB — check support status)

# IMPORTANT: The ReadyNode profile defines SPECIFIC disk models
# Substituting a different SSD/NVMe model voids the validation
# Check the ReadyNode profile PDF for exact part numbers
4

Validate sizing before purchase

# Use the VMware vSAN Sizer Tool (free):
# https://vsansizer.vmware.com
# Input:
#   - VM profiles (count, vCPU, RAM, storage per VM)
#   - Protection level (FTT, RAID type)
#   - Architecture (ESA vs OSA)
#   - Growth projection (months/years)
# Output:
#   - Recommended host count
#   - Disk configuration per host
#   - Matched ReadyNode profiles

# Cross-check sizer output with your manual calculation
# If they differ significantly, review input assumptions

# Final checklist before ordering:
# ✓ Host count meets N+1 (or N+2 for production)
# ✓ ReadyNode profile matches vSAN HCL exactly
# ✓ Network: 25GbE minimum for ESA (10GbE minimum for OSA)
# ✓ Boot device: Check ESXi 8 boot device requirements
# ✓ Spare disks: Order 1-2 spare NVMe/SSD per host for replacements
Procurement Tip: When ordering ReadyNodes, always include the VMware-validated firmware bundle from the vendor. Dell calls it "vSAN Ready Bundle", HPE calls it "vSAN Certified Config". This ensures the exact firmware/driver stack is pre-installed, saving hours of HCL validation during deployment.
59
vSAN Witness Appliance Resource Exhaustion
Witness VM runs out of CPU, RAM, or storage causing quorum loss in 2-node and stretched clusters
Impact: The vSAN Witness Appliance serves as the tiebreaker in 2-node clusters and stretched clusters. If the witness runs out of resources (CPU starvation, RAM exhaustion, or disk full), it cannot participate in quorum votes. Without the witness, a single data-host failure causes total data unavailability.
Symptoms
  • vSAN Health: "Stretched cluster / 2-node: Witness host fault domain" fails
  • Witness appliance UI unresponsive or extremely slow
  • vSAN Health: "Witness host not reachable"
  • Objects show "Reduced availability" even though both data hosts are up
  • Witness VM console shows high CPU ready time or swap activity
Root Causes
  • Witness deployed with "Tiny" profile serving too many objects
  • Witness hosting multiple 2-node clusters (max ~64 per witness)
  • Witness datastore full — metadata growth over time
  • Host running witness has CPU/RAM overcommit from other VMs
  • Network latency to witness >200ms (RTT) causing timeouts
1

Check witness appliance resource utilization

# SSH to the witness appliance:
# Check CPU and memory:
esxtop
# Or from vSphere Client: select the witness host > Monitor > Performance

# Check disk space on the witness:
esxcli storage filesystem list
# The witness vSAN partition should have >20% free

# Check how many objects the witness is serving:
esxcli vsan debug object list | wc -l
# Witness objects are small (metadata only) but each consumes some space

# Check witness vSAN health:
esxcli vsan health cluster list

# Verify witness connectivity from data hosts:
vmkping -I vmk1 <witness-vSAN-IP>
# RTT must be <200ms (500ms max for stretched cluster)
2

Right-size the witness appliance

# Witness appliance deployment profiles:
#   Tiny:   2 vCPU,  8GB RAM,  15GB + 10GB storage — up to 10 VMs
#   Medium: 2 vCPU, 16GB RAM,  15GB + 350GB storage — up to 500 VMs
#   Large:  2 vCPU, 32GB RAM,  15GB + 1TB storage — up to 2000 VMs
#   X-Large: 4 vCPU, 48GB RAM, 15GB + 2.6TB storage — stretched cluster (many VMs)

# If the witness is undersized:
# 1. Power off the witness appliance
# 2. Edit Settings: increase RAM and disk to match the correct profile
# 3. Power on and verify

# OR: Deploy a new witness appliance with the correct profile
# Then reconfigure the cluster to use the new witness:
# vSphere Client > Cluster > Configure > vSAN > Fault Domains
# Replace witness host reference

# For shared witness (serving multiple clusters):
# Count total VMs across all clusters using this witness
# Size the witness for the total VM count (use Medium or Large)
3

Clean up witness datastore if full

# SSH to witness appliance:
# Check disk usage:
df -h

# If the vSAN data partition is full:
# Check for stale objects from decommissioned clusters:
esxcli vsan debug object list
# Look for objects belonging to clusters that no longer exist

# In vSphere Client:
# Select Witness Host > Configure > vSAN > Disk Management
# Check disk utilization

# If the witness has stale data from old clusters:
# The cleanest approach is to redeploy the witness:
# 1. Remove the witness from all cluster configurations
# 2. Delete the old witness VM
# 3. Deploy a fresh witness OVA with correct profile
# 4. Re-add to cluster fault domain configuration
Critical Rule: Never place the witness appliance on the same failure domain as either data site. The witness must be at a third location (separate rack, room, building, or site). If the witness fails at the same time as one data site, you lose quorum and all data becomes inaccessible.
60
vSAN Capacity Reclaim — TRIM/UNMAP & Thin Provisioning Issues
Deleted data inside VMs does not free vSAN capacity — understanding TRIM/UNMAP and capacity reclamation
Impact: When data is deleted inside a guest OS, the freed blocks are not automatically returned to the vSAN datastore. The VMDK file retains its consumed size. Over time, this leads to significant capacity waste — the datastore appears full even though VMs have deleted large amounts of data. This is especially problematic with thick-provisioned VMDKs.
TRIM/UNMAP Flow
  • Guest OS deletes file: Filesystem marks blocks as free
  • Guest issues TRIM/UNMAP: Tells the virtual disk "these blocks are unused"
  • vSCSI layer: Passes UNMAP to the VMDK
  • vSAN LSOM: Marks those blocks as free in the storage pool
  • Capacity reclaimed: Free space increases on the datastore
Common Failures
  • TRIM/UNMAP disabled in guest OS (Windows default: enabled, Linux: varies)
  • VMDK is thick-provisioned — UNMAP cannot reclaim from thick disks
  • VM hardware version too old — UNMAP requires vmx-11+
  • SCSI controller type: PVSCSI or LSI Logic SAS required (IDE does not support UNMAP)
  • vSAN UNMAP support not enabled (vSAN 6.7U3+ supports automatic UNMAP)
1

Verify TRIM/UNMAP support in your environment

# Check VM hardware version (must be vmx-11+):
# vSphere Client > VM > Summary
# "Compatibility: ESXi 6.0 and later" = vmx-11 (minimum for UNMAP)

# Check virtual SCSI controller type:
# VM > Edit Settings > SCSI Controller
# Must be "VMware Paravirtual" (PVSCSI) or "LSI Logic SAS"
# NOT "LSI Logic Parallel" or "IDE"

# Check VMDK provisioning type:
# VM > Edit Settings > Hard Disk
# "Type: Thin Provision" — UNMAP works
# "Type: Thick Provision Lazy Zeroed" — UNMAP does NOT work
# "Type: Thick Provision Eager Zeroed" — UNMAP does NOT work

# vSAN automatic UNMAP:
# vSAN 6.7U3+ automatically processes UNMAP from guests
# No additional configuration needed on the vSAN side
2

Enable TRIM/UNMAP in guest operating systems

# Windows (10/2016+): TRIM is enabled by default
# Verify: Open CMD as Admin:
#   fsutil behavior query DisableDeleteNotify
#   Result: DisableDeleteNotify = 0 (TRIM is ON)
#   If = 1: fsutil behavior set DisableDeleteNotify 0

# Linux: Enable discard in filesystem mount options
# Edit /etc/fstab — add "discard" option:
#   /dev/sda1 /data ext4 defaults,discard 0 0
# OR run manual TRIM:
#   fstrim -av

# For Linux with LVM:
#   Add "issue_discards = 1" to /etc/lvm/lvm.conf

# After enabling TRIM, verify it reaches vSAN:
# vSphere Client > VM > Monitor > Performance > Virtual Disk
# Check "UNMAP" operations counter — should be non-zero after guest delete
3

Convert thick-provisioned VMDKs to thin

# Thick VMDKs do not support UNMAP — you must convert to thin:

# Method: Storage vMotion (online, non-disruptive):
# VM > Migrate > Change storage only
# Select the same vSAN datastore
# In disk format, select "Thin Provision"
# This migrates the VMDK from thick to thin on-the-fly

# After conversion, verify:
# VM > Edit Settings > Hard Disk
# "Type" should now show "Thin Provision"

# The conversion will initially consume the same space
# But future guest UNMAP operations will reclaim space

# For newly created VMs:
# Always use thin provisioning — set in VM storage policy:
# Object Space Reservation: 0% (thin)
# ESA: All objects are thin by default — this is a non-issue
4

Force space reclamation for immediate capacity recovery

# If you need to reclaim space NOW:

# Inside Windows VMs:
# 1. Delete unnecessary files
# 2. Open Disk Cleanup: cleanmgr /d C:
# 3. Run: Optimize-Volume -DriveLetter C -ReTrim -Verbose
#    (PowerShell — forces TRIM on all free space)

# Inside Linux VMs:
# 1. Delete unnecessary files
# 2. Run: fstrim -av
#    Output shows how much space was trimmed per mount point

# Verify capacity recovery on vSAN:
# Cluster > Monitor > vSAN > Capacity
# Watch "Used" decrease after TRIM operations propagate
# Note: May take 5-15 minutes for vSAN to reflect reclaimed space

# For dedup/compression environments (ESA):
# TRIM is especially important — it allows dedup to operate on
# truly free blocks instead of wasting CPU on stale data
Best Practice: Enable TRIM/UNMAP in all guest OS templates before deployment. Use thin-provisioned VMDKs as default. For ESA, this is automatic. For OSA, schedule weekly fstrim (Linux) or Optimize-Volume -ReTrim (Windows) via cron/scheduled task to ensure continuous space reclamation.
78
vSAN Component Count Limit Exceeded
Host reaches maximum component count, blocking new VM deployments and policy compliance
Impact: Each ESXi host has a maximum component count (9,000 for standard, higher for ESA). When exceeded, new VM provisioning fails, storage policy compliance breaks, and resync operations stall. The error messages are often vague and misleading.
Symptoms
  • New VM deployment: "Insufficient resources to satisfy vSAN policy"
  • vSAN Health: "Component metadata health" warning
  • Clone/snapshot operations fail on specific hosts
  • vSAN resync stalls without clear error messages
  • esxtop shows high CLOMD CPU usage
Root Causes
  • Too many VMs with FTT=2 or RAID-6 (triple component count)
  • Excessive snapshots creating additional objects per VM
  • Uneven distribution — some hosts have more components than others
  • Small cluster (3-4 hosts) with too many VMs
  • Witness components counted against witness appliance limit
1

Check per-host component count

# From each ESXi host:
esxcli vsan debug object list | wc -l

# More precise count:
esxcli vsan debug disk list
# "Components" column shows count per disk

# Maximum limits:
# OSA: 9,000 components per host
# ESA: 14,000+ components per host (varies by build)
# Witness: 45,000 witness components per appliance (large)
1

Reduce component count

# Quick wins:
# 1. Delete stale snapshots (each snapshot = additional components)
# 2. Remove orphaned objects (see KB #72)
# 3. Consolidate small VMs or migrate some to another cluster

# Reduce FTT where appropriate:
# VMs with FTT=2 RAID-1 create 3x components vs FTT=1
# Evaluate if all VMs truly need the higher protection level
2

Scale out the cluster

# Adding hosts distributes components more evenly
# After adding a host, vSAN automatically rebalances components
# Monitor rebalance:
esxcli vsan debug resync summary

# For long-term planning:
# Calculate: (Total VMs x avg components per VM) / number of hosts
# Keep each host below 70% of max component count
79
vSAN Proactive Rebalance
Trigger and tune capacity rebalancing when data is unevenly distributed across hosts or disks

vSAN automatically rebalances when capacity variance exceeds 30% between disks. After replacing a disk group, adding hosts, or completing large VM migrations, capacity distribution can become skewed. Manual rebalance ensures even wear and optimal performance.

1

Check current capacity distribution

# Per-disk usage across the cluster:
esxcli vsan debug disk list
# Compare "Used" percentages — if variance > 30%, rebalance is needed

# vSAN Health check:
# Cluster → Monitor → vSAN → Health → Capacity
# "Disk usage on a vSAN cluster" test shows distribution
1

Enable proactive rebalance

# From vSphere Client (7.0+):
# Cluster → Configure → vSAN → Services → Proactive Rebalance → Enable

# Or via esxcli on any cluster host:
esxcli vsan debug disk rebalance
# This triggers an immediate one-time rebalance

# To set the automatic threshold (default 30%):
# Advanced settings on cluster → VSAN.ProactiveRebalanceThreshold = 25
2

Monitor rebalance progress

# Rebalance shows as resync activity:
esxcli vsan debug resync summary

# Track in vSphere Client:
# Cluster → Monitor → vSAN → Resyncing Objects
# Filter by "Rebalance" type

# Rebalance uses the same throttle as repair resync
# To speed up (at cost of VM performance):
# Set VSAN.ResyncThrottleThreshold higher (e.g., 80)
🛈 Tip: Run rebalance during off-peak hours. Rebalance consumes the same I/O budget as repair resync, so it impacts VM performance. In ESA, rebalance is more efficient due to the single-tier architecture.
80
vSAN Maximum Configuration Limits Reference
Key scalability limits for vSAN clusters — hosts, components, disk groups, objects, and more
Cluster Limits
  • Hosts per cluster: 64 (ESA & OSA)
  • Minimum hosts: 3 (standard), 2 (stretched + witness)
  • Disk groups per host (OSA): 5
  • Disks per disk group (OSA): 1 cache + 7 capacity
  • Storage pools per host (ESA): 1
  • NVMe devices per pool (ESA): 24
Component Limits
  • Components per host (OSA): 9,000
  • Components per host (ESA): 14,000+
  • Witness components (large): 45,000
  • Witness components (medium): 10,000
  • Object size maximum: 62 TB
  • VMDK max per VM: 64 (vSphere limit)
FTT / FTM
  • FTT max (RAID-1): 3 (requires 7 hosts)
  • FTT max (RAID-5): 1 (requires 4 hosts)
  • FTT max (RAID-6): 2 (requires 6 hosts)
  • Stripe width max: 12
  • IOPS limit range: 0 (unlimited) to 2^31
Network
  • vSAN VMkernel per host: 2 (one per stack)
  • Inter-site latency (stretched): ≤5ms RTT
  • Witness bandwidth: min 100 Mbps
  • vSAN data bandwidth: min 10 Gbps (25G+ for ESA)
🛈 Always verify: Check the Broadcom Configuration Maximums tool for your exact vSAN build. Limits change between releases and update versions.
89
Witness Appliance Replacement / Redeployment
Replace a failed or degraded witness appliance without disrupting the vSAN cluster

Replace the witness when: appliance is corrupted or unrecoverable, hardware hosting the witness is being decommissioned, you need to resize from small/medium to large appliance, or witness disk is full and can't be expanded.

1

Deploy new witness appliance

# 1. Download the vSAN Witness Appliance OVA (same version as cluster)
# 2. Deploy OVA to a non-vSAN host/cluster at the witness site
# 3. Select appliance size:
#    - Tiny:   10 VMs, 1-5 hosts (2 vCPU, 8 GB RAM)
#    - Medium: up to 39 nodes (2 vCPU, 16 GB RAM)
#    - Large:  up to 64 nodes (2 vCPU, 32 GB RAM)
# 4. Configure management + witness (vSAN) VMkernel networks
# 5. Power on and verify it's accessible:
ping <new-witness-management-ip>
2

Swap the witness in vSphere Client

# Add the new witness to vCenter inventory as a standalone host:
# Hosts and Clusters → Data Center → Add Host → new witness IP

# Replace witness on the stretched/2-node cluster:
# Cluster → Configure → vSAN → Fault Domains and Stretched Cluster
# Click "Change" on the witness host assignment
# Select the new witness host from inventory
# Click OK

# vSAN will:
# 1. Move witness components from old to new witness
# 2. This happens via resync — monitor progress:
#    Cluster → Monitor → vSAN → Resyncing Objects

# After resync completes, remove old witness from vCenter inventory
Do NOT remove the old witness before the swap completes. The cluster needs at least one witness for quorum during the transition. If the old witness is already dead, the swap will still work — vSAN rebuilds witness components on the new appliance.
92
VM Encryption vs. vSAN Encryption — Understanding the Two Layers
Clarifying the differences between per-VM encryption and vSAN datastore-level encryption to avoid double encryption overhead
VM Encryption (per-VM)
  • Encrypts at the VM layer — each VM has its own keys
  • Configured via VM storage policy (per-VM opt-in)
  • Encryption happens before I/O reaches vSAN
  • Encrypted data is stored on vSAN (vSAN sees ciphertext)
  • Works with any datastore (not vSAN-specific)
  • vMotion: data stays encrypted in transit
  • Prevents dedup/compression (data is random after encryption)
vSAN Encryption (datastore-level)
  • Encrypts at the vSAN layer — entire datastore is encrypted
  • Configured at cluster level (all-or-nothing)
  • Encryption happens after dedup/compression
  • All data on vSAN disks is encrypted at rest
  • vSAN-specific feature only
  • Dedup/compression works normally (data compressed first, then encrypted)
  • Lower per-VM overhead — one encryption pass for everything
1

Avoid double encryption

# BAD: VM Encryption + vSAN Encryption on the same VM
# Results in double encryption → double CPU overhead, zero benefit
# vSAN dedup/compression is defeated by VM encryption layer

# RECOMMENDED configurations:
# Option A: vSAN Encryption only (most common)
#   - Cluster → Configure → vSAN → Services → Encryption → ON
#   - All data encrypted at rest, dedup/compression still effective
#   - Single KMS configuration for entire cluster

# Option B: VM Encryption only (selective compliance)
#   - Only sensitive VMs get encrypted via storage policy
#   - Other VMs benefit from dedup/compression on plaintext data
#   - Per-VM key management

# Option C: Both (ONLY if compliance requires it)
#   - Some regulations require both layers (rare)
#   - Accept the performance penalty and loss of dedup
🛈 Recommendation: For most environments, vSAN Encryption alone is the best choice. It covers all data at rest, preserves dedup/compression savings, and requires only cluster-level KMS configuration. Use VM Encryption only when specific VMs need independent key management for compliance.