esxcli vsan storage list shows disk group as UnmountedLSOM: LSOMLostAccessA vSAN disk group is anchored by its cache-tier SSD. If that device experiences a media error, the entire disk group (cache + all capacity disks) is removed from the cluster. All vSAN objects with components on that disk group lose a replica. If your storage policy uses FTT=1, you are now one failure away from data loss.
Check disk group status
esxcli vsan storage list
# Look for "In CMMDS: false" or "Is SSD: true" with Unmounted state
Check SMART data on the suspected disk
esxcli storage core device smart get -d naa.xxxxxxxxxxxx
# Look for Reallocated Sector Count, Media Errors, Wear Leveling
Review vmkernel logs for LSOM errors
grep -i "lsom\|VSAN\|diskgroup" /var/log/vmkernel.log | tail -100
# Key patterns: LSOMLostAccess, congestion, IO error
Verify object health from vCenter
# RVC (Ruby vSphere Console)
vsan.disks_stats /dc/computers/cluster-name
vsan.obj_status_report /dc/computers/cluster-name
If the cache SSD failed — remove the disk group
# From vSphere Client:
# Host → Configure → vSAN → Disk Management → Select disk group → Remove
# Choose "Migrate data to other hosts" (Full data migration) if capacity allows
# CLI alternative:
esxcli vsan storage remove -s naa.CACHE_SSD_NAA_ID
Replace the failed physical disk
Follow your hardware vendor's hot-swap procedure. Verify the new disk is visible:
esxcli storage core device list | grep -A5 "naa."
# Confirm new device appears with correct size
Recreate the disk group
# From vSphere Client:
# Host → Configure → vSAN → Disk Management → Create Disk Group
# Select new cache SSD + existing capacity disks
# CLI:
esxcli vsan storage add -s naa.NEW_CACHE_SSD -d naa.CAPACITY_DISK_1 -d naa.CAPACITY_DISK_2
Monitor resync progress
# vSphere Client: Cluster → Monitor → vSAN → Resyncing Objects
# CLI:
esxcli vsan debug resync summary
# Wait for "Total Bytes To Resync: 0" before proceeding
FTT=1 minimum for production workloads. Keep at least 30% slack space for rebuilds.
esxcli vsan cluster get shows different Sub-Cluster Master UUID for different hostsCMMDS: Node lostvSAN relies on a dedicated VMkernel network (typically vmk1) for all cluster communication — CMMDS (Cluster Monitoring, Membership, and Directory Service), object I/O, and resync traffic. When this network is disrupted, hosts form isolated sub-clusters. Each sub-cluster elects its own master. Objects that span both partitions lose quorum and become inaccessible.
Check vSAN cluster membership from each host
# Run on EACH host to compare Sub-Cluster Master UUID:
esxcli vsan cluster get
# If hosts show DIFFERENT "Sub-Cluster Master UUID" → confirmed partition
Test vSAN network connectivity between hosts
# From each host, ping vSAN vmkernel of other hosts:
vmkping -I vmk1 -d -s 8972 <other_host_vsan_ip>
# -d = don't fragment, -s 8972 = test jumbo frame (MTU 9000)
# If this fails, you have an L2/MTU issue
Verify VMkernel adapter configuration
esxcli network ip interface list
# Confirm vmk1 exists and has vSAN traffic enabled
esxcli vsan network list
# Verify Agent Group and Multicast/Unicast mode
Check MTU end-to-end
esxcfg-vmknic -l
# Compare MTU across all hosts — must be identical
# Check physical switch: show interface trunk / show vlan
Restore physical network connectivity
Fix the switch port, VLAN configuration, or replace the failed cable/NIC. Verify at the physical layer first.
Fix MTU mismatch (if applicable)
# Set consistent MTU on all hosts:
esxcli network ip interface set -i vmk1 -m 9000
# Also set on the vSwitch/dvSwitch:
esxcli network vswitch standard set -v vSwitch1 -m 9000
# VERIFY on physical switch that VLAN supports jumbo frames
Verify vSAN cluster re-merges
# After network is restored, cluster should auto-heal within 60s
esxcli vsan cluster get
# All hosts should now show the SAME Sub-Cluster Master UUID
# Monitor resync:
esxcli vsan debug resync summary
Validate stale VMs
# Check for VMs still reporting inaccessible:
# vSphere Client → Cluster → Monitor → vSAN → Virtual Objects
# Filter by "Inaccessible" — if any remain, check their placement
unicast mode (vSAN 6.6+) instead of multicast.
vsan.obj_status_report shows NON-COMPLIANT or INACCESSIBLEGet full object health status
# From vSphere Client:
# Cluster → Monitor → vSAN → Virtual Objects
# Filter by "Compliance Status" to find Non-Compliant or Inaccessible objects
# From RVC (Ruby vSphere Console):
vsan.obj_status_report /dc/computers/cluster-name
Check specific object by UUID
# From ESXi:
esxcli vsan debug object health summary get
# Get details on a specific object:
esxcli vsan debug object list --uuid <object-uuid>
Check CLOM placement status
# From vmkernel.log:
grep -i "CLOM\|placement" /var/log/vmkernel.log | tail -50
# Look for: "Not enough resources" or "Cannot place component"
Bring failed hosts/disks back online
Most non-compliant objects self-heal once the failed component returns. Wait for automatic resync.
Force repair for objects stuck in "Reduced availability with no rebuild"
# Option A: Wait 60 minutes — vSAN auto-triggers rebuild after CLOM timeout
# Option B: Trigger immediate repair via RVC:
vsan.obj_status_report /dc/computers/cluster-name --fix-non-compliant
# Option C: From vSphere Client:
# Cluster → Monitor → vSAN → Resyncing Objects → "Repair Objects Immediately"
If cluster lacks capacity — adjust storage policy
# Temporarily lower FTT if needed (NOT recommended for production):
# VM → Policies and Profiles → Edit storage policy
# FTT=1, RAID-5 uses less capacity than RAID-1 (mirroring)
# Better: Add a host or disk group to increase capacity
Reapply storage policy to force rebalance
# vSphere Client:
# Select VM → Policies and Profiles → Reapply VM Storage Policy
# This triggers CLOM to find new compliant placement
Check resync status and bandwidth
# From ESXi Shell:
esxcli vsan debug resync summary
# Shows: Total Objects Resyncing, Bytes Remaining, Estimated Time
# From vSphere Client:
# Cluster → Monitor → vSAN → Resyncing Objects
# Review "Bytes Remaining" and "Active Resync" counts
Check resync throttle settings
# On each ESXi host:
esxcli system settings advanced list -o /LSOM/lsomResyncThrottleThreshold
# Default: 50 (50% of I/O budget) — lower = more throttling
Check for congested disks
esxcli vsan debug disk list
# Look for disks with high congestion values (>0)
vsish -e get /vmkModules/lsom/disks/<disk-uuid>/info
# Check latency and outstanding I/O count
Increase resync bandwidth (lower throttle)
# From ESXi Shell — run on EACH host in the cluster:
esxcli system settings advanced set -o /LSOM/lsomResyncThrottleThreshold -i 80
# From vSphere Client (per host):
# Host → Configure → System → Advanced System Settings
# Filter: "LSOM.lsomResyncThrottleThreshold" → Edit → Set to 80
# Verify the change:
esxcli system settings advanced list -o /LSOM/lsomResyncThrottleThreshold
Check and fix underlying network issues
# Verify no packet drops on vSAN vmkernel:
esxcli network ip interface stats get -i vmk1
# Check for TX/RX errors and dropped packets
# Test network throughput between hosts using vmkping:
vmkping -I vmk1 -d -s 8972 <other_host_vsan_ip>
# -d = don't fragment, -s 8972 = jumbo frame test
# Check vSAN network performance from vSphere Client:
# Cluster → Monitor → vSAN → Performance → Network tab
If a specific disk is causing I/O stalls — evacuate and replace
# Put host in maintenance mode with "Evacuate all data":
esxcli system maintenanceMode set -e true -m evacuateAllData
# Replace the disk, exit maintenance:
esxcli system maintenanceMode set -e false
esxcli vsan cluster get returns "Not in a VSAN cluster"Check vSAN cluster membership
esxcli vsan cluster get
# Expected: Local Node State = AGENT (for non-master) or MASTER
# If "Not in VSAN cluster" → vSAN service is not active
Check vSAN VMkernel exists
esxcli vsan network list
# Should show an interface (vmk1 typically) with "Agent Group" set
esxcli network ip interface tag get -i vmk1
# Must include "VSAN" tag
Verify firewall rules
esxcli network firewall ruleset list | grep -i vsan
# vsanvp2p, vsanEncryption, vsanhealth should be enabled
Create or fix the vSAN VMkernel adapter
# If vmk1 is missing:
esxcli network ip interface add -i vmk1 -p "vSAN-PG"
esxcli network ip interface ipv4 set -i vmk1 -I 10.10.10.x -N 255.255.255.0 -t static
# Tag it for vSAN:
esxcli network ip interface tag add -i vmk1 -t VSAN
# Or via vSphere Client:
# Host → Configure → Networking → VMkernel adapters → Add
# Enable "vSAN traffic" checkbox
Restart vSAN agent
# Restart the vSAN service to re-attempt cluster join:
/etc/init.d/vsanmgmtd restart
/etc/init.d/vsand restart
# Verify:
esxcli vsan cluster get
# Should now show "Local Node State: AGENT"
Enable firewall rules if blocked
esxcli network firewall ruleset set -r vsanvp2p -e true
esxcli network firewall ruleset set -r vsanEncryption -e true
esxcli network firewall ruleset set -r vsanhealth -e true
Claim disks and create disk group
# After host joins vSAN, create disk group:
esxcli vsan storage add -s naa.CACHE_SSD -d naa.CAPACITY_1 -d naa.CAPACITY_2
# Or auto-claim via vSphere Client:
# Host → Configure → vSAN → Disk Management → Claim Disks
Restore connectivity to the witness
# Ping witness from both sites:
vmkping -I vmk1 <witness_vsan_ip>
# If witness VM is down, power it on from its managing vCenter
# If WAN is down, work with network team to restore
If witness appliance is permanently lost — replace it
# Deploy new witness appliance OVA from VMware
# Configure networking (vmk0 = management, vmk1 = vSAN witness traffic)
# In vSphere Client:
# Cluster → Configure → vSAN → Fault Domains → Replace Witness Host
# Select the new witness appliance
Emergency — force preferred site if witness + one site are down
# LAST RESORT — Only if preferred site is up but cannot access witness:
# This forces the preferred site to assume quorum
# From any host in the preferred site:
esxcli vsan cluster preferredfaultdomain set --preferred-fault-domain-name "Preferred-Site"
# Then from RVC, force object accessibility:
# rvc: vsan.obj_status_report /dc/computers/cluster --force-accessible
# WARNING: This can cause data inconsistency if the non-preferred site had newer writes
VSAN: Failed to get key from KMSRestore KMS connectivity
# From vCenter: Administration → Key Providers
# Check KMS cluster status — test connection
# Verify network:
# From ESXi host:
nc -zv <kms_ip> 5696
# From vCenter:
curl -k https://<kms_ip>:5696 2>&1 | head
If KMS cert expired — re-establish trust
# In vCenter:
# Administration → Key Providers → KMS Cluster → Edit
# Re-upload the KMS server certificate
# Re-establish trust by exchanging certificates
# Verify trust:
# Key Providers → KMS Cluster → "Establish Trust"
Unlock disk groups after KMS is restored
# Once KMS is reachable, disk groups should auto-unlock
# If not, restart vSAN services on the affected host:
/etc/init.d/vsand restart
# Or put the host in/out of maintenance mode:
esxcli system maintenanceMode set -e true -m noAction
esxcli system maintenanceMode set -e false
Check per-disk congestion and latency
# vSAN Performance service must be enabled:
# Cluster → Monitor → vSAN → Performance → Physical Disks tab
# CLI:
esxcli vsan debug disk list
# Look for: "Congestion" value > 0 (scale: 0-255)
Check SSD wear level
esxcli storage core device smart get -d naa.xxxxxxxxxxxx
# "Wear Leveling Count" — threshold is typically 90-95%
# From vSphere Client:
# Cluster → Monitor → vSAN → Physical Disks → Filter by "Wear Level"
Check disk space utilization
esxcli vsan storage list
# Check "Capacity" vs "Used" per disk
# Overall:
# Cluster → Monitor → vSAN → Capacity
# Warning threshold: >80% used
Replace worn SSDs proactively
If cache SSD wear >80%, plan replacement during a maintenance window. Remove disk group with full data migration, replace SSD, recreate disk group.
Add capacity to reduce utilization
# Add new disk group or capacity disks:
esxcli vsan storage add -s naa.NEW_CACHE -d naa.NEW_CAP1 -d naa.NEW_CAP2
# Or add a new host to the cluster to distribute load
Evaluate and tune dedup/compression
# Check dedup/compression savings:
# Cluster → Configure → vSAN → Services → Space Efficiency
# If savings are minimal (<1.5x) and latency is high:
# Consider disabling — this requires a rolling evacuation
# vSphere Client → Cluster → Configure → vSAN → Services → Edit
Rebalance objects across the cluster
# Proactive rebalance (vSAN 6.7+):
# Cluster → Monitor → vSAN → Resyncing Objects → "Rebalance Disks"
# CLI (trigger manual rebalance):
esxcli vsan debug object rebalance
Verify all hosts are on the same ESXi version
# From vSphere Client:
# Cluster → Hosts → Review "Version" column for all hosts
# All hosts MUST be at the same ESXi version before on-disk format upgrade
# From ESXi Shell (run on each host):
vmware -vl
# Shows: VMware ESXi x.x.x build-XXXXXXX
Run pre-upgrade health checks
# Ensure ALL vSAN health checks are green:
# Cluster → Monitor → vSAN → Health → Run all checks
# Key checks:
# ✓ Network connectivity
# ✓ Disk health
# ✓ Object health — no inaccessible objects
# ✓ Capacity — at least 30% free
Trigger on-disk format upgrade
# vSphere Client:
# Cluster → Configure → vSAN → Disk Management → "Upgrade Pre-check"
# If pre-check passes → "Upgrade" button
# This performs a ROLLING upgrade:
# - Evacuates one disk group at a time
# - Reformats to new on-disk version
# - Re-adds disk group
# - Moves to next disk group
If upgrade fails midway — recover
# Check which disk groups completed and which are pending:
esxcli vsan storage list
# "vSAN Disk Group Format Version" shows current version per group
# If a specific disk group fails:
# 1. Remove the failed disk group (Full Data Migration)
# 2. Recreate it — it will use the new format automatically
# 3. Continue upgrade for remaining groups
Check maintenance mode pre-check
# vSphere Client:
# Right-click host → Maintenance Mode → "Pre-Check vSAN Data Migration"
# This shows EXACTLY which objects cannot be migrated and why
# CLI:
esxcli vsan debug object list --filter-on-host
# Shows objects that would be affected
Check for inaccessible/orphaned objects
# RVC:
vsan.check_state /dc/computers/cluster-name
# Look for orphaned objects (no parent VM):
vsan.obj_status_report /dc/computers/cluster-name | grep -i orphan
Use "Ensure Accessibility" instead of "Full Data Migration"
# If full migration is not possible due to capacity:
esxcli system maintenanceMode set -e true -m ensureObjectAccessibility
# This only moves objects where the host has the ONLY copy
# Objects with replicas on other hosts stay (reduced redundancy during maintenance)
# Much faster and uses less capacity
Cancel stuck maintenance and retry
# Cancel from vSphere Client:
# Recent Tasks → Right-click "Enter Maintenance Mode" → Cancel
# If task is orphaned and cancel doesn't work:
# Restart management agents:
/etc/init.d/hostd restart
/etc/init.d/vpxa restart
# Then retry with a less aggressive migration mode
Remove orphaned objects blocking evacuation
# Identify orphaned objects:
# RVC:
vsan.obj_status_report /dc/computers/cluster-name --filter-type orphan
# Delete orphaned objects (careful — verify they are truly orphaned):
# Contact VMware/Broadcom Support (GSS) for safe orphan removal
# Never delete objects attached to running VMs
Free capacity by migrating VMs to other storage (if available)
# Storage vMotion large VMs to non-vSAN datastore temporarily:
# This frees vSAN capacity for evacuation
# From vSphere Client:
# Right-click VM → Migrate → Change storage only
# Select a non-vSAN datastore (local/NFS/iSCSI) → Finish
# Repeat for largest VMs until sufficient vSAN space is freed
VsanVcClusterHealthSystem errorCheck vSAN health service status on vCenter
# SSH to vCenter Appliance:
vmon-cli --status vsanmgmtd
# Should return "RUNNING"
# Check the service logs:
tail -200 /var/log/vmware/vsanmgmtd/vsanmgmtd.log | grep -i "error\|exception\|fail"
Check health service on each ESXi host
# SSH to ESXi:
/etc/init.d/vsanmgmtd status
# Should return "vsanmgmtd is running"
# Check per-host health:
esxcli vsan health cluster list
Restart vSAN health service on vCenter
# SSH to vCenter:
vmon-cli --restart vsanmgmtd
# Wait 2-3 minutes, then retest health in vSphere Client
# If still stale, restart the entire vSAN management stack:
vmon-cli --restart vsanmgmtd
vmon-cli --restart vpxd
Reset health DB if corrupted
# On vCenter appliance — backup first:
cp /storage/vsanmgmt/statsdb/stats.db /storage/vsanmgmt/statsdb/stats.db.bak
# Remove corrupted DB (service will recreate it):
rm /storage/vsanmgmt/statsdb/stats.db
vmon-cli --restart vsanmgmtd
# Historical data will be lost but health checks resume immediately
Restart vSAN health on individual ESXi hosts
# SSH to the affected ESXi host:
/etc/init.d/vsanmgmtd restart
# Verify:
/etc/init.d/vsanmgmtd status
esxcli vsan health cluster list
Identify orphaned objects
# RVC (Ruby vSphere Console) from vCenter:
rvc administrator@vsphere.local@localhost
vsan.obj_status_report /dc/computers/cluster-name
# Look for "Orphaned" or "Inaccessible" objects
# Note the object UUIDs for cleanup
Check total orphan capacity waste
# From ESXi:
esxcli vsan debug object list | grep -c "orphan"
# Python script from vCenter (PyVmomi):
# Use vsan.QueryObjectIdentities() to enumerate all objects
# Cross-reference with VM inventory to find orphans
Safe orphan cleanup via vSphere Client
# vSphere Client (8.0u2+):
# Cluster → Monitor → vSAN → Health → Data
# "Invalid state objects" test shows orphans
# Use "Repair" action which safely deletes confirmed orphans
# Alternatively from RVC:
vsan.purge_inaccessible_vswp_objects /dc/computers/cluster-name
objtool unless directed by VMware/Broadcom Support. Deleting the wrong object causes permanent data loss for running VMs.
Prevent future orphans
# Ensure proper VM deletion workflow:
# 1. Power off VM
# 2. Right-click → "Delete from Disk" (not "Remove from Inventory")
# 3. Verify vSAN object count decreased
# After snapshot operations, always verify consolidation:
# VM → Snapshots → Consolidate if "Consolidation needed" appears
APD Timeout: Not RespondedPDL: Permanent Device LossvSAN-specific APD/PDL scenarios
# vSAN can trigger APD when:
# - vSAN VMkernel network goes down (all paths to remote components lost)
# - A cache SSD fails (entire disk group enters APD-like state)
# - Host running DOM owner becomes unreachable
# vSAN can trigger PDL when:
# - A capacity disk is physically removed or fails with SMART errors
# - Controller firmware marks a drive as permanently failed
# - Disk group is manually removed while objects still reference it
# Check current APD/PDL state:
esxcli storage core device list | grep -A2 "Is Perennially Reserved\|Status"
# Look for "dead" or "off" status
Configure APD/PDL response policies
# vSphere HA settings for APD:
# Cluster → Configure → vSphere HA → Failures and Responses
# → Datastore with APD:
# Response for VM: "Power off and restart VMs (conservative)"
# Delay: 140 seconds (match APD timeout)
# Reset period: 180 seconds
# For PDL:
# → Datastore with PDL:
# Response: "Power off and restart VMs"
# (HA will immediately restart VMs on healthy hosts)
# vSAN-specific: Set APD timeout
esxcfg-advcfg -s 140 /Misc/APDTimeout
# Default is 140 seconds — increase for environments with slow failover
Handle active APD on vSAN
# If APD is currently occurring:
# 1. Check network connectivity to vSAN VMkernel:
vmkping -I vmk1 <other-host-vsan-ip>
# 2. If network is fine, check disk health:
esxcli vsan debug disk list
esxcli storage core device list -d naa.xxx
# 3. If a single disk caused APD, the disk group will auto-recover
# after the disk is replaced or the path is restored
# 4. If APD timeout expires and VMs are stunned:
# HA will restart them on other hosts (if configured)
# Or manually: vim-cmd vmsvc/power.off <vmid>
# Then power on elsewhere
das.config.fdm.storageAllPathsDownTimeoutEnabled = true to ensure HA acts on storage failures.