Skip to main content
Version: 1.0

Deleting and rebuilding a cluster

Verified end to end 2026-09-16 against a real cluster (WLGDC, 2 nodes) on a live appliance: capture, decommission, full rebuild via the wizard, recovery from a real witness-permission failure, and re-adopting the original LUN with its data intact.

This is real, disruptive infrastructure work, not something to practise on a cluster holding production VMs. Before doing this for real, move or fail over anything the cluster is currently primary for, the same way you would before any maintenance that takes a cluster's storage and networking apart.

1. Capture the current desired state first​

Before deleting anything, the cluster's Desired state tab shows the full declarative document the centre would otherwise be your only record of:

{
"apiVersion": "ballast/v1",
"kind": "Cluster",
"meta": { "name": "WLGDC", "generation": 7 },
"spec": {
"members": ["HVNEW01", "HVNEW02"],
"managementIP": "192.168.1.200",
"witness": { "type": "FileShare", "fileSharePath": "\\\\podman.ballast.local\\witness" },
"storage": { "kind": "iSCSI", "iscsi": { "portals": ["10.0.60.60", "10.0.61.60"], "targets": ["iqn.2026-09.local.ballast:primary"], "credentialSecret": "NewIscsi" } },
"volumes": [{ "name": "VMStorage", "source": { "serialNumber": "676a1462-835e-4387-9e42-e58e97973a01" } }],
"switches": ["… full SET switch, uplink NICs and per-host management/live-migration/storage vNIC addresses …"],
"liveMigration": { "enabled": true, "authenticationType": "Kerberos", "networks": ["10.0.10.0/24"] },
"replicaBroker": { "name": "WLGDC-Broker", "staticIP": "192.168.1.222", "storagePath": "C:\\ClusterStorage\\VMStorage\\Replica" }
}
}

That is the console's view of the document. The apiVersion and kind keys are added for display and are not part of what the API accepts. See Desired-state contracts for the real shape and the meaning of each field.

Use the Export button on that tab, or copy the document by hand, this is the only copy of what was declared, and rebuilding from the wizard means retyping every field unless you have it to check against.

2. Delete the cluster​

From the cluster's ⋮ menu, Delete cluster opens a dialog that is explicit about how much it's about to do:

Ballast console Delete cluster dialog: default state, stopping management only, with checkboxes for also removing the hosts, exporting desired state, and tearing down the live cluster

By default, deleting only stops Ballast managing the cluster, the real failover cluster on the hosts is untouched, and the hosts stay onboarded as standalone. Ticking Also tear down the live cluster (decommission) exposes the real teardown:

Ballast console Delete cluster dialog with decommission ticked, showing the warning that this destroys Storage Spaces Direct's pool and CSVs, and the confirmation field requiring the cluster name to be typed

Two more checkboxes control how deep the cleanup goes, disconnect iSCSI on every member and remove its switch from every member, both unticked by default. Think carefully before ticking the switch removal option: the SET switch usually carries the host's own management IP, so removing it disconnects the host from the network the centre reaches it on. This walkthrough left both unticked and rebuilt on top of the existing iSCSI sessions and switch.

If you do want a genuinely clean rebuild​

The New cluster wizard refuses to configure a switch a host already has , "authors a cluster; if a real cluster with this name already exists, the designated former observes it and does not re-form it" is about the cluster, but the switch step needs a host with no switch of that name already on it to build one fresh. If you want to prove out a true from-scratch rebuild rather than reuse the existing switch, also remove the switch during decommission (accepting that the host will be unreachable over that switch until the wizard rebuilds it) or remove it by hand from each host's Networking tab first.

What's left behind​

Deleting orphans anything that was scoped to the cluster but isn't itself a host, VM, or the switch/port declarations that live on a host. Check Settings → Leftovers afterward:

Ballast console Leftovers page showing one record: a distributed port named Native on switch ConvergedSwitch, scoped to cluster WLGDC, which is no longer declared, removing it drops only the port declaration, not the switch or any host

Nothing here touches a host, every entry is a centre-side record about something that's moved or gone. Removing one drops the record, not the machine, VM, or switch it names.

3. Rebuild with the New cluster wizard​

From the fabric's + menu, New cluster… walks Nodes → Networking → Storage → Review, in that order.

Nodes: cluster name, member hosts, cluster management IP, and shared storage kind (Storage Spaces Direct, iSCSI array, or none yet), see Forming a new cluster for the fields themselves.

Networking: if a host already carries a switch of the name you're declaring, the wizard offers Import ConvergedSwitch from hosts, uplinks, vNIC addresses, gateways and DNS land pre-filled, though anything the host can't faithfully report (a storage vNIC's purpose, for instance, since that's not something a host reports back) needs your decision. On a clean host with no existing switch, the same fields start empty and every uplink and vNIC is chosen by hand, including the vNIC purpose dropdowns (Management / Live migration / Storage), which do not default correctly and must be set explicitly per vNIC, and MTU, which the console recommends at 9000 for every non-management vNIC when the physical fabric carries jumbo frames, again set individually per vNIC and not inherited from the uplink MTU setting.

