1. Comment ça marche ?▲
C'est très simple, avez-vous déjà essayé de copier une machine virtuelle d'un hôte vers un autre sans l'éteindre ? Essayez et vous verrez que cela vous donne une erreur. Pourquoi ? Parce que lorsqu'une VM est allumée, les vmdk ou fichiers de disques virtuels sont lockés (verrouillés). Comment faire alors ? C'est simple, pour enlever ce lock sur le vmdk il faut et il suffit de faire un snapshot de la VM. Ah bon ? Ben oui ! Un snapshot après tout c'est quoi ? Un fichier différentiel à partir d'un instant T dans lequel esxi va écrire les modifs jusqu'au delete ou merge de ce différentiel. Dès lors que le snapshot est créé, le fichier du snapshot est locké et le lock du vmdk initial relâché. Scriptez ce principe et vous obtiendrez Ghettovcb.sh.
Voilà pour le principe.
2. Fonctionnalités▲
- Support de backups multiples de VMDKs par VM.
- Backup des VMDK valides uniquement.
- Backup à chaud.
- Possibilité d'éteindre la VM avant d'initier le backup puis de la redémarrer ensuite.
- Vérification de la bonne suppression des snapshots issus des backups précédents avant chaque backup.
- Les VM contenant déjà des snapshots ne sont pasbackupées.
- Possibilité de choisir le type des fichiers de disques de backup des VMDK (split 2Go...).
- Support des disques (virtuels) IDE et SCSI.
- Support des VMDk éparpillés sur plusieurs datastores.
- Possibilité de compresser les backups (fonctionnalité en bêta)
- Possibilité de définir des stratégies de sauvegarde différentes selon les VM.
- Possibilité d'inclure/exclure certains vmdk pour une certaine VM.
- Création de log de sortie.
- Timeout pour l'arrêt des VM (optionnel) et la création de snapshots.
- Snapshots paramétrables (mémoire, etc.).
- Débogage durant l'exécution du script.
- Support RDM.
- Support d'une liste d'exclusion de VM.
- Possibilité de backuper toutes les VM d'un hôte sans passer par une liste.
- Mécanismes de locks pour éviter l'exécution simultanée du script plusieurs fois sur le même hôte.
- Arborescence de répertoires pour les backups(rsync).
- Email de log/résultat (expérimental).
- Support Rsync (expérimental).
3. Prérequis▲
Un seul prérequis est nécessaire : l'activation de SSH sur le/les hôte(s).
4. Installation▲
Pour installer, commencer par télécharger ghettovbc.tar.gz
Déposer le package sur l'hôte esx/esxi.
Et c'est parti pour les commandes :
# tar -zxvf ghettoVCB.tar.gz
Extrait le contenu du package.
# cd ghettoVCB
C'est tout (pour le moment)!
5. Configuration▲
Pour configurer le tout il est nécessaire d'éditer le .conf, notamment les valeurs des paramètres suivants :
- VM_BACKUP_VOLUME = volume ou datastore sur lequel poser les backups ;
- DISK_BACKUP_FORMAT = format de disque (zeroedthick | eagerzeroedthick | thin | 2gbsparse) ;
- VM_BACKUP_ROTATION_COUNT = rotation par VM ;
- POWER_VM_DOWN_BEFORE_BEFORE_BACKUP = éteindre la VM avant backup (0=false/non 1=true/oui) ;
- ENABLE_HARD_POWER_OFF = force un arrêt de la VM si l'option précédente est activée et que la VM n'a pas les tools (0=false/non 1=true/oui) ;
- ITER_TO_WAIT_SHUTDOWN = nombre de minutes à attendre avant le HARD POWER OFF ;
- POWER_DOWN_TIMEOUT = nombre de minutes à attendre avant extinction de la VM avant de l'ignorer et passer à la suivante ;
- SNAPSHOT_TIMEOUT = nombre de minutes à attendre pendant le snapshot avant d'ignorer et passer à la VM suivante ;
- ENABLE_COMPRESSION = activer la compression des backups (0=false/non 1=true/oui) ;
- ADAPTER_FORMAT = format du contrôleur de stockage des VMDK de sortie (lsilogic | buslogic) ;
- VM_SNAPSHOT_MEMORY =&VM_SNAPSHOT_QUIESCE= (0=false/non 1=true/oui) activer ou désactiver les options de mémoire et d'attente du snapshot ;
- VMDK_FILES_TO_BACKUP =définir un vmdk en particulier à backup pour une certaine VM, utiliser "all" pour tous les backuper ;
- EMAIL_LOG = (0=false/non 1=true/oui) activer l'envoi du log par e-mail ;
- EMAIL_DEBUG = si l'envoi du mail est OK, en conserver une copie sur l'hôte quand même (0=false/non 1=true/oui) ;
- EMAIL_SERVER = adresse du serveur mail ;
- EMAIL_SERVER_PORT = port du serveur mail à utiliser ;
- EMAIL_TO = adresse à laquelle part le mail ;
- EMAIL_FROM = émetteur du mail ;
- RSYNC_LINK = support d'un lien symbolique RSYNC.
6. Utilisation▲
# ghettoVCB.sh -f <LISTE_DE_VMS> -c <FICHIER_CONFIG_VMS>-l <FICHIER_LOG> -d <NIVEAU_DEBUG> -g <CONF GLOBALE> -e <LISTE_VMS_EXCLUES>
OPTIONS
- -a Backuper toutes les VM d'un hôte.
- -f Liste des VM à backuper.
- -c Répertoire des fichiers de configuration desVM backupées.
- -g Cheminvers le fichier .conf de ghettovcb.
- -l Fichier de log de sortie.
- -d Niveau de débogage (info|debug|dryrun) (defaut: info).
7. Exemples▲
- Backuper les VM d'une liste :
#./ghettoVCB.sh -f vms_liste
Avec le fichier liste comportant le nom des VM (1 par ligne).
- Backuper toutes les VM d'un hôte :
#./ghettoVCB.sh -a
- Backuper toutes les VM d'un hôte sauf celles listées :
#./ghettoVCB.sh -a -e vms_excliste
8. Mise en tâche planifiée (ESX)▲
Pour mettre le backup en tâche cron, exécuter les commandes suivantes.
# crontab -e
Ajouter une entrée de type :
0 0 * * 1-5<path_script>/ghettoVCB.sh -f <path_script>/VMS_LIST ><path_script>/ghettoVCB-backup-$(date +\%s).log
En éditant la syntaxe avec les options voulues bien sûr
Sauvegarder et quitter.
# crontab -l
Votre entrée crontab devrait maintenant apparaitre.
9. Mise en tâche planifiée (ESXi)▲
Ajouter la commande au fichier crontab déjà présent dans /var/spool/cron/crontabs/root
Killer le crontab qui tourne :
- Esxi< 3.5u3 :
# kill $(ps | grepcrond | cut -f 1 -d ' ')
- Esxi 3.5u3+ :
# kill $(pidofcrond)
# crond
- Esxi 4.0 :
# kill $(cat /var/run/crond.pid)
# busyboxcrond
Pour être sûr que la tâche sera persistante au reboot, ajouter les lignes également au fichier/etc/rc.local :
- Esxi 3.5 :
/bin/echo"<votrecommande vcbGhetto.sh>">> /var/spool/cron/crontabs/root
crond
- Esxi 4.0 :
/bin/echo "<votrecommande vcbGhetto.sh>" >> /var/spool/cron/crontabs/root
/bin/busyboxcrond
On backupe la nouvelle conf :
# /sbin/auto-backup.sh
On vérifie :
- Que cron tourne bien :
ESX :
# ps -ef | grepcrond | grep -v grep
ESXi :
# ps | grepcrond | grep -v grep
- Que le date/time est correct :
# date
X. Remerciements▲
Je voudrais remercier ClaudeLELOUP pour sa relecture orthographique détaillée.