#!/bin/bash # /usr/local/sbin/quorum-autofix.sh # Automatically fix Proxmox cluster quorum to prevent "activity blocked" LOGFILE="/var/log/quorum-autofix.log" LOCAL_NODE=$(hostname) # Extract Total votes (nodes currently online) TOTAL=$(pvecm status | awk -F: '/Total votes:/ {gsub(/ /,"",$2); print $2}') # Extract Expected votes (cluster configuration) EXPECTED=$(pvecm status | awk -F: '/Expected votes:/ {gsub(/ /,"",$2); print $2}') if [[ -z "$TOTAL" || -z "$EXPECTED" ]]; then echo "[$(date)] [$LOCAL_NODE] Could not parse quorum status." >> $LOGFILE exit 1 fi # Current quorum in X/Y format CURRENT="${TOTAL}/${EXPECTED}" echo "[$(date)] [$LOCAL_NODE] Current quorum: $CURRENT" >> $LOGFILE # Determine correct expected votes if [[ "$TOTAL" -lt "$EXPECTED" ]]; then echo "[$(date)] [$LOCAL_NODE] Total votes ($TOTAL) < Expected votes ($EXPECTED) → fixing quorum" >> $LOGFILE pvecm expected "$TOTAL" echo "[$(date)] [$LOCAL_NODE] Quorum fixed: expected votes set to $TOTAL" >> $LOGFILE else echo "[$(date)] [$LOCAL_NODE] Quorum OK, no change needed" >> $LOGFILE fi exit 0