Sur mon ordinateur personnel, chaque nuit, mon /home est sauvegardé par synchronisation (mirrordir, un peu comme rsync) sur un second disque. Le problème, c'est que si un problème dans mon /home survient et que je ne réagit pas avant la synchronisation sur mon disque dur de backup, alors c'est foutu, mes fichiers sont définitivement perdus :-/

Ce qu'il faudrait c'est avoir une liste de sauvegardes étant des images récentes des fichiers sauvegardés, toutes les 12 heures par exemple et garder les 20 dernières sauvegardes. Lorsque la totalité des fichiers sauvegardés représente un volume faible, pas de problème, mais lorsque l'on parle du répertoire personnel d'un utilisateur, ça peut monter très haut (mon répertoire personnel occupe bien 10 GB, avec beaucoup de photos évidemment). Faire des sauvegardes complètes n'est pas viable, ni très malin. Il n'est nécessaire que de sauvegarder les différences par rapport à la dernière sauvegarde. C'est ce qu'on nomme les sauvegardes incrémentales.

La méthode classique pour les sauvegardes incrémentales est de créer une sauvegarde complète (chaque dimanche par exemple) puis de sauvegarder les incréments chaque jour (en cherchant les fichiers modifiés dans la journée). Les outils mis en oeuvre sont les ancestraux tar et find qui ont fait leurs preuves. C'est cette méthode que je m'appretais à mettre en place, lorsque j'ai découvert les sauvegardes incrémentales instantannées avec rsync, grâce au livre Administration Linux à 200%.

Le livre traduit le résumé de la méthode décrite par Mike Rubel : Easy Automated Snapshot-Style Backups with Linux and Rsync. Sans retraduire la page, au final, on obtient un système de sauvegarde ne nécessitant qu'une sauvegarde complète (pour initialiser) et qui est bien plus souple (car rsync est plus souple que find). Si les sauvegardes incrémentales vous intéressent, la lecture de cette page me semble indispensable.

Voilà, maintenant sur chacun de mes ordinateurs, des sauvegardes incrémentales avec rsync sont réalisées toutes les 12 heures et à chaque redémarrage. Les 50 dernières sauvegardes sont conservés. Merci Mike :-)

Edit du 9 juin 2005

Voilà maintenant près de 3 semaines que le système est en place sur mon ordinateur et je constate une forte consommation mémoire lors de la sauvegarde et donc un ralentissement lorsque je réutilise mon PC après la sauvegarde. L'explication tient au fait que j'ai énormément de fichiers dans mon répertoire personnel (200,000 environ) et que parallèlement, j'ai paramétré le système pour conserver les 50 derniers snapshots.

Donc si mes calculs sont bons, cela donne 10,000,000 (10 millions) de hardlinks dans /.backup. Cela fait d'autant plus de contenu à scanner quotidiennement pour mettre à jour la base de données de locate (un programme qui cherche les occurences d'un nom de fichier en cache plutôt que de parcourir l'arborescence de fichiers à chaque appel). Bref, il y a un find qui met plusieurs minutes à s'exécuter tous les jours, avec la consommation mémoire que cela implique :-/

Solutions envisagées : avoir moins de fichiers (c'est n'importe quoi 200,000 fichiers), ne pas conserver les 50 derniers snapshots, utiliser une autre méthode de sauvegarde (voir un des prochains billets).