Synchronisation / backups

, par MiKaël Navarro

Un problème se pose très vite lorsque l’on travail sur différents ordinateurs (au boulot, à la maison, sur un portable, un pda, ...), comment assurer la synchronisartion des données entre ces différents ordinateurs ? Et comment fiabiliser la sauvegarde de ces données (que se soit des fichiers images, vidéos, textes ou les favoris de notre navigateur internet) ?

Plusieurs méthodes semblent solutionner ce cas de figure :
 Synchro simple via Unison
 Rsync pour la sauvegarde réseau
 Sauvegardes différentielles
 Sync 2 CD/DVD

Synchronisation simple entre deux répertoires avec Unison

Unison est un utilitaire en ligne de commande mais une interface GTK+ lui a été ajouté.

Lors de sa première exécution un répertoire source (ou racine) sera demandé (cela constituera le profil par défaut) ; Ensuite un dossier cible est demandé pour procéder à la comparaison.

Unison nous présente alors la fenêtre d’état, résultat de la comparaison des deux répertoires et nous propose de répercuter les changements en faveur de l’un ou l’autre des répertoires (la racine étant toujours à gauche).
Dans tous les cas Unison essaie toujours de nous proposer une solution.

Synchro USB

Insérer une clef, attendre le montage du système de fichiers et spécifier à Unison le répertoire en question. On pourra alors synchroniser son contenu avec un répertoire de votre choix sur le disque dur.

Synchronisation Windows/Linux

Unison est en mesure de travailler à distance via une liaison sécurisée. Malheureusement le fonctionnement d’Unison pour Windows semble assez aléatoire. Nous devons donc passer par une solution de partage classique avec Samba.

Synchronisation par SSH

Il nous est aussi possible de synchroniser via SSH en désignant la machine distante par ssh:adresse_ip/chemin/repertoire en ligne de commande.

Utiliser Rsync pour la sauvegarde réseau

Unison est un synchroniseur de fichiers alors que Rsync est outil de réplication et de copie (mirroring) ; Destiné, en quelque sorte, à une synchronisation à sens unique.
Rsync pourra aussi conserver une trace des changements dans un répertoire de sauvegarde.

Rsync utilise, entre autres, un protocole réseau qui lui est propre (s’affranchissant de devoir partager quoi que ce soit). Une partie serveur en attente de connexions depuis d’autres machines et une partie cliente permettant d’accéder à des ressources d’autres machines.

Par exemple :
$ rsync -avz --stats -u rsync://192.168.10.59/photos/ ~/dphoto

Autre exemple :

$ rsync --delete --delete-excluded \
         -a -x -v --progress \
         --exclude-from=$exclude /home /backup

$exclude est un fichier contenant la liste des fichiers à ne pas synchroniser.

Rajouter l’option --rsh=ssh pour opérer à distance via ssh.

Pour un usage courant, on préfèrera utiliser Grsync une interface GTK+.

Sauvegarde avec Grsync

Grsync fonctionne de manière unidirectionnelle, il synchronise/copie les données d’une source vers une destination.

On peut de plus, sauvegarder les préférences et options suivantes :
 Conservation des dates des fichiers (-t, —times, la date n’est pas mise à la date du jour) ;
 Conservation du propriétaire et du groupe (-o, —owner, -g, —group) ;
 Conservation des permissions (-p, —perms) ;
 Les fichiers de la cible inexistants à la source sont supprimés (—delete) ;
 Mode bavard (-v, —verbose) ;
 Ignorer les fichiers existants (—ignore-existing, si des fichiers portent le même nom, ils sont écrasés) ;
 Afficher la progression du transfert (—progress) ;
 Afficher seulement la taille du transfert (—size-only) ;
 Et fonction simulation (-n dry-mode).

Pour la restauration, il y a une double flèche qui permet d’inverser le sens, ce qui permet de remettre les informations dans le répertoire d’origine en reprenant ces mêmes préférences.

Sauvegardes diférentielles

rdiff-backup

rdiff-backup est un logiciel de backup. Il permet faire une copie miroir d’un répertoire vers un autre potentiellment à travers le réseau et/ou via SSH (tout comme rsync ou une simple commande cp).
 En plus, il permet de faire des sauvegardes différentielles et conserve les anciennes versions des fichiers (ce qui vous permet de restaurer un fichier tel qu’il était à une date antérieure, ou de récupérer les fichiers effacés) ;
 Il n’enregistre / transmet que les parties modifiées des fichiers (il est donc très rapide et économe en espace disque et bande passante).

Ex. : $ rdiff-backup -v5 --print-statistics /home user@host::/backup

Le backup le plus récent est une copie-miroir du répertoire source.
Les backups des versions antérieures ne contiennent que les parties modifiées des fichiers par rapport au backup suivant (et doivent être gérées par les différentes commandes de rdiff-backup).

Duplicity

Duplicity est un programme similaire à rdiff-backup : il utilise l’algorithme rsync pour des raisons d’efficacité, mais au lieu de créer un simple mirroir il crée des archives (tar) cryptées / signées avec GnuPG.
Les fichiers peuvent aussi être uploadés sur un autre serveur en FTP, SCP, SSH, Amazon S3, etc.

Une fois l’installation terminée il faut créer un script contenant l’ensemble des commandes à effectuer (sur un serveur FTP par exemple) :

export FTP_PASSWORD=mdp_ftp
export PASSPHRASE=mdp
duplicity --full-if-older-than 1M --exclude /home/mickey/backups /home ftp://user@server/backups/home
duplicity remove-all-but-n-full 3 ftp://user@server/backups/home
unset PASSPHRASE
unset FTP_PASSWORD

L’option --full-if-older-than 1M indique à Duplicity qu’il devra faire un backup incrémental sauf si le dernier backup complet date de plus d’un mois, auquel cas il relancera un backup complet.
La commande suivante permet de ne garder que les 3 derniers backup complet.

Il ne reste plus qu’à programmer l’exécution de ce script à la fréquence que vous préférez (via anacron...).

Pour afficher la liste des fichiers sauvegardés :
$ duplicity list-current-files ftp://user@server/backups/home

Pour restaurer :
$ duplicity restore ftp://user@server/backups/home /home/mickey/restore et taper le mot de passe du fichier de sauvegarde.

Il existe un frontend qui simplifie l’utilisation de Duplicity en cron ou en ligne de commande : duply ;
Et même un GUI : Déjà Dup

Utilisation de curlftpfs / fuse

Pour faciliter la sauvegarde on pourra monter une partition d’un serveur distant via ftp avec curlftpfs et fuse :

# modprobe fuse
$ curlftpfs ftp://user:mdp@ftpperso.free.fr /mnt/ftpperso

Ou directement par
# mount -t fuse curlftpfs#user:mdp@ftpperso.free.fr /mnt/ftpperso

Ensuite, on pourra utiliser Duplicity directement dans file:///mnt/ftpperso

Pour libérer le point de montage : umount /mnt/ftpperso

Si toute cette procédure est à refaire souvent ajoutez dans /etc/fstab une entrée :
curlftpfs#user:mdp@ftpperso.free.fr /mnt/ftpperso/ fuse allow_other,rw,user,noauto 0 0

Sync 2 CD/DVD

Un dernier petit outil, que j’affectionne, dédié à la sauvegarde sur CD/DVD... sync2cd.

Sync2cd est un outil de sauvegarde incrémental. Il permet la sauvegarde d’une hiérarchie de dossiers sur de multiples supports CD-R. Les fichiers sont archivés de manière incrémentale, càd que seul les fichiers nouveaux ou modifiés sont stockés.

Exemples d’utilisation :

sync2cd -c -g file.sync2cd | \
 mkisofs -J -r -graft-points \
   -o file.iso -path-list -

sync2cd -p -v -a 2 file.sync2cd

sync2cd -r -v -n "sync2cd_mounter.sh /cdrom" \
 -d ~/dir file.sync2cd

P.-S.

On n’oubliera pas aussi les outils "bas-niveau"

 Le classique cp :
cp -a /source/dir/ /dest/dir

 Via FTP avec lftp :
lftp -e "open ftp.fr ; user user ;  mirror -n -R dir_loc dir_dist ; bye"

 Un simple copy by tar :

cd /source/dir
tar cvf - . | (cd /dest/dir; tar xvf Bp -)

Ou encore :
tar -C /source/dir -c . | tar -C /dest/dir -xvp

 Et dump/restore qui sont des commandes présentes sur les systèmes Unix permettant respectivement la sauvegarde et la restauration d’un système de fichiers.

Mais contrairement à une simple sauvegarde qui ne conserve pas forcément la structure, mais une copie logique des données (ex. fichier par fichier pour un disque dur), un dump conserve quant à lui la structure de la mémoire : c’est une copie aveugle de l’état d’une mémoire (ex. bit à bit pour un disque, ligne à ligne pour une base de données).