• Script de sauvegarde avec Rsync

    Ce tutoriel est l'un de mes 4 projets Linux que j'ai préparé pour mon oral de BTS.

    Jusqu'à maintenant j’effectuais mes sauvegardes de manière manuelle par l’intermédiaire d’un copier/coller sur des partages SAMBA.

    Télécharger « script_sauvegarde_rsync »

    L’inconvénient de ce type de sauvegarde est que cela m’obligeait à penser à effectuer des sauvegardes et à effectuer à chaque fois une sauvegarde complète qui prenait en compte les données récentes, anciennes, modifiées ou non et évidemment cela prenait beaucoup de temps.

    J'ai alors pensé que la mise en place d’une sauvegarde automatisée qui ne sauvegarderait que les données créés ou modifiés depuis la dernière sauvegarde serait une bonne solution.

    La mise en place d’un script bash de sauvegarde avec rsync qui serait lancé de manière automatisée via un planificateur de tâches me permettrait de résoudre ce problème.

     

    Script de sauvegarde avec Rsync

     

    Rsync (pour remote synchronisation ou synchronisation à distance) est un logiciel libre de synchronisation de fichiers en ligne de commande qui fonctionne de manière unidirectionnelle.


    Il copie les fichiers d’un endroit vers un autre en synchronisant en fonction de la source (il fait une comparaison simple des fichiers entre source et hôte et ne prend pas en compte les modifications sur l’hôte mais uniquement celle de la source).


    Lors de la première sauvegarde,rsync va effectuer une sauvegarde complète, ensuite il fonctionne par copie partielle des données appelée sauvegarde incrémentielle qui ne sauvegarde que ce qui a changé depuis la dernière sauvegarde (nouveautées ou modifications).


    Rsync permet de passer par le protocole SSH afin d'effectuer des sauvegardes par le réseau d'une machine à une autre de manière à sécuriser les données transmises.


    Enfin rsync fonctionne aussi bien sur Linux, Windows et Mac OS X.

    Fonctionnement du script

    Le script se lance tous les jours à 23h30 via une tâche cron.

     

    Script de sauvegarde avec Rsync

      (cliquer sur l'image pour l'agrandir) 

     

    Après chaque sauvegarde, j'ai demandé à mon script de générer un fichier de logs afin de conserver une trace de mes sauvegardes.

    On peut également voir les statistiques (nombre de fichiers transférés, taille totale…)

    ici, j'ai transféré 403 fichiers.

    A la fin du fichier de logs, j'obtiens le code de retour de la sauvegarde (case $status in avec les codes d'erreurs du script ), codes que j'ai trouvé ici : rsync exit codes

     

     

    Script de sauvegarde avec Rsync

      (cliquer sur l'image pour l'agrandir) 

     

    Lors de ma sauvegarde du lendemain, je vois que rsync a trouvé 10 fichiers nouveaux ou modifiés par rapport à la sauvegarde de la veille et qu’il n’a transféré que ceux-ci.

    La sauvegarde incrémentale a donc bien fonctionné.    

     

    Script de sauvegarde avec Rsync

      (cliquer sur l'image pour l'agrandir) 

     

    Si le code de retour de la sauvegarde n'est pas égal à 0 (succès), vous aurez le message d'erreur correspondant au code de retour. 

     

    Script de sauvegarde avec Rsync

      (cliquer sur l'image pour l'agrandir) 

     

    Conclusion :

    Grâce à ce script automatisé, je n'ai plus à effectuer mes sauvegardes manuellement et je n'ai plus à effectuer de sauvegardes complètes à chaque fois.

    N'hésitez pas à adapter le script selon vos besoins...

    « Les épreuves du BTS approchent...Mises à jour avec script Bash et Zenity »

    Tags Tags : , , , ,
  • Commentaires

    1
    rafael
    Vendredi 29 Août 2014 à 15:32

    Je suis tombé sur votre blog lorsque je cherchais un script de sauvegarde via rsync...j'avais testé plusieurs scripts, mais le fait que vous ayez intégré les codes de retour de rsync au votre m'a paru être une très bonne chose, si bien que je l'ai installé sur 2 PC à la maison....


    Félicitations pour tous vos articles que je continuerai à suivre bien évidemment.


    j'espère que vous trouverez une entreprise pour votre licence, car vouloir aller aussi loin dans une reconversion professionnelle demande une réelle motivation....


    Cordialement


                                                                                              


     


     

    2
    Vendredi 29 Août 2014 à 22:01

    Bonsoir rafael...

    Avant d'écrire mon script, j'avais également testé plusieurs scripts et aucun ne proposait de codes de retour,ce qui ne me donnait aucune certitude sur mes sauvegardes et c'est pour cela que je les ai intégré à mon script...

    Quand à ma motivation, je peux la résumer à ce proverbe chinois :

    " La volonté permet de grimper sur les cimes; sans volonté on reste au pied de la montagne "

    Cordialement

    3
    thomassachy
    Mardi 24 Janvier à 10:55

    bonjour, j'ai repris votre script mais quand je le lance il ne reconnait pas la fonction case, pourriez vous maider ?

     

    voici le message derreur que j'ai :

     

    C:\Cygwin>C:\Cygwin\bin\bash.exe --login -i '/cygdrive/c/Cygwin/sauvegarde.sh'

    bash: status : commande introuvable

    bash: /cygdrive/c/Cygwin/sauvegarde.sh: ligne 24: erreur de syntaxe près du symbole inattendu « $'in\r' »

    'ash: /cygdrive/c/Cygwin/sauvegarde.sh: ligne 24: `case $status in

     

    4
    Mardi 24 Janvier à 12:09

    Bonjour

    Sous quel système d'exploitation exécutez vous le script?

    5
    Mercredi 26 Juillet à 08:46
    Hunterbaba

    Bonjour,

    Je suis tomber sur votre page web car je chercher un script mais malheureusement il n'est plus téléchargeable et pour t'en il a l'air fort intéressant .

    6
    Mercredi 26 Juillet à 10:29

    Quel script cherches tu Hunterbaba ?

     
      • Mercredi 26 Juillet à 14:11

        Le lien pour voir ton script ne fonctionner pas ce matin mais la j'y est accès Merci

    7
    filerem
    Mardi 26 Septembre à 16:30

    Bonjour, j'avais des problème avec le script lors de l'authentification en ssh, je pense du à l'évolution de ssh. du coup je post la modifs que j'ai effectué. le mot de passe est en clair, mais de toute façon, les autre méthodes d'identifications par clé ne me plaisaient pas.  je préfère sécuriser le poste serveur.

    voilà les modifs:

    rajouter des variables :

    hostssh="exemple.com"
    userssh="utilisateur"
    password="mot de passe"

    puis la commande de sauvegarde :

    rsync -az --stats --del --rsh="sshpass -p $password ssh -l $userssh" $local $hostssh:$distant >> $log/sauvegarde_$jour.log

    8
    Mardi 26 Septembre à 18:00

    Filerem,

    En quoi l’authentification par clé te dérange t'il ?

    Sinon, pour éviter d'avoir ton mot de passe dans le script, tu peux utiliser la fonction 'export sshpass' comme indiqué dans le man sshpass

    9
    Filerem
    Jeudi 28 Septembre à 08:39
    Et bien je trouve la procédure de certification et de stockage de mot de passe inutilement compliqué, et dans mon cas, à chaque fois que je stockais le mot de passe, il était oublié à la fin de session.
    Impossible de le garder en permanence, même après redémarrage du serveur.
    Donc je suis passé autrement.
    Pour exportssh, je vais voir ça, je ne l'avais pas vu
    10
    Jeudi 28 Septembre à 18:34

    @Filerem

    Pour les mots de passe de mes clés SSH, je passe par ssh-agent ou bien en graphique avec seahorse sur Ubuntu.

    11
    filerem
    Jeudi 28 Septembre à 18:55

    c'est bien ça qui me rend dingue, ssh-agent tout le monde l'utilise, mais moi dès que je quitte ma session ou que je reboot, je suis obligé de recommencer à zero le stockage des clé. je n'ai pas accès en direct au client qui se connecte en ssh au serveur, je fait ça par une session ssh , et c'est quand je quitte cette session que ssh-agent oublie mes clés... je suppose donc que ssh-agent focntionne par session, et qu'il faut être en direct sur le client et pas en ssh...

    donc j'ai cherché autrement.

    pour ce qui est de ssh export, de ce que je lit il stocke la variable mot de passe dans un fichier, ou en variable, mais en clair de tout façon. apparement la seul utilité est que comme ça on ne le vois pas dans l'historique du shell.

    mais est ce qu'on peut avoir un historique d'une d'un script sh?

    De tout manière, vu que je ne sait pas, je vais la passer en variable.

    donc le code change un peu :

    hostssh="exemple.com"
    userssh="utilisateur"
    export SSHPASS="mot de passe"

    puis la commande de sauvegarde :

    rsync -az --stats --del --rsh="sshpass -e  ssh -l $userssh" $local $hostssh:$distant >> $log/sauvegarde_$jour.log

    je viens de tester tout marche nickel. Et encore merci pour ton boulot, j'ai d'ailleurs choisit ton script pour le boulot que tu as fait sur le status des erreurs sur rsync. excellent! 

    12
    Vendredi 29 Septembre à 17:15

    filerem

    En fait, j'avais testé pas mal de scripts trouvés ici et là, et aucun n'indiquait le code de retour de la sauvegarde alors que c'est pour moi une chose fondamentale de savoir si mes données sont bien sauvegardées...

    Kenavo !

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :