Informatique et liberté

10 mai 2009

Une sauvegarde améliorée avec rsync

Classé dans : Planet Libre — Mots-clefs :, , , , — Phil @ 0 h 31 min

J’utilise depuis maintenant un moment un script de mon cru pour sauvegarder de façon synchronisée mes documents vers un stockage externe (en l’occurrence, un disque dur USB). Cette méthode n’est qu’une version améliorée d’une simple commande rsync dont je ne vous détaillerez pas les options tant elles sont classiques. Cependant, le script est intéressant en cela qu’il crée un fichier log et qu’il vérifie la présence du support de destination avant de s’exécuter.

Pour ce faire, la date de la sauvegarde est récupérée depuis la commande date avant d’être consolidée dans le nom du fichier log qui sera alimenté durant le backup des données. Chacun saura modifier à sa façon ce modeste script que je libère :)

Notez les emplois de la commande tee pour dupliquer le flux dans le fichier log et à l’écran (sur la sortie standard). Bien-sûr, cette méthode est celle que j’ai choisie mais l’utilisation de zenity (par exemple) amènera à procéder autrement comme en affichant une barre une progression durant la sauvegarde puis une fenêtre d’affichage de fichier pour montrer le log à la fin de l’opération.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
 
# Initialisations
date_sauvegarde=$(date +%Y-%m-%d_%H-%M-%S)
fichier_log="/media/Stockage/backup/log_backup_$date_sauvegarde"
repertoire_destination="/media/Stockage/backup/laptop-ph/"
 
# Détecter la présence du volume de destination et interrompre l'opération si nécessaire
if [ ! -e "$repertoire_destination" ]; then
    echo "Le script de sauvegarde n'a pas trouvé le répertoire de destination $repertoire_destination"
    exit
fi
 
# Demander la confirmation de l'utilisateur
echo "L'opération de sauvegarde peut être très longue. Voulez-vous continuer ? (o/n)"
read confirmation
if [ "${confirmation}" == 'o' ]; then
    echo "Début de sauvegarde le $(date +%d/%m/%Y) à $(date +%H:%M:%S)" | tee $fichier_log
    echo "" | tee -a $fichier_log
    echo "rsync --recursive --times --perms --owner --group --devices --specials --verbose --progress --delete --links --compress --stats /home/philou/ $repertoire_destination | tee -a $fichier_log" | tee -a $fichier_log
    echo "" | tee -a $fichier_log
    rsync --recursive --times --perms --owner --group --devices --specials --verbose --progress --delete --links --compress --stats /home/philou/ "$repertoire_destination" | tee -a "$fichier_log"
    echo "" | tee -a $fichier_log
    echo "Fin de sauvegarde le $(date +%d/%m/%Y) à $(date +%H:%M:%S)" | tee -a $fichier_log
else
    exit
fi

À la fin de l’exécution du script, vous obtiendrez les statistiques de la synchronisation avec rsync si, comme moi, vous avez laissé l’option –stats.

À la fin de la sauvegarde synchronisée, rsync affiche un récapitulatif si l'option --stats a été saisie

À la fin de la sauvegarde synchronisée, rsync affiche un récapitulatif si l'option --stats a été saisie

Et, comme il se doit, je vous renvoie vers le manuel de rsync pour toute question supplémentaire. Ceci dit, n’hésitez pas à réagir dans les commentaires pour toute question ou si vous avez des suggestions quant à ce script.

Partagez cet article

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Identi.ca
  • LinkedIn
  • MySpace
  • Netvibes
  • Reddit
  • Technorati
  • Twitter
  • Wikio FR
  • email

Ces articles pourraient vous intéresser...

9 commentaires »

  1. Bonjour,
    Pour le if [ ! -e "$repertoire_destination" ]; then
    as-tu une doc ou un livre à me suggérer ? (en français)
    Merci

    Commentaire par Do-IT — 10 mai 2009 @ 9 h 09 min

  2. Bonjour Do-IT, il n’y a pas grand chose à savoir sur le « -e » à l’exception du fait qu’il est chargé de quitter le terminal lorsqu’une commande retourne un code d’erreur.

    Fais l’expérience dans un terminal :
    $ set -e
    $ cd /home/do-it/repertoire_inexistant

    Évidemment, pour ce qui est d’un script, inutile d’employer « set » pour se servir de -e, il faut simplement le suffixer d’un point de montage (par exemple) pour entrer ou non dans le « if » selon les cas… Il s’agit en fait d’un simple test d’existence.

    Commentaire par Phil — 10 mai 2009 @ 9 h 21 min

  3. Salut,

    tu peux voir ceci :
    http://wiki.mandriva.com/fr/Sauvegarder_avec_rsync#Solution_de_sauvegarde_sur_disque_local
    où j’ai sécurisé le script en créant un lockfile afin qu’il n’y ai pas de double lancement.

    De plus j’utilisais tmpwatch afin de supprimer les anciennes archives afin de conserver des backups pas trop lourdes. Enfin, la différence, c’est que moi, c’est lancé par cron.

    En tout cas, je note l’atuce de la commande tee :)

    Merci pour ton partage.

    Commentaire par Spip — 10 mai 2009 @ 9 h 52 min

  4. ah, et un truc que tu peux améliorer en ergonomicité :

    ajouter un choix prédéfini, comme ça tu tapes directement sur enter.

    confirmation=’o’
    echo « L’opération de sauvegarde peut être très longue. Voulez-vous continuer ? (O/n) »
    read confirmation
    if [ "${confirmation}" == 'o' ]; then

    Peut-etre verifier aussi : O, y et Y comme cas positifs

    Commentaire par Spip — 10 mai 2009 @ 9 h 56 min

  5. @Do-IT
    Ma référence en matière de bash : http://abs.traduc.org/

    Commentaire par Layer973 — 10 mai 2009 @ 13 h 23 min

  6. @ Spip >

    Autant dire que ton script est plus avancé que le mien ! Il y a, je pense, beaucoup de choses à y retenir alors je vais remettre le mien à l’étude en reprenant certaines de tes idées ! Je ferai un retour sur expérience dès que j’aurais eu un peu de temps pour y travailler.

    Ceci dit, je me demande pourquoi tu mets ton script dans le cron ? Tu ne trouves pas un peu dangereux d’automatiser l’opération ? Et si tu perds un fichier et que tu t’en aperçois un peu trop tard ? Que la sauvegarde a déjà été effectuée… Pourquoi ne pas mettre dans le cron un rappel pour la sauvegarde plutôt ? ( »Voulez-vous lancer l’opération de sauvegarde maintenant ? »). Enfin après, ça dépend des usages mais je suis curieux de savoir !

    Ah, dernière chose : j’avais déjà pensé à améliorer l’interaction avec l’utilisateur par une valeur par défaut pour les questions. Maintenant que tu mets le sujet sur le tapis, je n’avais plus d’excuses alors c’est déjà modifié ;) Comme je le disais, je posterai à nouveau mon script.

    @ Layer973 > Ultime ton lien, direction mes favoris =)

    Commentaire par Phil — 10 mai 2009 @ 15 h 25 min

  7. Phil,

    Non, ce n’est pas dangereux, car j’ai deux types de sauvegardes :

    uen copie conforme de mon répertoire à sauvegarder. Bon, ça ok, si je sauvegarde à un mauvais moment, c’est rapé. Mais, j’ai aussi tous les changements qui sont sauvegardés (les différences) Dès qu’un fichier est soit modifié, soit supprimé, il passe dans cette sauvegarde.

    > la copie conforme : pratique quand on s’apercoit tout de suite de la connerie.
    > les incréments permettent de remonter sur une connerie que l’on a pas vue tout de suite.

    Avantage : on economise de l’espace disque à sauvegarder des différences plutot qu’uniquement des copies conformes (avec donc pleins de doublons)

    Pourquoi cron ?
    parce que (loi de Murphy), on a besoin d’une sauvegarde justement quand on a oublié de la faire. Si c’est automatique, plus besoin d’y penser. Si tu as un autre utilisateur, il n’est peut etre pas fada d’informatique, et lui faire faire sauvegarder ses documents, ca marchera pas. là l’admin du pc règle le truc, et basta. En cas de pepin, il sera qui trouver :)
    De plus, les taches répétitives et manuelles, c’est pas mon truc :P

    Commentaire par Spip — 10 mai 2009 @ 17 h 06 min

  8. Vu sous cet angle, ça se tient :)

    Commentaire par Phil — 10 mai 2009 @ 17 h 12 min

  9. [...] environnement Linux : rsync et hal. Cet article nous présente une base pour faire notre sauvegarde Une sauvegarde améliorée avec rsync. Nous allons juste devoir le modifier un petit peu pour répondre à un problème qui arrive [...]

    Ping par Chimrod » Archive du blog » Un système de backup automatique — 18 octobre 2009 @ 21 h 28 min

Flux RSS des commentaires de cet article. Adresse web de rétrolien

Laisser un commentaire

  • Flux RSS
  • Pages
  • Catégories
  • Archives
  • Étiquettes
  • Propulsé par WordPress