In questo contesto per backup si intende il clone della virtual machine salvata in un qualche storage eventualmente definito come parametro di backup.
Nella versione 2 lo script, prima di effettuare il backup, si preoccupa di eliminare tutte le snapshot associate alla virtual machine.
Questo comportamento può portare a spiacevoli situazioni, nel caso la snapshot in oggetto sia un backup applicativo da mantenere per un eventuale restore.
Per ovviare a questo comportamento, propongo la seguente patch.
L'intento è di eliminare le snapshot che lo script ghettoVCB.sh esegue prima del backup e che possono rimanere associate alla virtual machine per un qualche motivo imprevedibile; ad esempio se lo script viene terminato a metà della sua esecuzione. Mantenendo invece le snapshot dell'utente.
A questo punto è doverosa una precisazione in merito.
Quando si associa una snapshot alla virtual machine, le nuove modifiche saranno registrate su questa snapshot e non al disco virtuale della macchina (che subisce il backup), ne consegue che un backup in presenza di snapshot non può che essere un backup della virtual machine precedente alla prima snapshot.
In questo caso il comportamento è come nella versione precedente: il backup fallisce.
La patch altro non fa che controllare il nome della snapshot, e nel caso inizi con la stringa "ghetto" la elimina:
--- ghettoVCB.sh 2014-05-22 17:13:35.194285000 +0200Ovviamente l'eventuale snapshot che si vuole mantenere non dovrebbe iniziare con la parola chiave "ghetto". Nel caso, si dovrà modificare il "nome snapshot" dato dallo script:
+++ ghettoVCBpatching.sh 2014-05-26 17:46:43.723052158 +0200
@@ -910,8 +910,9 @@
logger "info" "Snapshot found for ${VM_NAME}, backup will not take place\n"
VM_FAILED=1
elif [ ${ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP} -eq 1 ]; then
- logger "info" "Snapshot found for ${VM_NAME}, consolidating ALL snapshots now (this can take awhile) ...\n"
- $VMWARE_CMD vmsvc/snapshot.removeall ${VM_ID} > /dev/null 2>&1
+ logger "info" "Snapshot found for ${VM_NAME}, remove snapshot now (this can take awhile) ...\n"
+ SNAP_GHETTO=`$VMWARE_CMD vmsvc/snapshot.get ${VM_ID} | awk -F: '/^ghetto*/ && $0 != "" { getline; print $2}'`
+ for snap_n in $SNAP_GHETTO;do $VMWARE_CMD vmsvc/snapshot.remove ${VM_ID} $snap_n;done
fi
fi
#nfs case and backup to root path of your NFS mount
if [[ ! ${POWER_VM_DOWN_BEFORE_BACKUP} -eq 1 ]] && [[ "${ORGINAL_VM_POWER_STATE}" != "Powered off" ]]; then
SNAPSHOT_NAME="ghettoVCB-snapshot-$(date +%F)"
logger "info" "Creating Snapshot \"${SNAPSHOT_NAME}\" for ${VM_NAME}"
${VMWARE_CMD} vmsvc/snapshot.create ${VM_ID} "${SNAPSHOT_NAME}" "${SNAPSHOT_NAME}" "${VM_SNAPSHOT_MEMORY}" "${VM_SNAPSHOT_QUIESCE}" > /dev/null 2>&1
Preferendo a vmware tecnologie quali L4, LDOM ed exokernel vari, le quali architetture sono incomparabilmente più eleganti, ... concludo il post con una celebre frase ironica del venerabile Knuth.
"Beware of bugs in the above code; I have only proved it correct, not tried it."
Nessun commento:
Posta un commento