Esxi Backup GhettoVCB
Introduction
GhettoVCB est un script SH permettant la sauvegarde au chaud ou froid et la restauration de machines virtuelles sous ESX ou ESXi.
= Installation
Télécharger la dernière version et la mettre sur l'ESXi avec scp ou WinSCP, puis, décompresser l'archive pour l'installer :
# tar -xzf lamw-ghettoVCB-518cef7.tar.gz # rm lamw-ghettoVCB-518cef7.tar.gz # mv lamw-ghettoVCB-518cef7 ghettoVCB # cd ghettoVCB # ls -hl -rw-rw-r-- 1 root root 281 Nov 28 2011 README -rwxrwxr-x 1 root root 15.6k Nov 28 2011 ghettoVCB-restore.sh -rw-rw-r-- 1 root root 309 Nov 28 2011 ghettoVCB-restore_vm_restore_configuration_template -rw-rw-r-- 1 root root 356 Nov 28 2011 ghettoVCB-vm_backup_configuration_template -rw-rw-r-- 1 root root 631 Nov 28 2011 ghettoVCB.conf -rwxrwxr-x 1 root root 48.2k Nov 28 2011 ghettoVCB.sh
Sauvegarde
La sauvegarde se fait en utilisant le script ghettoVCB.sh
- Configuration
La configuration se fait en modifiant le fichier ghettoVCB.conf
* VM_BACKUP_VOLUME : Datastore et répertoire dans lequel les sauvegardes sont entreposées, si le répertoire n'existe pas, il sera crée. * DISK_BACKUP_FORMAT : Format de disque, peut être paramétré à zeroedthick, eagerzeroedthick, thin ou 2gbsparse. * VM_BACKUP_ROTATION_COUNT : Nombre de rotation de sauvegarde pour un machine virtuelle. * POWER_VM_DOWN_BEFORE_BACKUP : Indique si le script doit stopper la machine virtuelle avant d'en faire la sauvegarde. Si la VM est stoppe avant sauvegarde, elle ne sera pas sauvegarde en utilisant la méthode des cliché instantané (snapshot) * ENABLE_HARD_POWER_OFF : Activer l'arrêter brutal d'une machine virtuelle si POWER_VM_DOWN_BEFORE_BACKUP est activé et qu'elle ne dispose pas des VMware Tools. * ITER_TO_WAIT_SHUTDOWN : Indique le nombre de minutes d'attente avant l'arrêt brutale d'une machine virtuelle si ENABLE_HARD_POWER_OFF est activé. * POWER_DOWN_TIMEOUT : Minutes d'attente avant qu'une machine virtuelle soit éteinte. Si la VM n'est pas éteinte une fois ce délai écoulé la sauvegarde de celle-ci est annulée. * SNAPSHOT_TIMEOUT : Minutes d'attente pour la création d'un cliché instantané d'une machine virtuelle. Si ce délai est écoulé la sauvegarde de celle-ci est annulée. * ENABLE_COMPRESSION : Activation ou non de la compression. (Expérimental) * VM_SNAPSHOT_MEMORY et VM_SNAPSHOT_QUIESCE : Activer ou désactiver les options de mémoire et d’attente du snapshot. (Désactivé par défaut) * EMAIL_LOG : Activer l’envoi du log par e-mail. * EMAIL_DEBUG : Conserver une copie sur l’hôte si l'envoi du mail s'est bien déroulé. * EMAIL_SERVER : Adresse du serveur mail. * EMAIL_SERVER_PORT : Port du serveur mail a utiliser. * EMAIL_TO : Adresse a laquelle part le mail. * EMAIL_FROM : Émetteur du mail.
- Manuel
SYNTAXE : ./ghettoVCB.sh -f [VM_BACKUP_UP_LIST] -c [VM_CONFIG_DIR] -l [LOG_FILE] -d [DEBUG_LEVEL] -g [GLOBAL_CONF] -e [VM_EXCLUSION_LIST]
OPTIONS :
-a Sauvegarder toutes les machines virtuelles de l'hôte.
-f Liste des machines virtuelles à sauvegarder.
-e Liste des machines virtuelles à exclure de la sauvegarde.
-c Dossier contenant un fichier de configuration spécifique à la sauvegarde de machines virtuelles.
-g Chemin d'excès du fichier de configuration global de ghettoVCB.
-l Fichier journal.
-d Niveau de débogage [info|debug|dryrun] (Par défaut: info)
Sauvegarder les VM indiquées dans une liste
./ghettoVCB.sh -f vms_to_backup
Sauvegarder toutes les VM d'un hôte
./ghettoVCB.sh -a
Sauvegarder toutes les VM d'un hôte sauf celle listées.
./ghettoVCB.sh -a -e vm_exclusion_list
Sauvegarder les VM en utilisant la configuration stocké dans un répertoire spécifique
./ghettoVCB.sh -f vms_to_backup -c vm_backup_configs
Sauvegarder les VM en utilisant le fichier de configuration global
./ghettoVCB.sh -f vms_to_backup -g /global/ghettoVCB.conf
Spécification de l'emplacement des journaux (Ceux-ci sont par défaut dans /tmp/ghettoVCB.log)
./ghettoVCB.sh -f vms_to_backup -l /vmfs/volume/local-storage/ghettoVCB.log
Essai à blanc (Aucune sauvegarde ne sera faite)
./ghettoVCB.sh -f vms_to_backup -d dryrun
Les fichiers de listes de machines virtuelles à sauvegarder ou exclure est de la forme suivante :
VM01
VM02
VM03
Utilisation
Les disques des machines virtuelles à sauvegarder ne doivent pas être déclarés comme indépendants, si c'est le cas, un test de sauvegarde à blanc (option -d dryrun) remontera l'erreur suivante :
Snapshots can not be taken for indepdenent disks!
Exemple d'utilisation :
# ./ghettoVCB.sh -f ./vm_backup_list -g ./ghettoVCB.conf -l ./testBackup.log Insufficient arguments. 2012-08-23 14:50:28 -- info: ============================== ghettoVCB LOG START ============================== 2012-08-23 14:50:28 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE = ./ghettoVCB.conf 2012-08-23 14:50:28 -- info: CONFIG - VERSION = 2011_11_19_1 2012-08-23 14:50:28 -- info: CONFIG - GHETTOVCB_PID = 9436587 2012-08-23 14:50:28 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/5e909b68-89b5a355 2012-08-23 14:50:28 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3 2012-08-23 14:50:28 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2012-08-23_14-50-27 2012-08-23 14:50:28 -- info: CONFIG - DISK_BACKUP_FORMAT = thin 2012-08-23 14:50:28 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 1 2012-08-23 14:50:28 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0 2012-08-23 14:50:28 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3 2012-08-23 14:50:28 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5 2012-08-23 14:50:28 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15 2012-08-23 14:50:28 -- info: CONFIG - LOG_LEVEL = info 2012-08-23 14:50:28 -- info: CONFIG - BACKUP_LOG_OUTPUT = ./testBackup.log 2012-08-23 14:50:28 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0 2012-08-23 14:50:28 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0 2012-08-23 14:50:28 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all 2012-08-23 14:50:28 -- info: CONFIG - EMAIL_LOG = 0 2012-08-23 14:50:28 -- info: Datastore not found. Datastore not found. Datastore not found. 2012-08-23 14:50:31 -- info: Powering off initiated for CentOS6.0-MEP-base_ssh_snmp, backup will not begin until VM is off... 2012-08-23 14:50:32 -- info: VM is powerdOff 2012-08-23 14:50:32 -- info: Initiate backup for CentOS6.0-MEP-base_ssh_snmp Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/datastore2/CentOS6Test/CentOS6Test.vmdk'... Clone: 94% done. 2012-08-23 14:52:50 -- info: Backup Duration: 2.30 Minutes 2012-08-23 14:52:50 -- info: Successfully completed backup for CentOS6.0-MEP-base_ssh_snmp! Datastore not found. Datastore not found. Datastore not found. 2012-08-23 14:52:52 -- info: ###### Final status: All VMs backed up OK! ###### 2012-08-23 14:52:53 -- info: ============================== ghettoVCB LOG END ================================
Il est bien entendu possible de rediriger vers /dev/null les messages, ceci est fortement conseillé si GhettoVCB est utilisé via une crontab.
# ./ghettoVCB.sh -f ./vm_backup_list -g ./ghettoVCB.conf -l ./testBackup.log > /dev/null Une fois la sauvegarde terminée, celle-ci est stocké dans un répertoire du type $VM_BACKUP_VOLUME/$NOM_VM/$NOM_VM-$(date +%Y-%m-%d_%H-%M-%S)/ Ce qui, pour la VM d'exemple ci-dessus donne quelque chose du type : # ls -hl /vmfs/volumes/ESXBackup/CentOS6.0-MEP-base_ssh_snmp/CentOS6.0-MEP-base_ssh_snmp-2012-08-23_14-50-27/ -rw------- 1 root root 8.0G Aug 23 14:52 CentOS6Test-flat.vmdk -rw------- 1 root root 516 Aug 23 14:52 CentOS6Test.vmdk -rwxr-xr-x 1 root root 2.8k Aug 23 14:50 CentOS6Test.vmx -rw-r--r-- 1 root root 30 Aug 23 14:52 STATUS.ok
Restauration
La restauration d'une sauvegarde se fait en utilisant le script ghettoVCB-restore.sh
Ce script ne fait que restaurer les fichiers de la VM dans un nom de dossier contenant la date de la sauvegarde, si vous restaurez une VM dans un état antérieur (celle-ci n'a pas été supprimé) il sera nécessaire de faire un renommage pour que la VM utilise les fichiers restauré. Si vous restaurer une VM supprimé corp et biens, celle-ci sera automatiquement recrée et visible sous vSphere.
Si lors du démarrage via vSphere d'une VM restaurée de A à Z vous recevez un message vous indiquand que l'UUID provient d'une VM copié ou déplacé, indiquez que vous avez copié ladite VM.
- Configuration
La configuration de la restauration se fait créant un fichier de configuration pour la/les machine(s) virtuelle(s) à restaurer, ce fichier est ensuite donnée à la commande de restauration. Le syntaxe du fichier de configuration est la suivante : "<DIRECTORY or .TGZ>;<DATASTORE_TO_RESTORE_TO>;<DISK_FORMAT_TO_RESTORE>" Avec : * DIRECTORY or .TGZ : Le répertoire contenant la sauvegarde. * DATASTORE_TO_RESTORE_TO : Le Datastore contenant la VM à restaurer. * DISK_FORMAT_TO_RESTORE : Nombre indiquant le format de disque-dur de la VM à restaurer. (1 : zeroedthick, 2 : 2gbsparse, 3 : thin, 4 : eagerzeroedthick) Ajouter une ligne par VM à restaurer, en indiquand plusieurs lignes, il est possible de restaurer plusieurs VM. Par exemple, pour restaurer la VM précédemment sauvegarder, indiquer la ligne suivante : "/vmfs/volumes/ESXBackup/CentOS6.0-MEP-base_ssh_snmp/CentOS6.0-MEP-base_ssh_snmp-2012-08-24_08-38-21;/vmfs/volumes/datastore2;3"
- Manuel
SYNTAXE: ./ghettoVCB-restore.sh -c [VM_BACKUP_UP_LIST] -l [LOG_FILE] -d [DRYRUN_DEBUG_INFO]
OPTIONS:
-c Liste des machines virtuelles à sauvegarder.
-l Fichier journal.
-d Essai à blanc/Information de débogage [1|2]
Afficher les messages de sortie à l'écran (pas de fichier journal spécifié)
./ghettoVCB-restore.sh -c vms_to_restore
Mettre les messages de sortie dans /tmp/ghettoVCB-restore.log
./ghettoVCB-restore.sh -c vms_to_restore -l /tmp/ghettoVCB-restore.log
Essai à blanc/Information de débogage (Pas de restauration)
./ghettoVCB-restore.sh -c vms_to_restore -d 1
./ghettoVCB-restore.sh -c vms_to_restore -d 2
Utilisation
Exemple d'utilisation :
# ./ghettoVCB-restore.sh -c vm_restore_list
################## Restoring VM: CentOS6.0-MEP-base_ssh_snmp #####################
Start time: Fri Aug 24 09:10:22 UTC 2012
Restoring VM from: "/vmfs/volumes/ESXBackup/CentOS6.0-MEP-base_ssh_snmp/CentOS6.0-MEP-base_ssh_snmp-2012-08-24_08-38-21"
Restoring VM to Datastore: "/vmfs/volumes/datastore2" using Disk Format: "thin"
Creating VM directory: "/vmfs/volumes/datastore2/CentOS6.0-MEP-base_ssh_snmp-2012-08-24_08-38-21" ...
Copying "CentOS6Test.vmx" file ...
Restoring VM's VMDK(s) ...
Updating VMDK entry in "CentOS6Test.vmx" file ...
Destination disk format: VMFS thin-provisioned
Cloning disk '/vmfs/volumes/ESXBackup/CentOS6.0-MEP-base_ssh_snmp/CentOS6.0-MEP-base_ssh_snmp-2012-08-24_08-38-21/CentOS6Test.vmdk'...
Clone: 100% done.
Registering CentOS6.0-MEP-base_ssh_snmp ...
608
End time: Fri Aug 24 09:22:39 UTC 2012
################## Completed restore for CentOS6.0-MEP-base_ssh_snmp! #####################
Start time: Fri Aug 24 09:10:22 UTC 2012
End time: Fri Aug 24 09:22:39 UTC 2012
Duration : 12.28 Minutes
}}}