Une des tâches que l’on se doit de très rapidement mettre en place sur un serveur est la sauvegarde. Il y a plusieurs alternatives pour cela. De mon côté, n’étant qu’un administrateur amateur, j’ai trouvé mon bonheur avec duplicity.
Duplicity est un programme de sauvegarde incrémentale pour systèmes GNU/Linux tels Debian ou Ubuntu. Il permet de réaliser des sauvegardes à distance (via ssh et scp, rsync, ftp, ou Amazon S3) en chiffrant les données. Le processus utilisé par duplicity consiste en un “full backup” suivi d’une série de “backup incrémental” sous la forme d’archives tar chiffrées par gpg.
J’associe à duplicity une batterie de quelques scripts simples qui permettent de faciliter la sauvegarde, la configuration et la restauration en cas de besoin.
Installer duplicity
Pour commencer il vous faut installer le programme :
apt-get install duplicity
(ajoutez évidemment sudo
si vous n’êtes pas connecté en root
).
Si vous allez utiliser duplicity pour un backup en FTP, pensez également à installer :
apt-get install ncftp
Utiliser la commande duplicity
Vous pouvez faire le choix d’utiliser directement la commande duplicity. Voici les principales utilisations
duplicity full [options] “source_dir” “target_url”
Commande pour lancer un full backupduplicity incremental [options] “source_dir” “target_url”
Commande pour lancer un backup incrémentalduplicity list-current-files [options] “target_url”
Permet de lister les fichiers sauvegardésduplicity remove-older-than time [options] [-- force] “target_url”
Permet de supprimer les sauvegardes anciennesduplicity collection-status [options] “target_url”
Affiche des informations sur l’état de la sauvegardeduplicity cleanup [options] [-- force] “target_url”
Nettoie les fichiers en erreur et orphelins, etc (notamment en cas de crash d’une sauvegarde). Pour effacer complètement une sauvegarde, il faut supprimer manuellement la chaîne de sauvegarde sur le répertoire de destination puis lancer ensuite un duplicity cleanup.duplicity [restore|verify] [options] “source_url” “target_dir”
Commande pour simuler ou lancer une restaurationduplicity --help
Affichage de l’aide
Vous pouvez allez plus loin avec man duplicity
ou duplicity --help
.
Faciliter la manipulation des sauvegardes
Plutôt que d’utiliser manuellement les commandes, j’ai un peu plus pratique : une batterie de quelques scripts simples pour gérer tout cela de manière un peu plus ergonomique.
Ces script s’appuient sur l’appel d’un fichier de configuration. Il sera ainsi simple d’avoir autant de fichiers de configuration que de sauvegardes à réaliser (par exemple une sauvegarde principale complète en FTP et une sauvegarde complément de certain fichiers uniquement sur un autre support). Aucune limite donc à votre paranoïa ! Les plus prudents d’entre vous seront comblés.
Installer les scripts de sauvegarde
Nous allons installer ces script dans le répertoire /usr/local/sbin
# On récupère les scripts wget -O /usr/local/sbin/master-backup-cleanup.sh --no-check-certificate https://raw.github.com/yvangodard/Scripts-Utiles/master/duplicityscripts/scripts/master-backup-cleanup.sh wget -O /usr/local/sbin/master-backup-listing.sh --no-check-certificate https://raw.github.com/yvangodard/Scripts-Utiles/master/duplicityscripts/scripts/master-backup-listing.sh wget -O /usr/local/sbin/master-backup-restore.sh --no-check-certificate https://raw.github.com/yvangodard/Scripts-Utiles/master/duplicityscripts/scripts/master-backup-restore.sh wget -O /usr/local/sbin/master-backup-status.sh --no-check-certificate https://raw.github.com/yvangodard/Scripts-Utiles/master/duplicityscripts/scripts/master-backup-status.sh wget -O /usr/local/sbin/master-backup-verify.sh --no-check-certificate https://raw.github.com/yvangodard/Scripts-Utiles/master/duplicityscripts/scripts/master-backup-verify.sh wget -O /usr/local/sbin/master-backup.sh --no-check-certificate https://raw.github.com/yvangodard/Scripts-Utiles/master/duplicityscripts/scripts/master-backup.sh # On les rends exécutables sudo chmod +x /usr/local/sbin/master-backup*
A partir de ce moment là on dispose de commandes que l’on pourra utiliser :
master-backup-verify.sh
vous permet de simuler un backup, d’afficher le résultat, sans pour autant l’effectuer, en listant les modifications en cours,master-backup-listing.sh
vous permet de lister tous les fichiers inclus dans votre sauvegarde, en fonction de votre configuration (nous y viendrons plus tard),master-backup-status.sh
vous permet de voir quel est l’état de votre backup,master-backup-cleanup.sh
est la commande à utiliser en cas de crash d’une sauvegarde, pour supprimer les fichiers orphelins et fichiers en erreur,master-backup-restore.sh
est la commande à utiliser pour restaurer un ou plusieurs fichier(s) ou dossier(s),master-backup.sh
et la commande principale pour réaliser votre backup.
L’intérêt de cette batterie de scripts est de ne pas avoir à entrer manuellement tous les paramètres, car ils vont interroger un fichier de configuration qui contiendra notamment :
- l’adresse et les paramètres de connexion au répertoire distant de sauvegarde (FTP, SSH, Amazon ou autre),
- la liste des dossiers à sauvegarder,
- la liste des dossiers à exclure,
- etc.
Mise en place du fichier de configuration
Je vous propose de récupérer un fichier de configuration à compléter :
wget -O /etc/master-backup.conf --no-check-certificate https://raw.github.com/yvangodard/Scripts-Utiles/master/duplicityscripts/etc/master-backup.conf
Il ne vous reste qu’à modifier ce fichier pour le personnaliser selon votre configuration, notamment les paramètres suivants :
EMAIL
contient l’adresse email qui recevra le journal de sauvegarde. S’il est vide, aucun mail sera envoyé et le journal de sauvegarde sera envoyé sur la sortie standard. Vous avez également la possibilité de mettre une deuxième adresse destinataire avec le paramètreEMAILADMIN
.BASE
est le dossier où un dossier tmp sera créé si nécessaire pour les fichiers temporaires de duplicity.CACHE
est le dossier qui contiendra le cache de duplicity. Il est conseillé de conserver ce cache dans le dossier BASE mais il peut aussi être défini sur un point de montage dédié.FULLDELAY
est le délai maximum avant de refaire un backup complet. Si vous souhaitez refaire un backup complet tous les quinze jours et entretemps des sauvegardes incrémentales, utilisezFULLDELAY=15D
.HOWMANYKEEPFULL
est le paramètre qui permet de fixer le nombre de backups complets à conserver.PASSPHRASE
est le secret utilisé par duplicity pour chiffrer les archives sur l’espace de stockage. Connaître ce secret est indispensable pour restaurer des fichiers. Vous pouvez générer aléatoirement votre passphrase ici http://www.littlelite.net/pwdgen/ en choisissant par exemple 30 caractères.NAME
est le nom associé au backup. Si vous configurez plusieurs backups sur votre machine, utilisez des noms différents, pour séparer les caches.WHAT
doit contenir les dossiers à exclure et inclure de la sauvegarde. Deux alternatives s’offrent à vous :- Soit vous créez quelque part un fichier contenant la liste des dossiers à exclure dans votre sauvegarde (disons par exemple
/home/backups/master-backups_exclude.txt
) et quelque part un fichier contenant la liste des dossiers à inclure dans votre backup (disons par exemple/home/backups/master-backups_include.txt
). Dans ce cas, votre fichier de configuration se terminera ainsi :# WHAT doit contenir les exclusions et inclusions pour les sauvegardes # Par défaut tout est exclu, donc si aucune inclusion n'est spécifiée, la # sauvegarde sera vide. Il vaut mieux indiquer les exclusions spécifiques # en premier, puis indiquer les inclusions. Dans ce sens, la première liste # d'exclusion peut ne concerner que ce qui est à exclure dans la liste d'inclusion. # En général, on va ainsi spécifier dans la liste d'exclusion des sous-dossiers # de la liste des inclusions. # Exemple: On veut sauvegarder tout /home sauf un dossier /home/mysql utilisé # par le service MySQL tout en sachant que des dumps MySQL sont faits dans /home/backups # Exclusion: /home/mysql # Inclusion: /home # # Voir "man duplicity" pour les options possibles unset WHAT WHAT="$WHAT --exclude-filelist /home/backups/master-backups_exclude.txt" WHAT="$WHAT --include-filelist /home/backups/master-backups_include.txt"
- Soit vous entrez dans les lignes concernées, directement dans le fichier de configuration, la liste des inclusions et exclusions, comme par exemple :
unset WHAT # Ajout liste des exclusions # Entrez dans la ligne qui suit à liste des dossiers à ne pas sauvegarder for d in /home/mysql $BASE /var/cache /var/lock /var/run /var/tmp /var/spool/postfix '/root/VirtualBox*' do WHAT="$WHAT --exclude $d" done # Ajout liste des inclusions # Ajoutez ici la liste des dossiers à inclure dans la sauvegarde for d in /home /var /etc /root /usr /bin /sbin /boot /lib /lib32 /lib64 do WHAT="$WHAT --include $d" done
- Soit vous créez quelque part un fichier contenant la liste des dossiers à exclure dans votre sauvegarde (disons par exemple
OPTIONS
vous permet d’ajouter l’appel de paramètres de la commande de duplicity. Par exemple ajoutez une ligneOPTIONS="-v info"
pour changer le niveau de verbosité.
Vous pouvez éditez ce fichier avec nano /etc/master-backup.conf
et le modifier à votre guise.
Si vous utilisez plusieurs destinations de sauvegarde, créez un deuxième fichier de configuration, en veillant à ce que son nom commence par master-backup pour être correctement interprété. Notez que vous pouvez dans ce cas n’entrer dans ce deuxième fichier de configuration que les valeurs des paramètres à changer car nos scripts veilleront à charger par défaut les valeurs contenues dans /etc/master-backup.conf
.
Utilisation
Pour lancer une sauvegarde incrémentale immédiate en ligne de commande avant une intervention importante, utilisez la commande :
master-backup.sh --no-email --incremental
Pour restaurer un dossier ou un fichier, utilisez la commande :
master-backup-restore.sh [-f] [-t x[s|m|h|D]] chemin_vers_fichier_ou_dossier [chemin_à_restaurer]
Options :
-f : pour forcer la restauration si la cible existe
-t [délai] : pour restaurer la version dispo au délai spécifié (ex.: 1h pour une heure, 3D pour 3 jours)
Par défaut, la restauration se fait en place mais on peut indiquer un nouveau chemin pour la restauration.
Par exemple master-backup-restore.sh -f -t 2D /etc/master-backup.conf /etc/master-backup.conf.old
va forcer la restauration du fichier /etc/master-backup.conf
d’il y a deux jours sous le nouveau nom /etc/master-backup.conf.old.
Programmez vos tâches de restauration dans votre crontab
Pour éditer votre crontab, utiliser crontab -e
.
Quelques exemples de tâches cron
pour réaliser vos backups, à adapter selon vos besoins :
# backup quotidien principal chaque jour à 01h15 15 1 * * * /usr/local/sbin/master-backup.sh --report-status #backup duplicity FTP Quotidien # backup secondaire en forçant l'appel du fichier de config /etc/master-backup-2.conf # Dans /etc/master-backup-2.conf FULLDELAY=1D, pour gérer dans la crontab manuellement l'alternance Full / Incrémental # On force un backup full chaque samedi à 01h15 15 1 * * 6 /usr/local/sbin/master-backup.sh --conf /etc/master-backup-2.conf #backup Secondaire (Full / Hebdo) # On force un backup incrémental chaque jour sauf le samedi à 01h30 30 1 * * 0-5 /usr/local/sbin/master-backup.sh --conf /etc/master-backup-2.conf --incremental #backup secondaire (Incrémental / Quotidien)