Automatisation de sauvegarde de machines virtuelles hébergées chez OVH et automatisation de transfert de ces sauvegardes sur le FTP fourni par OVH dans des dossiers journaliers avec écrasement sur une semaine.

 

 

1:/  état des lieux.

Nous avons sur une machine externalisée chez OVH sous proxmox (linux), 3 serveurs virtuels, 101, 102, 103.

Nous avons aussi fourni par le contrat par OVH un FTP disposant de 100Go d’espace de stockage, accessible en ncftp.

2:/ création des backups de chaque machine virtuelle en .TGZ

La création se fait directement dans le journal du démon Cron.

Chemin du démon Cron :

Etc/crontab  ou etc/cron.d  ou etc/cron.daily

Documentation bien faite ici sur la tâche cron.

 http://doc.fedora-fr.org/wiki/CRON_:_Configuration_de_t%C3%A2ches_automatis%C3%A9es

J’ai personnellement utilisé :  etc/cron.d

cron.jpg

Explication :

« Path » c’est le chemin ou le script peut être mis.

Ici le cron s’effectuera à 1h00 tous les mois, toutes les semaines mais seulement les jours : 2= mardi, 3= mercredi, 4= jeudi  et ce jusqu’à samedi. La correspondance des jours et des chiffres de 1 à 7 est la même sous Linux ou Windows, ce qui va être très pratique pour la suite.

« root » c’est le nom de l’utilisateur sous lequel va se lancer le démon. (démon sous Linux= service sous Windows)

« Vzdump » représente toutes les machines virtuelles

Ici commence les commandes

« --quiet »  effectue la tâche en silencieux, aucune notification ne sera visible, la tâche s’effectue en tâche de fond.

« --snapshot » c’est la commande pour créer des backups, ça prend un instantané de la machine virtuelle.

« --compress » archive le backup ainsi créé en .TGZ

« --storage sauvegardes »  créé un répertoire « sauvegarde » ou le backup compressés seront stockés.

« --maxfiles1 » limite à 1 chaque backup de chaque machine virtuelle. Ce qui aura pour effet que chaque backup du jour effacera celui de la veille, ainsi nous ne gardons dans notre dossier sauvegarde que 3 backup, un pour la 101 un pour la 102 et un pour la 103.

D’où la nécessité d’importer sur le FTP chaque jour les sauvegardes avant qu’elles ne soient écrasées.

3:/ création des dossiers journaliers sur le FTP

Pour joindre le serveur FTP depuis la console de proxmox, il faut prendre l’application PUTTY qui est un client se basant sur SSH notamment pour se connecter à distance sur un serveur distant.

A partir de putty faites ce qui suit pour se connecter en NCFTP. C’est une alternative au FTP mais offrant plus de facilité et de fonctionnalité que ce dernier.

Dans l’invite de commande de putty après avoir rentré votre mot de passe administrateur de proxmox, faites ceci :

/Ncftp

Open –u identifiant.ovh.net –p motdepasse nomftp.ovh.net

Ou bien

Open –u identifiant.ovh.net –p motdepasse adresseIPftp

Et vous serez connecté au FTP, toutefois si cela ne marchait pas, vérifiez vos identifiants, l’adresse ou le nom de votre serveur ftp ou scindez la commande.

Ex :

Open –u identifiant.ovh.net nomftp.ovh.net

Cela vous demandera directement le mot de passe dans ce cas il ne vous restera qu’à le taper.

Une fois sur le FTP il faut créer les dossiers correspondant aux jours. C’est ici que la simplification de la codification journalière informatique va nous aider. Il suffira de créer un dossier 2, 3, 4, 5, 6 correspondant aux jours de création des backups. Nous allons aussi créer des dossiers 1 et 7 même s’ils doivent rester vides, mais pour une utilisation future il se peut que nous en ayons besoin alors autant le faire de suite.

Pour ce faire la connexion au FTP vous a naturellement mis sur la racine, il suffit donc de taper :

Mkdir 1

Mkdir 2

Mkdir 3

Mkdir 4

Mkdir 5

Mkdir 6

Mkdir 7

Et si nous faisons maintenant dir , nous devrions avoir les 7 dossiers en visualisation.

Il est maintenant temps de revenir sur le proxmox pour créer les scripts de transfert.

4:/création des scripts de transfert

Pour les scripts, perso j’utilise notepad++, bien pratique avec ces couleurs en fonction des règles et au moins vous discernez facilement s’il vous manque une balise ou non, et vous différenciez facilement le texte par rapport à la programmation.

Tout d’abord il faut savoir que 100Go c’est vite rempli quand on a 3 backups d’une taille totale d’environ 16Go à répartir sur 5 fichiers (2,3,4,5,6). Donc nous allons faire une rotation d’une semaine, c'est-à-dire que les backups du mardi effaceront ceux du mardi d’avant.

Pour ce faire nous allons créer un script effaçant les fichiers dans le dossier voulu.

 J’ai nommé : mdeletevzdump.sh

 

mdelete.jpg

La variable « Numjour » est ici celle dont on parle vis-à-vis de la codification 1= lundi, 2= mardi etc etc. Ainsi, si les scripts sont lancés le matin tôt, du jour voulu alors la commande mdelete s’opérera dans le bon dossier.

Vous remarquerez que la ligne de commande de connexion est en FTP et non en NCFTP. Jusqu’ici je n’ai trouvé nulle part d’exemple de connexion NCFTP en script et à vrai dire aucun de mes scripts et de mes essais de connexion NCFTP en script n’a marché. Je pense que ce n’est pas faisable mais j’ignore pourquoi, car ça ne semble pas logique, mais il n’existe pas de « NCFTPConnectstring ». La fonction script ne les comprend pas en tant que commande.

