Sauvegardes incrémentales avec Duplicity vers un Qnap TS-219 PII sous Debian Wheezy

Suivez-moi aussi sur Identi.ca ou sur Twitter.

Après l’installation de Debian Wheezy sur mon Qnap TS-219 PII, j’ai décidé d’utiliser le programme duplicity pour réaliser des sauvegardes incrémentales des données de mes postes de travail, rdiff-backup dont j’ai déjà parlé n’étant plus maintenu depuis un long moment (1).Je voulais en effet que la fréquence de la sauvegarde soit assez courte, de l’ordre de la demi-heure. Les sauvegardes incrémentales s’avèrent parfaitement adaptées à ce type d’utilisation, d’où le choix de ce programme.

Proposed Debian Logo

Installation

J’ai procédétrès simplement , en installant duplicity sur mes deux stations de travail, les deux sous Debian Wheezy :

# apt-get update && apt-get install duplicity

Configuration

Sur le serveur Qnap TS-219 PII également sous Debian Wheezy, j’ai créé des répertoires avec le chemin suivant :  /backups/{fixe,portable}

Au niveau des postes clients, j’utilise la crontab des utilisateurs concernés pour lancer duplicity. La commande suivante permet d’éditer la crontab de l’utilisateur courant (si un message vous indique que vous n’avez pas le droit d’utiliser la crontab, il faut ajouter l’utilisateur en question dans /etc/cron.allow) :

# crontab -e

Puis j’ajoute les lignes suivantes :

*/30 * * * * duplicity remove-older-than 1M –force ssh://root@mynas//backups/fixe >> /var/log/duplicity.log 2>&1 && duplicity –no-encryption /home/user ssh://root@mynas//backups/fixe >> /var/log/duplicity.log 2>&1

0 0 * * 1 duplicity full –no-encryption /home/user ssh://root@mynas//backups/fixe >> /var/log/duplicity.log 2>&1

La première commande de la première ligne lance la suppression des données qui sont plus vieilles qu’un mois. C’est une durée de rétention qui me paraît suffisamment longue, mon but n’étant pas de faire de l’archivage mais de la sauvegarde. C’est à voir en fonction de vos besoins et de votre capacité de stockage. La seconde commande de la première ligne permet la sauvegarde en elle-même;

La seconde ligne indique de procéder à une sauvegarde complète tous les lundis à 00:00 , et ce afin que la commande chargée du nettoyage des sauvegardes dont l’âge est supérieur à un mois s’exécute bien [merci à mes lecteurs pour ce rajout].

Veillez à ce que votre fichier /var/log/duplicity soit bien accessible par l’utilisateur qui lance la commande duplicity.

Gérer la rotation des journaux

Afin de faire propre il faut également configurer logrotate pour que votre fichier ne grossisse pas démesurément. Il faut créer le fichier /etc/logrotated.d/duplicity et y ajouter le contenu suivant :

/var/log/duplicity.log {
 rotate 7
 daily
 compress
 missingok
}
debian-logo

Je garde une semaine de journaux afin de pouvoir identifier la cause d’une éventuelle erreur empêchant les sauvegardes de s’effectuer.

Chiffrement

Il s’agit donc d’un mécanisme très simple de sauvegarde de vos données vers un ordinateur tierce, ici le Qnap TS-219 PII. Duplicity offre une très intéressante option, la possibilité de chiffrer vos données avec une clé GPG. À moins d’être un bot et d’effectuer vous-même vos sauvegardes, la partie automatisation de cette tâche vous intéressera.

Pour l’utiliser vous devez accorder une confiance suffisante à la clé GPG que vous utilisez pour chiffer et/ou signer. Si vous souhaitez signer votre sauvegarder vous devrez exporter à l’intérieur de votre script la variable PASSPHRASE contenant phrase de passe de votre clé GPG. Vous pouvez également utiliser l’agent GPG. Au niveau de la ligne de commande, il suffira de rajouter l’option –encrypt-key pour préciser la clé de chiffrement et/ou –sign-key pour la clé utilisée pour signer la sauvegarde.

Restauration des données

Comme il est toujours bon de vérifier la restauration des données dans la mise en place d’un système de sauvegarde, nous nous positionnons dans /tmp et passons la commande suivante pour restaurer le répertoire documents présents sur notre serveur :

$ duplicity –no-encryption –file-to-restore documents  ssh://root@mynas//backups/fixe /tmp/documents

Nous précisons de ne pas chercher à déchiffrer quoique ce soit avec l’option –no-encryption puisque nous n’avons pas chiffré pendant la sauvegarde. Nous utilisons l’option –file-to-restore afin de choisir quel répertoire ou fichier nous souhaitons restaurer, puis nous précisons la source de nos données et en dernier argument le répertoire où sauver les données. Plusieurs choses à noter :

  • l’option –no-encryption est nécessaire sinon il vous sera demandé une phrase de passe et la restauration échouera tant que vous ne rentrerez pas quelque chose.
  • plusieurs erreurs bizarres (exceptions PythonCollectionsError: No backup chains found)sont survenues quand je tatonnais pour trouver le bon chemin en définissant ma source. Mais une fois que j’ai identifié la bonne syntaxe, plus d’erreurs et le shell rend la main silencieusement en ayant accompli le travail
  • si vous précisez un répertoire ou un fichier de sortie qui existe déjà, la restauration échoue pour éviter d’écraser quoique ce soit.

En conclusion, je suis plutôt content de cette solution de sauvegarde. Le serveur de sauvegarde est discret et plutot silencieux (comme décrit dans l’article plus haut) et la solution de sauvegardes incrémentales est flexible et facilement configurable.

Et vous ? Utilisez-vous Duplicity ou un autre programme pour réaliser vos sauvegardes incrémentales ? N’hésite pas à laisser votre témoignages dans les commentaires.

(1) : quoique la liste de diffusion de rdiff-backup s’est  remise à bouger , à voir dans les prochains mois

23 thoughts on “Sauvegardes incrémentales avec Duplicity vers un Qnap TS-219 PII sous Debian Wheezy

  1. J’utilise Deja Dup sous Debian pour faire les sauvegardes de mes documents (images,…) sur un disque amovible, une fois les informations de sauvegarde enregistrées et la mise en oeuvre programmée il me suffit de brancher mon petit disque dur, si par mégarde il n’était pas en place un petit message me le signale.
    Solution pratique.
    Cordialement.

  2. Alors juste une remarque sur ton exemple ici. Si on applique simplement ton exemple en réalité on ne supprimera jamais les anciennes sauvegardes.
    Tout simplement car duplicity est un excellent outils de sauvegarde qui, comme tu le dit très bien, fait des sauvegardes incrémentales. Le problème de la sauvegarde incrémental c’est qu’il est nécessaire d’avoir la dernière sauvegarde total (dans ton exemple elle se fera la première fois ou l’on lance la sauvegarde) et l’ensemble des incrémentales faite avant la sauvegarde a restaurer. Or si on ne dit rien a duplicity, il faut des incrémentales. Donc en réalité, avec ton exemple, au bout d’un mois le programme ne supprimera rien car il aura besoin de toute les anciennes sauvegardes (la full et les incrémentales) pour faire une restauration. Pour éviter se problème, il faut faire des full de temps en temps et seulement là on pourra supprimer des anciennes sauvegardes au rythme des full.

    A bien noté la différence entre une sauvegarde incrémental (les sauvegardes s’appuie les une sur les autres) et les différentielles ( les sauvegardes s’appuie sur la dernière full). Or malheureusement, a ce jour, duplicity ne fait pas les différentielles. Et c’est bien le seul reproche qu’on puise lui faire. Peut-être dans une MAJ future….

    Duplicity est un très bon programme de sauvegarde, je tiens tout de même a préciser que en plus d’être très simple d’utilisation, il accepte un nombre hallucinant de type de stockage différent : ftp, scp, ssh, rsync, webdav, Ubuntu One, Cloud amazon, Google docs et même imap(s) et encore… Et c’est là que la fonction de chiffrement prend tout son sens car en fait, le principe est d’utiliser les différents stockages gratuits (ou a bas coût) que nous utilisons tous les jours, sans pour autant que nos données soit “exploitable” par le gracieux service.

    Enfin, pour finir, merci pour ton article qui explique très bien se formidable outils.

    • Nico : très bonne remarque merci 🙂 C’est en effet le nombre de backends impressionnant qui m’a poussé à m’intéresser à duplicity ainsi que le fait qu’il soit codé en Python. [l’article a été mis à jour]

  3. Ahem… Tu ne risques pas d’avoir un souci au bout de quelques mois ? Ne faire que des incrémentielles, ça implique de conserver au moins une complète et sur plus d’un mois. Du coup ton « remove-older-than 1M » risque de ne pas servir à grand chose…

    • Hylobates Agilis : en effet, Nico me l’a signalé plus haut. Je vais trouver une solution et merci pour ta vigilance 😉 [l’article a été mis à jour]

  4. Merci pour ton tuto,
    j’ai fais un script pour lancer Backintime et éteindre mes machines une fois la sauvegarde éffectuée vers mon mon nas sous openmediavault

      • hésite pas à mettre à jour mon tuto de l’époque… ça a du évoluer chez qnap.
        duplicity+qnap+gpg=>ftp tourne très bien chez moi depuis 2ans, avec des volumes de l’ordre de 30go et un rm * par an pour nettoyer le ftp.

        set it & forget !

  5. Salut,
    Pour simplifier tout ça et éviter l’utilisation de scripts maison, j’utilise avec bonheur l’utilitaire backupninja (empaqueté dans Debian), qui est une surcouche à duplicity (entre autres).

  6. Salut,

    Excellent article !

    J’ai la même remarque que Nico plus haut.
    Tu peux jeter un oeil à obnam qui fait du full incrémental, sans point de reprise, et avec le support du chiffrement.

    cordialement,
    Damien

  7. De mon côté j’hésite entre Obnam et Duplicity. Existe-t-il un comparatif entre ces deux outils? Je n’arrive pas à voir de différences falgrantes.

    • Michael : j’ai trouvé quelques commentaires qui comparent les deux et préfèrent Duplicity, maintenant je ne suis pas tombé sur d’article avec un comparatif clair.

  8. Bonjour,
    personnellement j’utilise encore rdiff-backup avec l’interface web rdff-web pour la restauration.

    Je ne sais pas si mon choix est encore pertinent si effectivement rdiff-backup n’est plus maintenu.

    • sechanbask : si j’étais vous je me préparerais à migrer vers une autre solution. Le programme tourne et fait bien son travail mais si vous rencontrez un jour un bug, à moins d’apporter vous même la solution il n’y aura que trop peu de monde pour vous aider.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *