date: 19 Nov 2009 title: Home serveur : sauvegarde des maildirs tags: mail, planet-libre, backup, auto-hébergement xrefs: home-serveur-tri-du-courrier-avec-sieve.txt, home-serveur-installation-du-serveur-web.txt, home-serveur-configuration-du-serveur-imap-dovecot.txt, home-serveur-premiers-reglages.txt, home-serveur-proteger-son-serveur-configuration-du-pare-feu.txt, home-serveur-proteger-son-serveur-configuration-de-fail2ban.txt, home-serveur-recuperer-ses-mail-avec-fetchmail.txt, home-serveur-installation.txt, home-serveur-quelques-astuces-bien-utiles.txt, home-serveur-configuration-du-serveur-de-mail-postfix.txt, home-serveur-utilisation-de-cles-pour-ssh.txt, home-serveur-openssh.txt Maintenant que vous gérez votre serveur mail, c'est vous qui en êtes responsable. Autrement dit, si vous perdez vos mails vous ne pourrez vous en prendre qu'à vous. Personnellement je vois ça comme un avantage, mais vous le prenez comme vous voulez, toujours est-il qu'il vaut mieux penser à faire des sauvegardes régulières des maildirs. Bonne nouvelle pour vous, j'ai réalisé un script qui s'occupe de cette tâche. Il est en Perl et sous licence GNU GPL (ça va de soit ;) ). [C'est ici pour le télécharger](http://univers-libre.net/atelecharger/backup.pl.txt). Vu que je l'ai fait surtout pour répondre à mon cas à moi, il se peut qu'il ne vous convienne pas. Si vous le modifiez, n'hésitez pas à me dire ce que vous avez amélioré d'ailleurs. Vous pouvez aussi me proposer certaines idées à rajouter, j'essaierai de les ajouter dans la limite de mon temps libre. ## Une petite présentation rapide du script Voici, ce qu'il fait : * Il récupère la liste des utilisateurs ainsi que leur home depuis le fichier /etc/passwd. * Il arrête les services postfix et dovecot (pour éviter que l'un deux écrive dans la maildir alors qu'on est en train de la sauvegarder). * Pour chaque utilisateur, il fait appel à rsync (donc ne copie que ce qui a été ajouté ou modifié) pour sauvegarder sa maildir vers un dossier local. * Il redémarre postfix et dovecot une fois la copie terminée. * Si un périphérique externe est présent (clé/disque USB, montage NFS, ...) il fait de nouveau un rsync depuis les maildirs copiées localement vers le périphérique externe spécifié. * Éventuellement, démontage du périphérique si il était démonté avant l'exécution. Déjà, une petite explication sur le double rsync, qui peut paraître lourd. Effectivement, pourquoi ne pas sauvegarder directement la maildirs vers le périphérique externe ? Plusieurs raisons : * D'abord, comme Postfix est arrêté pendant la copie, il faut éviter qu'il le soit trop longtemps ; si vous n'avez pas de chance et qu'un serveur smtp essaye de contacter le votre pour lui envoyer un mail, personne ne répondra (bon normalement, il réessayera plus tard mais bon on sait jamais). Donc la manière la plus rapide de copier la maildir et encore de la copier sur le disque dur lui même. Ensuite on aura tout le temps pour la copier ailleurs. * Deuxièmement, la copie d'un endroit à l'autre du disque est ce qu'il y a de plus sûr. Imaginez que votre script s'exécute la nuit et que, pas de chance, la veille vous aviez retiré la clé USB pour vous en servir et ne l'aviez pas rebranché (la fatigue, toussa...). Ou alors que le serveur de fichier sur lequel vous copiez habituellement vos sauvegardes ne répond pas par exemple. À ce moment là, vous êtes bien content d'avoir quand même une copie sur le disque dur qui s'est faite. * Et puis imaginez que ce n'est pas le disque qui lâche, mais juste que vous avez fait une fausse manip ou un bug de dovecot ou votre client mail. Le fait d'avoir une copie en local accélérera beaucoup la récupération, que de devoir allez chercher le tout depuis un autre endroit. Ensuite, vous constaterez qu'au début du script, vous avez la possibilité de définir pas mal de truc : les répertoires de sauvegarde local et distant, le périphérique à utiliser, les options à passer à rsync (que ce soit pour la copie locale ou distante, ...). À noter quand même : je me suis aperçu que peu de systèmes de fichier n'apprécient le noms des fichiers des maildirs (du style 1257622696.P32064Q174M509794.heimdall:2,S), à commencer par le FAT. Donc pensez, si vous utilisez une clé USB à la passer en ext2 par exemple. Sinon, une autre solution peut être d'utiliser tar -u. Ainsi tar va archiver tous les fichiers en un seul (donc plus de problème avec les noms de fichier) et -u (pour --update) va mettre à jour l'archive avec les fichiers modifiés ou ajoutés (un peu comme rsync). ## Ajout du script à cron Pour pouvoir l'exécuter périodiquement, vous allez faire appel à cron. Placez le script dans /etc/cron.daily, /etc/cron.weekly, ... ou modifiez la crontab si aucun ne vous conviennent (au choix, c'est vous qui voyez). sudo mv backup.pl /etc/cron.daily/backup (Attention à bien enlever le .pl, sinon le cron n'exécutera pas le script) Rendez le bien sûr exécutable, et c'est terminé : sudo chmod +x /etc/cron.daily/backup.pl Vous recevrez alors un mail à chaque fois qu'il sera exécuté. Si ça vous embête, rajoutez MAILTO=/dev/null dans le fichier /etc/crontab. Voila, pour la prochaine fois, je pense qu'on attaquera le serveur web (j'hésite encore sur celui que je vais choisir, même si je penche sur Lighttpd). Mais on reviendra sur le serveur mail pour l'antispam et le webmail.