Storage (iSCSI clusters): discovery portals, target IQNs and a CHAP credential. If member hosts already carry portals this cluster doesn't declare, leftover from a previous configuration, the console offers to clear them as part of forming, since dead entries are retried every reconcile pass and cost real time:

Ballast console New cluster Storage step: discovery portals, target IQNs, CHAP credential dropdown, and a highlighted box offering to clear leftover iSCSI portals the hosts still carry from a previous configuration

The same step also declares the quorum witness and live-migration network, and, if the witness's file share doesn't exist yet, tells you the one external step needed rather than failing silently later:

Review shows the whole declared cluster before anything is created, name, members, the full switch/vNIC layout, storage:

Ballast console New cluster Review step showing cluster name, members, management IP, the SET switch, all four management vNICs with their per-host IPs, and storage set to Storage Spaces Direct off

Creating it opens a Provisioning panel that tracks progress live and is safe to close, the agents keep converging in the background regardless:

Ballast console New cluster Provisioning panel showing Networking on HVNEW01, Networking on HVNEW02, and Form cluster WLGDC all in progress, with a note that closing the dialog is safe

Networking builds first, the SET switch, then every management/live-migration/storage vNIC, and only once that's fully settled does the agent actually run New-Cluster. On a rig with several vNICs and jumbo-frame verification, this step alone can take a few minutes; there's no need to keep re-checking faster than that.

4. A real failure this pass hit: the witness's CNO doesn't exist yet​

This is worth understanding before it surprises you. A cluster's computer account (the CNO, here, WLGDC$) is created in Active Directory as part of cluster formation itself. You cannot grant that account permission on a witness file share before the cluster exists, because the account doesn't exist yet, even if the share and a same-named CNO existed for a previous incarnation of the cluster, a rebuilt cluster's CNO is a new AD object with a new SID, and the old permission grant doesn't carry over even though the name looks identical.

In practice, the first Set-ClusterQuorum attempt against the witness fails, and the console names exactly why rather than leaving the operator to guess:

Ballast console orchestration step ClusterWitness showing ApplyFailed, with the exact diagnostic: the cluster reached the witness share as computer account WLGDC$ and was refused, naming the two things to grant and where

The fix is the one the message names: grant the new CNO read/write on the share (and the directory behind it) on the file server itself, Ballast has no agent there and cannot do this for you. Once granted, the next reconcile pass (or Reconcile now) retries and the witness comes online.

The sequencing to remember: you cannot pre-authorise a cluster's CNO on an external resource before the cluster is actually provisioned, the account simply doesn't exist until then. Expect this step to fail once on a rebuild, fix the permission using the identity the failure names, and let it retry. This isn't specific to file-share witnesses; the same is true of anything else that authenticates the CNO to a resource outside Ballast's reach.

5. Reattaching storage​

The cluster's Storage tab lists LUNs the array presents by serial number. A LUN that previously belonged to the cluster (before deletion) still exists on the array, Ballast never destroys array-side storage on delete, and shows as unclaimed until adopted again. Right-click it for Add volume…, which opens Adopt a LUN:

  • If no member has inventoried the LUN's contents yet, the dialog says so explicitly and declines to guess either way, rather than presenting a false choice between "empty" and "has data." This cleared on its own once the iSCSI sessions were healthy and the array had actually been scanned, no separate action was needed, just a pass.

  • Submitting the adopt against a LUN that turns out to hold real data does not format it. It fails safely instead, naming exactly what it found:

    Ballast console orchestration step "Cluster Shared Volume, VMStorage" showing ApplyFailed, naming the exact LUN serial, that it already holds a ReFS volume labelled "DS1" with 173.7GB used, and offering "Adopt as is" or "Wipe and adopt" as the two explicit choices

    This is the same LUN this walkthrough had captured in its desired-state backup at step 1, the serial matched exactly, so Adopt as is was the correct choice: it brings the existing volume into the cluster without formatting it, confirmed by a second dialog making that explicit before committing. Wipe and adopt is the other named option, for when the LUN's existing contents are genuinely finished with, Ballast never picks one over the other on its own.

  • Once adopted, the volume shows as provisioning while the cluster actually brings the disk online, adds it as a clustered disk, and mounts it as a Cluster Shared Volume, this lands on the next reconcile pass, not instantly.

The one identifier that matters throughout is the LUN's serial number, matching that against what you captured in step 1 is what makes "Adopt as is" a safe, deliberate choice rather than a guess. The end state matches the original desired-state capture from step 1 exactly:

Ballast console cluster Summary after the volume was adopted: settled at generation 2, all 9 orchestration steps done including Cluster Shared Volume and CSVMountPoints, storage 25% used across 190 GB of 752 GB on 1 LUN, and cluster status Healthy

6. Reconnecting VMs and replication​

Neither VMs nor Hyper-V Replica configuration are destroyed by any of the above, a VM whose cluster role was removed keeps running on its host, just outside cluster management until the cluster reforms and reclaims it. Replication that targeted the deleted cluster's Replica Broker shows the broken target until the cluster (and broker) exist again; it does not need to be re-declared, only reconnected once the broker is back.