Sauvegarde automatique des données
Pour éviter de ne plus servir...
vendredi 11 février 2005, par Pierre-Luc Bacon
La charge de la maintenance d’un serveur, bien qu’étant stimulante par ses défits, est trop souvent préoccupante. La cohérence et la prudence sont de mise lorsque vient le temps d’ajouter de nouvelles fonctionnalités ou d’isoler un problème pour éviter de commettre une opération maladroite telle qu’un « rm » sur un dossier important, ou pire, à la racine.
La solution proposée ici permet la sauvegarde des données à horaire fixe et leur exportation sur un serveur distant, de préférence, hors du réseau. Nous aurions aussi pu opter pour d’autres supports d’enregistrement tels que les bandes magnétiques ou les CDRW mais l’idée de la copie distante a l’avantage de permettre la mise en place d’un système de dépannage indépendant du serveur dédié d’origine. Nous utiliserons ici deux services facilement accesibles mais surtout essentiels sous Linux : ssh, et Cron. Au moment déterminé dans l’horaire de Cron, le court script de sauvegarde sera exécuté archivant le répertoire voulu sous forme compressée et l’exportant sur un serveur autre avec sftp.
| Sommaire
Configuration de SSH Cron Résultat et améliorations |
Configuration de SSH
Pour poursuivre la démarche de cette article, vous devrez installer le paquetage OpenSSH dans le format de votre distribution ou depuis les sources.
Pour se connecter à l’ordinateur distant, nous devons saisir une commande de la forme suivante :
$ssh utilisateur@serveur |
Un message apparaîtra ensuite demandant le mot de passe pour l’utilisateur. Puisque que cette commande sera intégrée à un script, nous devrons parvenir à fournir cette information malgré l’impossibilité de le faire directement. Le « ssh-agent » nous est particulièrement utile ici. En effet, ce programme permet en surveillant les demandes de connection, de s’authentifier automatiquement à l’ordinateur à contacter.
Commençons par générer la paire de clés :
$ssh-keygen -t dsa |
Si votre version de SSH est récente, vous devriez être en mesure de spécifier le type dsa. Le cas contraire, l’appel de ssh-keygen suffira pour lancer ce processus. Comme spécifié par ssh-keygen, un fichier nommé id_dsa.pub est placé à l’emplacement défini précédemment. Il ne restera plus maintenant qu’à partager cette clé sur l’ordinateur à contacter. Sur cette machine distante, éditer un fichier nommé authorized_keys dans le répertoire .ssh. [1] Copiez-y votre clé et veillez à insérer une ligne vide après celle-ci pour d’autres ajouts.
ssh-agent
Comme nous utilisons un cryptage avec passphrase, il ne suffit pas aux machines en contact de connaître leur identité seulement que par les clés générées. ssh-agent doit être informé de ce code d’accès par le programme ssh-add.
$ssh-add |
Si vous entrez cette commande, il est fort probable que vous obteniez une réponse du genre :
$ssh-add |
Nous devons donc lancer ssh-agent auparavent. Vous pouvez procéder ainsi :
$ssh-agent /bin/bash
|
ou au démarrage du serveur X par
$ssh-agent startx
|
Il sera maintenant possible d’exécuter ssh-add sans erreur.
Dorénavent, si vous demandez
$ssh utilisateur@serveur |
la connection sera établie sans demande de mot de passe.
Cron
Cron est un démon servant à démarrer des tâches selon un horaire défini par les crontabs d’un système. La plage de précision de cet horaire s’étend de la minute au mois. L’idée de notre système sera donc de lancer un script à interval régulier qui archivera les données et les expédiera sur le serveur distant.
Lançons crontab pour ajouter cette tâche :
$crontab -e |
La plupart du temps, VI devrait s’ouvrir comme éditeur par défaut pour crontab. Ajoutons-y maintenant les commandes :
#sauvegarde distante le mercredi à minuit |
Une copie de sauvegarde de la base de donnée du site est faite par mysqldump et compressée par gzip. Ce fichier sera ensuite enregistré dans le répertoire dont nous ferons l’exportation.
Voyons ce que devra contenir notre script sauvegarde.sh :
#!/bin/sh |
Le contenu du répertoire que nous souhaitons garder copie, en l’occurence celui d’un site web, est archivé et compressé avec tar. Notez ici l’utilisation de l’expression `date +%d%m%Y` qui permet d’ajouter la date au format jour/mois/annee/ à la fin du nom de notre fichier. Puisque nous ne pouvons passer directement les commandes internes de sftp à son appel, nous utiliserons l’option spéciale -b qui permet de spécifier un fichier batch. Ce dernier n’est autre chose que l’ordonnance des commandes qui seraient entrées manuellement en situation normale.
put machivi*.tar.gz /home/utilisateur-distant/ |
Résultat et améliorations
Le système décrit dans cet article fonctionne comme il se doit. Cependant, son exécution peut présenter certains problèmes. En effet, si vous ne posséder pas une connection à haut débit, il est probable que votre bande passante en téléchargement vers le serveur soit réduite de façon importante par la taille du fichier tar transféré. Dans ce cas, nous pourrions considérer l’option de procéder à une sélection parmi les fichiers pour éliminer ceux qui nous importe le moins tels que des vidéos trop volumineux. Pour indiquer cette sélection, nous pouvons recourir à l’argument exclude de tar.
Ex.
tar cvfz monsite`date +%d%m%Y`.tar.gz /var/www/htdocs/ --exclude=/var/www/htdocs/videos
|
Avec plusieurs fichiers à éliminer, une autre option s’impose :
--exclude-from=FICHIER |
où FICHIER contient cette sélection.
Si l’on prévoit effectuer un transfère de cette copie de sauvegarde sur un serveur distant, soyez vigilant pour vous assurer d’avoir suffisemment d’espace sur le disque dur pour contenir le nombre déterminé de copies des données à différentes périodes. Imaginons une sauvegarde hebdomadaire d’un fichier pouvant atteindre 100Mo, à la fin d’une année, c’est plus de 5,2 Go de donnée que devra contenir le serveur. Considérant l’espace réservé sur la machine distante ainsi que la taille des fichiers, il est clair qu’une rotation ou un tri des fichiers devrait s’imposer. Un script bash pourrait accomplir cette opération en conservant par exemple le dernier fichier du mois.
Notes
[1] Il est possible que vous ne retrouviez ni ce fichier ni ce répertoire même si ssh est installé sur le système. Le cas échéant, vous devrez les créer vous-même.


Répondre à l'auteur: