• [^] # Re: Rsync local et distant

    Posté par (site web personnel) . En réponse au journal Et vous, quelle sécurité pour vos sauvegardes?. Évalué à 10.

    J'utilise pour ma part une sauvegarde incrémentielle avec rsync via ssh, mais qui me permet de restaurer très facilement les données en utilisant les hard links côté sauvegarde.

    Ce sont juste 3 commandes, très largement inspiré par http://blog.interlinked.org/tutorials/rsync_time_machine.html :

    #!/bin/sh
    date=`date "+%Y-%m-%dT%H-%M-%S"`
    # / at the end is mandatory !
    SOURCE_DIR=/media/documents/perso/
    TARGET_HOST=backup-server.mondomaine.tld
    TARGET_USER=chtitux
    TARGET_DIR=/var/backups/calvin/perso
    # -6 is for IPv6 ONLY
    # $SOURCE_DIR/rsync-exclude has to exist
    # RTFM rsync too ;)
    rsync -6 --archive --one-file-system --hard-links \
     --human-readable --inplace --numeric-ids --delete \
     --partial --progress \
     --compress \
     --delete-excluded \
     --exclude-from=$SOURCE_DIR/rsync-exclude \
     --link-dest=$TARGET_DIR/current \
     $SOURCE_DIR $TARGET_USER@$TARGET_HOST:$TARGET_DIR/incomplete_back-$date 
     
    ssh $TARGET_USER@$TARGET_HOST "mv $TARGET_DIR/incomplete_back-$date $TARGET_DIR/back-$date \
     && rm -f $TARGET_DIR/current \
     && ln -s back-$date $TARGET_DIR/current"
    
    • À la première synchronisation, tout est envoyé dans un dossier distant qui finira par s'appeler /var/backups/calvin/perso/back-2011年04月30日T15-58-21 , et un lien symbolique fait pointer /var/backups/calvin/perso/current vers ce dossier
    • Les fois suivantes, ça compare ma copie locale à /var/backups/calvin/perso/current , et ça transfert le différentiel vers /var/backups/calvin/perso/incomplete_back-2011年04月30日T15-58-21
    • rsync utilise les hard links pour représenter les fichiers qui n'ont pas changés : à la fin du transfert avec rsync, mon répertoire distant incomplete_back-2011年04月30日T15-58-21/ contient donc les nouveaux fichiers et les fichiers qui n'ont pas changé, sans que ça prenne de la place supplémentaire (modulo l'espace disque occupé par un lien)
    • à la fin du transfert via rsync, ssh renomme incomplete_back-2011年04月30日T15-58-21/ en back-2011年04月30日T15-58-21/ , et recrée le lien symbolique current vers ce dernier
    • finalement, mon dossier current/ contient donc l'ensemble de ma dernière sauvegarde, donc rsync compare toujours au dernier état. Si je veux restaurer, il faut juste que je copie current/* , je n'ai rien à assembler moi-même. De plus, si j'interromps une sauvegarde, je vais avoir un répertoire incomplete_back-2011年04月30日T15-58-21/ qui traîne dans le répertoire des backups, mais ça n'impactera pas la prochaine sauvegarde (qui se fera depuis la dernière complète)
    • J'ai donc :
      • un transfert de ce qui change uniquement
      • une copie distante facilement restaurable
      • un transfert sécurisé via ssh (et clé publique)
      • une tolérance face aux coupures pendant la sauvegarde
      • l'obligation d'avoir un système de fichier qui prend en charge les hard links (ext?, ça marche, je n'ai pas testé avec NTFS)

    Si vous voyez des améliorations à faire, je suis preneur également !