Skip to content

Health and orphan checks

Health findings

vsfleet analyze health evaluates a stored capture offline, the most recent unless --run names another. Findings include a stable rule ID, category, severity, object, context, measured evidence, and recommendation. Categories are migration, availability, security, capacity, and hygiene.

Defaults are 30 days for maximum snapshot age and 10% minimum free space for datastores and guest filesystems. Tune them with --max-snapshot-age, --min-datastore-free, --min-datastore-free-bytes, --min-guest-disk-free, --disable-rule, --severity, and --category. -o wide shows recommendations, evidence, tags and custom attributes; JSON always includes them. --field-selector and -l keep the findings whose object matches, in the language of vsfleet get. --list-rules lists rules and categories. --fail-on-findings exits 2 for findings at or above the selected severity; command errors exit 1.

Snapshot age uses the context's capture finish time, falling back to the run finish time. Reading recomputes findings; the vHealth coverage message records thresholds, so identical evidence and options reproduce the export.

Rule state Meaning
not-evaluated The run predates required inventory fields
unknown A required collection failed or was not recorded
Partial answer Findings remain visible, with blind contexts named
Partly evaluated The rule judged every VM it had evidence for; partial_contexts counts the VMs left out per context

Orphan-disk evidence

Capture with vsfleet capture run --browse-datastores, then inspect vsfleet analyze orphans. Browsing requires Datastore.Browse and adds a bounded directory listing per accessible datastore.

Candidates are matched estate-wide using VMFS UUIDs, extents, NFS exports, vVol IDs, and datastore URLs where available. Verdicts are verified-unreferenced, suspected-unreferenced, referenced-other-context, or unknown-incomplete-coverage. Snapshot chains match in both directions. Truncated browse, failed relevant collection, or missing backing identity prevents verification.

analyze health --fail-on-findings --severity warning fails only on verified orphans; lower-confidence candidates are informational. analyze orphans -o json includes paths, sizes, timestamps, identity keys, references, and coverage reasons.

Check scan coverage

An empty list is clean only if every datastore was fully browsed. Missing, denied, failed, or truncated browse prints NOT EVALUATED, names affected datastores on stderr, and sets JSON coverage even when entries is empty. --fail-on-unknown exits non-zero for any datastore not fully browsed.

Follow the reported cause: capture with --browse-datastores if it was omitted, grant Datastore.Browse if denied, or resolve the reported failure. For example, browse denied on 3/3 datastores: grant Datastore.Browse and browse failed on 1/1 datastores: ... call for different actions.

The capture summary also reports the shortfall, such as 1/1 contexts successful, datastore browse denied on 3/3 datastores; JSON adds a datastore_browse object.