« FTPCommands= » représente le début d’ordre de commande que le programme doit rentrer. N’oubliez pas que ce qui est compris dans cette commande doit être entre quottes : «’’ », présentes à la ligne 7 et à la ligne 10.

« cd $Numjour » : le travail se positionne dans le dossier correspondant à la variable Numjour, donc le 1 pour le lundi, le 2 pour le mardi etc etc. Bien entendu il vaut mieux que votre serveur FTP distant et votre serveur contenant les backups soient synchronisés sans quoi il y’ aura impossibilité de correctement faire les transferts.

« mdelete » est la commande pour effacer un ou plusieurs fichiers sur un serveur distant.

« vzdump_openvz-* » est le nom des fichiers de backup générés par la tâche cron qu’on a vu plus haut. Étant donné qu’ils sont du type « vzdump_openvz-IDmachine-AAAA_MM_JJ-HH_MnMn_SS.tgz » et que chaque semaine dans chaque dossier les variables « AAAA_MM_JJ-HH_MnMn_SS » changent, j’ai mis « * » pour indiquer tous les fichiers commençant par : « vzdump_openvz- ».

Tout ceci faisait partie des paramètres, écrivons maintenant la ligne permettant de les exécuter.

« echo –e « $FTPConnecsctring\n$FTPCommands\nbye | FTP –ivn » : initialise l’ordre des paramètres pour l’exécution. D’abord la connexion au FTP, puis les commandes FTP et enfin la déconnexion une fois les processus de commandes finis.

« -IVN» -i = mode interactif désactivé donc plus de question "telecharger ce fichier (O/N) ?" en cas de mget ou mput.

 -v = verbose, dans les logs du ftp cela créera des lignes commençant par un numéro a 3 chiffres, cela permet par la suite de détecter des erreurs de transferts.

-n =n'utilise pas le .netrc, c’est un fichier pour l’              automatisation des transferts vers les FTP, pouvant contenir des mots de passe et autres logins.

Maintenant que notre dossier est bien propre et bien vide nous allons passer à la suite.

La création du script de transfert des backups.

J’ai nommé ftpback.sh

ftpback.jpg

Ici c’est la même chose, sauf que les FTPCommands, sont différentes.

« cd /$Numjour » Je positionne le travail dans le dossier correspondant au jour

« lcd /var/lib/vz/dump ». lcd est la même commande que cd sauf qu’elle agit en local (localcd). J’indique ici sur mon serveur local le chemin du dossier contenant les fichiers à transférer.

« mput * » c’est la fonction put mais sur le serveur distant, et elle indique qu’elle va télécharger tous les fichiers (*). Vous l’aurez compris * est un joker, elle permet de remplacer les noms de fichiers ou la suite des noms pour indiquer la totalité des possibilités de noms présents.

Ces scripts là faits, il e reste qu’à créer la tâche Cron qui les activera.

Tâche Cron d’activation des scripts mdeletevzdump.sh et ftpback.sh

cron vzdump.jpg

Toujours dans etc/cron .d j’ai ajouté à la ligne déjà présente deux lignes supplémentaires.

Ligne 7 : à 3h00 les jours 2,3,4,5,6 sera exécuté par l’utilisateur root, le script présent dans le dossier bin et s’appelant medeletevzdump.sh

Après tests, je savais que le mdelete ne durait que quelque secondes, par sécurité au cas où d’autres tâches de fond ralentissent la suppression j’ai mis la tâche de transfert 30mn plus tard.

Ligne 9 : à 3h30 les jours 2,3,4,5,6 sera exécuté par l’utilisateur root le script présent dans bin et s’appelant ftpback.sh

Il ne nous reste pour que cette tâche puisse s’exécuter normalement qu’à changer les droits sur le fichier ftpback.sh et mdeletevzdump.sh

Donc rendons nous dans le dossier bin et soit avec la ligne de commande du terminal :

Faire chmod 755 ftpback.sh

Chmod 755 medeletevzdump.sh

Soit un clic droit et changer les propriétés et cochez les cases correspondantes à une autorisation 755, de façon a avoir en Droits :

rwxr-xr-x. Soit en gros contrôle total pour root, lecture et exécution pour le groupe et lecture et exécution pour n’importe quel utilisateur. (r= readable, w= writable, x= exécutable)

 

scr droitsftpbck.bmp

 

 

5:/Exécution de la tâche cron finale

Une fois la nuit passée normalement votre tâche cron à activée tous les scripts allant de la création des archives à 1h du matin, à la suppression des fichiers dans le dossier du jour à 3h00, au transfert des fichiers nouveaux présents sur le serveur proxmox à 3h30 (backups plus log).

Et après nous être connecté via putty au FTP d’ovh par NCFTP comme nous l’avons vu plus tôt nous devrions en ouvrant au maximum la fenêtre et en entrant un DIR –R (permet de lister le contenu de tous les dossiers en même temps), voir l’intégralité des fichiers normalement transférés.

Et là je vous assure, on est content quand ça marche !!

 

scr ncftpdir.bmp

 

NB : les heures de transferts présentes sur cette capture écran sont issues d’une tâche cron similaire mais lancée manuellement pendant la phase de test d’où le décalage avec les horaires présents sur la tâche cron finale.

Pour tous renseignements :

jasonpinaud@hotmail.com