This post covers the order that works, and the health checks I run afterwards so I know the lab is really back,
DNS is Technitium zone lab.internal and everything below runs on the Proxmox host pve

Powerup Sequence
“Running” in qm list only means the VM has power. These checks go up the stack, and each layer depends on the one below, so when something fails, stop and fix it before moving on.
Run the Scale checks as root on each site’s mgmt01 (ssh awk@sitea-mgmt01, then sudo -i).
Layer 1: Proxmox host
qm list # all 12 lab VMs running
pvesm status # storage pools active, not fullbridge
vlan show dev vmbr1 # VLAN-aware bridge, 1611 as native (PVID)
Layer 2: Network
Ping every node on every network from pve.
for ip in 172.16.11.11 172.16.11.13 172.16.11.14 172.16.11.15 172.16.11.16 172.16.11.19 172.16.12.21 172.16.12.23 172.16.12.24 172.16.12.25 172.16.12.26 172.16.12.29 172.16.13.11 172.16.13.13 172.16.13.14 172.16.13.15 172.16.13.16 172.16.14.21 172.16.14.23 172.16.14.24 172.16.14.25 172.16.14.26; do ping -c1 -W1 $ip >/dev/null && echo "$ip ok" || echo "$ip FAIL"doneCross-site daemon route (1613 to 1614), from inside a cluster:
ssh awk@sitea-mgmt01 'for h in siteb-mgmt01-d siteb-nsd01-d siteb-ces01-d; do ping -c1 -W1 $h >/dev/null && echo "$h ok" || echo "$h FAIL"; done'Layer 3: DNS (forward and reverse)
GPFS and CES both check names. CES won’t even add a floating IP without a reverse record.
for h in sitea-ces01 sitea-ces01-d siteb-ces01 siteb-ces01-d sitea-nfs01 siteb-nfs01; do printf '%-16s %s\n' $h "$(dig +short $h.lab.internal @172.16.11.5)"donedig +short -x 172.16.15.100 @172.16.11.5Layer 4: Time
Scale nodes need their clocks in sync. Lease and token timeouts get unhappy when they drift.
for h in sitea-mgmt01 sitea-nsd01 sitea-ces01 siteb-mgmt01 siteb-nsd01 siteb-ces01; do printf '%-14s ' $h; ssh awk@$h 'timedatectl show -p NTPSynchronized --value'doneLayer 5: SAN and iSCSI
On a node, check it has logged in to its SAN and can see the LUNs:
iscsiadm -m session # one session to the site's SAN
portallsblk | grep -c disk # roughly 12 disks: the OS disk + 11 LUNsOn the SAN itself (sitea-san / siteb-san), check the target and its LUNs:
targetcli ls /iscsiLayer 6: GPFS cluster
mmgetstate -aEvery node active. arbitrating or down means quorum or network trouble.
mmgetstate -sThe summary shows quorum nodes needed vs. active. You want all quorum nodes active.
mmlsclusterCheck the daemon node name column: every node, including the CES nodes, should be on its -d name (172.16.13.x / 172.16.14.x), not the mgmt network.
Layer 7: Disks and file systems
mmlsnsd -M # each NSD mapped to a device on its servers
mmlsdisk sitea_prod_scale_fs -e # lists only disks NOT up/ready; no output = good
mmlsdisk cesSharedRoot -e
mmlsmount all -L # which nodes have each file system mountedOn siteB, swap in siteB’s file system name (mmlsfs all -T lists them). cesSharedRoot must be mounted on both CES nodes, or CES won’t start.
Layer 8: Overall health
mmhealth cluster showThe one-screen summary for the whole cluster. Drill into any node that isn’t HEALTHY:
mmhealth node show -N sitea-ces01.lab.internalLayer 9: CES and NFS
mmces address list
mmces service list -a
mmces state show -a- One floating IP per CES node (
.100and.101). NFS is runningon both.
If both IPs are stuck on one node, check the policy and rebalance:
mmces address policy
mmces address move --rebalanceRun a health check
mmgetstate -a; mmhealth cluster show; mmces address list; mmces state show -a

Power-off sequence
1. Stop Scale on both sites
ssh -t awk@sitea-mgmt01 sudo /usr/lpp/mmfs/bin/mmshutdown -a
ssh -t awk@siteb-mgmt01 sudo /usr/lpp/mmfs/bin/mmshutdown -aThis unmounts every file system, stops CES (the floating IPs go down) and stops GPFS on every node.
2. Shut down the Scale nodes
CES first, then NSD, then mgmt:
for id in 115 116 125 126 113 114 123 124 111 121; do echo "stopping $id"; qm shutdown $id --timeout 180; doneqm shutdown asks the guest OS to shut down cleanly through ACPI and the guest agent. --timeout 180 gives each VM up to 3 minutes.
3. Shut down the SANs
for id in 119 129; do echo "stopping $id"; qm shutdown $id --timeout 180; done4. Confirm, then power off the host
qm list | grep running # no output = every VM is off
poweroff
