Configurer une sauvegarde FTP simple et efficace Dans le dernier numéro, nous avons abordé l installation de Slackware Linux sur une Dedibox. Le moment est venu de mettre en place une politique de sauvegarde pour cette machine. La solution que nous vous présentons est simple et efficace, et rien ne vous empêche de l adapter à un contexte différent, par exemple pour votre poste de travail. Tout ce qu il vous faut, c est une machine tournant sous Linux et un serveur FTP. La Dedibox SC de la société Online est un serveur d entrée de gamme et ne comporte qu un seul disque dur, ce qui exclut toute possibilité de redondance du stockage grâce au RAID. Il est donc d autant plus vital de prévoir une politique de sauvegarde des données du serveur. Lorsque vous louez une Dedibox, Online propose un espace de sauvegarde de 200 gigaoctets, moyennant quelques euros supplémentaires. Si vous décidez de souscrire à cette offre, l espace de sauvegarde est accessible via FTP à l adresse ftp://dedibackup-bzn.online.net (ou ftp://dedibackupdc2.online.net si vous avez opté pour une Dedibox Classic). L ensemble des paramètres (URL, login, mot de passe) est disponible via https://console.online.net, la même interface avec laquelle vous gérez votre Dedibox. La stratégie idéale en termes de sauvegarde consisterait évidemment en un deuxième serveur dédié auquel nous pourrions accéder via rsync pour synchroniser les fichiers à sauvegarder. Ici, nous sommes contraints au transfert FTP, et nous allons essayer de faire au mieux avec les moyens de bord. En tant que root, éditez un script backup. Pour l instant, laissez-le dans le répertoire utilisateur de root, c est-à-dire /root. Nous le rangerons dans un endroit approprié un peu plus loin. Commencez par définir quelques variables :!/bin/bash backup MONTH, c est le résultat de la commande date formatée pour afficher le mois courant sous forme de chiffre, par exemple 03 pour le mois de mars, ou 11 pour le mois de novembre. La variable SERVER est censée contenir le nom d hôte du serveur. MONTH et DATE nous serviront à estampiller les fichiers de sauvegarde. Quant aux variables FTPUSER, FTPPASS et FTPHOST, elles fournissent respectivement le nom d utilisateur, le mot de passe et l hôte FTP distant. Notre fichier est un début de script shell, il faut donc qu il soit exécutable. D un autre côté, il contient le mot de passe FTP «en clair», il est donc vital que personne d autre que root ne puisse lire le contenu de backup. Définissons les permissions en conséquence : droit de lecture, d écriture et d exécution (rwx) pour root, et rien du tout (---) pour tous les autres. chmod 0700 backup ls -l backup -rwx------ 1 root root 1159 sept. 12 09:49 backup Sauvegarder la configuration de mon serveur revient à archiver «à la louche» le contenu de l arborescence en-dessous du répertoire /etc (Editing Text Config). Je vais donc créer une archive
compressée du contenu de /etc et envoyer le fichier résultant dûment estampillé sur le serveur FTP grâce à la commande curl. Ajoutez la stance suivante au script backup : Configuration du serveur tar czf - etc/ curl -T - -u $FTPUSER:$FTPPASS \ ftp://$ftphost/$server-$month-config.tar.gz Les sites Web hébergés sur la machine se trouvent tous en-dessous de /var/www/vhosts. Je vais donc pouvoir procéder de même pour les sauvegarder en un tournemain : Sites Web var/www tar czf - vhosts/ curl -T - -u $FTPUSER:$FTPPASS \ ftp://$ftphost/$server-$month-vhosts.tar.gz Enfin, les mails des utilisateurs sont stockés en-dessous de l arborescence /home, et il me suffit de faire ceci : Mails des utilisateurs tar czf - home/ curl -T - -u $FTPUSER:$FTPPASS \ ftp://$ftphost/$server-$month-mails.tar.gz Testons le bon fonctionnement du script de sauvegarde. Pour ce faire, on va le lancer manuellement. Si tout se passe bien, on obtient quelque chose comme ceci :./backup 100 2124k 0 0 0 2124k 0 636k --:--:-- 0:00:03 998k 100 12.5M 0 0 0 12.5M 0 3255k --:--:-- 0:00:03 3264k 100 3172 0 0 0 3172 0 3619 --:--:-- --:--:-- 3637 100 233k 0 0 0 233k 0 246k --:--:-- --:--:-- 247k Voyons si le transfert s est correctement effectué. J utilise le client FTP ncftp pour me connecter au serveur distant : ncftp -u sd-xxxxx dedibackup-bzn.online.net ncftp / > ls sd-xxxxx-09-config.tar.gz sd-xxxxx-09-mails.tar.gz sd-xxxxx-09-vhosts.tar.gz Si je prévois une sauvegarde quotidienne, les fichiers sd-xxxxx-09-*.tar.gz seront tous actualisés par écrasement jusqu au prochain changement de mois. Le serveur FTP contiendra donc au maximum douze jeux de fichiers de sauvegarde. Si vous avez beaucoup de données sur votre serveur dédié, la solution la plus simple consiste à faire un brin de ménage à la main une fois par trimestre, en supprimant tout simplement les fichiers trop anciens. Occupons-nous à présent des bases de données sur le serveur. Ajoutez une stance correspondante au script backup : Base de données Configurer une sauvegarde FTP simple et efficace - page 2 de 5
DBNAME="mabase" DBUSER="utilisateur_mysql_de_mabase" DBPASS="pass_mysql_de_mabase" mysqldump -u $DBUSER -p$dbpass $DBNAME curl -T - -u $FTPUSER: $FTPPASS \ ftp://$ftphost/$server-$month-database-$dbname.sql Relancez le script backup comme nous venons de le faire. Si tout s est bien passé, le serveur FTP contient un nouveau fichier du genre sd-xxxxx-09-database-mabase.sql. Maintenant que le script fonctionne, j aimerais mettre en place une exécution quotidienne automatique de ce script. Sur un système Slackware, il suffit de ranger le script en question dans le répertoire /etc/cron.daily. Voici un petit récapitulatif de notre script jusque-là :!/bin/bash /etc/cron.daily/backup Configuration du serveur tar czf - etc/ curl -T - -u $FTPUSER:$FTPPASS \ ftp://$ftphost/$server-$month-config.tar.gz Sites Web var/www tar czf - vhosts/ curl -T - -u $FTPUSER:$FTPPASS \ ftp://$ftphost/$server-$month-vhosts.tar.gz Mails des utilisateurs tar czf - home/ curl -T - -u $FTPUSER:$FTPPASS \ ftp://$ftphost/$server-$month-mails.tar.gz Base de données mysqldump -u $DBUSER -p$dbpass $DBNAME curl -T - -u $FTPUSER: $FTPPASS \ ftp://$ftphost/$server-$month-database-$dbname.sql Pour connaître les horaires d exécution des tâches programmées, il nous faut invoquer la commande suivante : crontab -l Run hourly cron jobs at 47 minutes after the hour: 47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null Run daily cron jobs at 4:40 every day: 40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null Run weekly cron jobs at 4:30 on the first day of the week: Configurer une sauvegarde FTP simple et efficace - page 3 de 5
30 4 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null Run monthly cron jobs at 4:20 on the first day of the month: 20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null L exécution des tâches quotidiennes est définie par la stance suivante : Run daily cron jobs at 4:40 every day: 40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null En langage tam-tam, cette ligne signifie que les scripts contenus dans /etc/cron.daily doivent être exécutés tous les jours à 4 heures 40 du matin. Pour changer l heure d exécution des tâches programmées, il faudra utiliser l option -e : crontab -e Run daily cron jobs at 0:00 every day: 00 0 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null Ici, j ai défini minuit (c est-à-dire 0h00) comme heure de lancement des tâches quotidiennes. Je vous renvoie au manuel de crontab pour la syntaxe détaillée : man crontab Pour finir, il ne me reste plus qu à m occuper de mes sauvegardes hebdomadaires. Le serveur contient toute une série de fichiers audio pour une webradio, rangés en-dessous de /var/lib/mpd. Ces fichiers ne sont pas d une importance capitale, et il me suffit de les sauvegarder une fois par semaine. Je vais donc éditer un fichier /etc/cron.weekly/backup en conséquence :!/bin/bash /etc/cron.weekly/backup Webradio var/lib tar czf - mpd/ curl -T - -u $FTPUSER:$FTPPASS \ ftp://$ftphost/$server-$month-webradio.tar.gz Là aussi, n oublions pas de définir des permissions saines afin d éviter que le mot de passe «en clair» ne soit lisible par les utilisateurs communs mortels de la machine : chmod 0700 /etc/cron.weekly/backup À partir du moment où je mets en place un serveur de mails sur la machine, je peux même m assurer confortablement du déroulement correct de chaque sauvegarde. À chaque fois qu un des scripts /etc/cron.daily/backup ou /etc/cron.weekly/backup est exécuté, un mail est envoyé à l utilisateur root du système, que l on peut facilement rediriger vers votre boîte habituelle. Si vous ne savez pas comment vous y prendre pour cette dernière opération, elle pourra faire l objet d un prochain article. Configurer une sauvegarde FTP simple et efficace - page 4 de 5
Annexe des illustrations 1. sauvegarde01.png La console de la Dedibox permet d afficher et de modifer les paramètres d accès FTP à la sauvegarde. 2. sauvegarde02.png La sauvegarde est gérée par un simple script shell qui utilise les commandes tar, curl et mysqldump. 3. sauvegarde03.png Lancement manuel d une première sauvegarde. 4. sauvegarde04.png La commande crontab -l affiche la liste des tâches programmées. 5. sauvegarde05.png Éditez les heures d exécution des tâches programmées avec crontab -e. 6. sauvegarde06.png Les fichiers de sauvegarde, classés par mois. 7. sauvegarde07.png Rien ne vous empêche d utiliser un client FTP graphique pour gérer les sauvegardes. 8. sauvegarde08.png Un mail automatique vous avertit du déroulement correct de chaque sauvegarde. Configurer une sauvegarde FTP simple et efficace - page 5 de 5