Retourner aux forums || Retourner au forum Linux.debutant

Linux.debutant : Rsync : restaurer une sauvegarde

Posté par François Nautré () le 26 février 2008
0
Bonjour,

j'ai mis en place un serveur rsync sur l'une des machines de mon réseau, grâce à laquelle je veux sauvegarder l'intégralité d'une autre machine (un PC portable).

Pour ça, pas de souci, une section dans /etc/rsyncd.conf sur le serveur :

[portable]
path = /srv/backups/portable
read only = false
log file = /srv/backups/logs/portable.log


Sur le portable un script contenant :

rsync -az --stats --delete --force --ignore-errors --exclude-from=/etc/rsync.exclude /* 192.168.X.X::portable/

Pas de problème, pour la sauvegarde, ça fonctionne.

Maintenant, que dois-je faire pour restaurer partiellement ou intégralement ma sauvegarde ?
J'ai beau lire des exemples sur le net, j'ai du mal à comprendre...

Merci d'avance !

> Lire le message (14 commentaires, moyenne: 1,7).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Copie

Posté par Émilien Tlapale (page perso, ) le 26/02/2008 à 18:09. (lien). Évalué à 3.

Copie juste le contenu de 192.168.X.X:/srv/backups/portable sur ton portable avec rsync ou scp ?

  • [^]Re: Copie

    Posté par NeoX () le 26/02/2008 à 18:25. (lien). Évalué à 3.

    ben un rsync dans l'autre sens...

    il me semble que la syntaxe est

    rsync [options] SOURCE DESTINATION

    donc en inversant source et destination de ta commande precedente, tu va faire une copie depuis le serveur vers le portable => une restauration.

    --
    Apprendre par les autres, c'est bien.
    Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
    • [^]Re: Copie

      Posté par François Nautré () le 26/02/2008 à 20:46. (lien). Évalué à 2.

      Exact. J'ai fait :

      rsync -az --stats --delete --force --ignore-errors --exclude-from=/etc/rsync.exclude /* 192.168.X.X::portable/

      Les fichiers sont bien restaurés, MAIS les propriétaires ne sont pas restaurés.
      Tous les fichiers appartiennent désormais à nobody:nogroup (!!)

      En revanche, les permissions (r,w,x) sont convenablement restaurées.

      Dans la doc (man rsync), il est précisé que l'option -a inclut l'option -o

      -a, --archive archive mode; same as -rlptgoD

      L'option -o permettant justement de conserver les propriétaires :

      -o, --owner preserve owner (super-user only)

      Je lance pourtant rsync (côté serveur comme client) en tant que root.

      Comment résoudre ce problème ?

      • [^]Re: Copie

        Posté par François Nautré () le 26/02/2008 à 20:51. (lien). Évalué à 1.

        Pardon, dans mon post précédent, la ligne de commande que j'ai exécutée n'est pas celle indiquée, mais plutôt :

        rsync -az --stats --delete --force --ignore-errors --exclude-from=/etc/rsync.exclude 192.168.X.X::test/* /home/santos/rsync/test

        (inversion SOURCE <-> DESTINATION, et utilisation d'un répertoire de test, heureusement, au lieu de /)

      • [^]Re: Copie

        Posté par Ellendhel () le 26/02/2008 à 22:08. (lien). Évalué à 3.

        Les fichiers sont bien restaurés, MAIS les propriétaires ne sont pas restaurés.

        Comment résoudre ce problème ?

        De manière pérenne, je ne sais pas (une directive dans rsync.conf ?) mais pour l'occasion cela peut se faire avec une seule commande, lancée par root :

        chown -R utilisateur.groupe *

        L'option -R permet de faire un traitement récursif (répertoire et sous-répertoires) et il ne reste qu'à indiquer l'identifiant de l'utilisateur concerné et son groupe, séparés par un point.

        Je lance pourtant rsync (côté serveur comme client) en tant que root.

        Ton utilisateur et groupe existent bien sur chaque machine avec les mêmes UID et GID ? C'est peut-être cela qui sème le souk...

        • [^]Re: Copie

          Posté par François Nautré () le 26/02/2008 à 22:23. (lien). Évalué à 2.

          chown -R utilisateur.groupe *

          Bien entendu, redoutablement efficace, mais pas du tout pérenne :)

          Ton utilisateur et groupe existent bien sur chaque machine avec les mêmes UID et GID ? C'est peut-être cela qui sème le souk...

          Certains utilisateurs ou groupes existent sur les deux machines, d'autres non.
          Dans mon répertoire de test, j'ai mis des fichiers appartenant à santos (existe sur les deux machines), root (idem), et tony (n'existe que sur le client).
          Dans tous les cas, les fichiers restaurés appartiennent à nobody:nogroup.

          Mais moi je veux absolument pouvoir sauvegarder et restaurer mes fichiers avec une gestion impeccable des droits, et sans nécessiter la présence des mêmes utilisateurs et groupes sur le serveur que sur le client !

          • [^]Re: Copie

            Posté par Steve Azriel () le 26/02/2008 à 23:48. (lien). Évalué à 2.

            Bonsoir,

            A priori, tu utilises rsyncd sans passer par un remote shell (type ssh) ou si tu préfères en direct tel n'importe quel autre service.
            Le serveur rsyncd tourne sous l'identité que tu fixes dans le fichier /etc/rsyncd.conf via les paramètres uid et gid ou par défaut sous l'identité: nobody:nogroup (ou équivalent sur ton OS).

            Peux-tu vérifier que, sur le serveur (192.168.X.X), les fichiers sont bien présents dans l'aborescence du module "portable" avec les bons droits d'accès mais avec pour identité nobody:nogroup ?
            La restauration en mode preserve se base sur le référentiel du serveur qui est alors nobody:nogroup
            => cela correspond bien à ce que tu obtiens à l'arrivé sur ton portable.

            Une piste pourrait être de passer le serveur rsyncd sous l'identité root:root (ou root:wheel) accompagné d'une authentification proposée par rsync comme décrit par exemple, dans [http://web.mac.com/millerdc/iWeb/DMC/HOWTO/395271A7-2C08-4DC(...)]

            Une autre piste serait d'abandonner le service rsyncd pour utiliser rsync+ssh (ou toute autre combinaison du type rsync+remote shell) avec pour contrainte d'avoir les mêmes utilisateurs de part et d'autre (client / serveur) ou une convention (monlogin sur le portable <-> loginbackup sur le serveur rsync). Un système de clés partagés (cas de ssh) pourra te faciliter l'automatisation.

            Bon courage !

            Cdlt,

            PS: Pourquoi ne pas utiliser un outil déjà prêt à l'emploi type:
            ¤ BackupPPC [http://backuppc.sf.net/]
            [http://bruno.vernay.free.fr/HowTo/backuppc/index.html]
            ¤ RSnapShot [http://www.rsnapshot.org/]
            ? (donnés à titre d'exemple, liste non exhaustive ^__^)
            A peine plus long à installer et à configurer, mais avec un UI pour BackupPPC :-)

            • [^]Re: Copie

              Posté par François Nautré () le 27/02/2008 à 00:04. (lien). Évalué à 1.

              Salut Steve,

              Ok avec ton explication, côté serveur mes fichiers sont bien stockés avec les bons droits d'accès, mais en tant que nobody:nogroup (je l'avais déjà constaté). C'est effectivement bien ce que j'obtiens sur mon portable après backup.
              Mais j'espérais que rsync stockait les droits des fichiers quelque part, et les rappliquait lors d'une restauration. Décevant.

              Je vais essayer BackupPPC, je ne connaissais pas.
              Ce que j'aimais bien avec rsync, c'est que c'était simple, et qu'on pouvait naviguer de manière totalement transparente dans les fichiers sauvegardés (via ssh par exemple, si la destination est sur une machine distante).

              Merci pour ces infos !

              • [^]Re: Copie

                Posté par NeoX () le 27/02/2008 à 12:05. (lien). Évalué à 2.

                et en mettant l'option "-o" pendant la sauvegarde ?

                puis pendant la restauration ?

                --
                Apprendre par les autres, c'est bien.
                Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
                • [^]option -o ne marche pas

                  Posté par François Nautré () le 27/02/2008 à 23:54. (lien). Évalué à 1.

                  et en mettant l'option "-o" pendant la sauvegarde ?

                  puis pendant la restauration ?


                  Ne marche pas chez moi (je lance pourtant bien la sauvegarde en tant que root).
                  Les fichiers sont stockés en tant que nobody:nogroup tant sur le serveur que sur le client lors de la restauration.

            • [^]Solutions alternatives

              Posté par François Nautré () le 28/02/2008 à 00:04. (lien). Évalué à 1.

              J'ai testé les solutions alternatives que tu m'as proposé, mais je n'ai pas aimé (pour résumer en une ligne^^).

              J'ai pondu un petit script (ci-après) pour sauvegarder les propriétaires et les groupes des fichiers, et les restaurer facilement (après une sauvegarde/restauration avec rsync).

              La ligne principale du script :

              ls -ldQ `du -a $RACINE | cut -f2` | awk -F' ' '{print "chown "$3":"$4,$8}' | grep -e '^[a-z]' >> $DROITS

              Le script fabrique un autre script, droits.sh (une série d'instructions chown), qu'il n'y a plus qu'à exécuter pour restaurer les propriétaires et groupes des fichiers.


              #!/bin/bash

              # création d'un script de restauration automatique des propriétaires et groupes sur une arborescence

              # répertoire racine de l'arborescence à sauvegarder
              RACINE=/home/santos/rsync/test/root
              # emplacement du script à créer
              DROITS=/home/santos/rsync/test/droits.sh
              # date de création du script
              DATE=`date`

              # vérification de l'utilisateur qui exécute le programme
              if [ `whoami` != 'root' ]
              then
              echo 'Vous devez être root pour exécuter ce programme.'
              exit 1
              fi

              # vérification de l'existence de la racine
              test -d $RACINE
              if [ $? != 0 ]
              then
              echo $RACINE' : répertoire introuvable.'
              exit 1
              fi

              # initialisation du script
              cat /dev/null > $DROITS
              echo "#!/bin/bash" >> $DROITS
              echo "#" >> $DROITS
              echo "# Créé le : $DATE" >> $DROITS
              echo "#" >> $DROITS
              echo "# Racine : $RACINE" >> $DROITS
              echo "#" >> $DROITS
              echo "" >> $DROITS
              echo "##### Vérifications préliminaires #####" >> $DROITS
              echo "" >> $DROITS
              echo "# vérification de l'utilisateur qui exécute le programme" >> $DROITS
              echo 'if [ `whoami` != "root" ]' >> $DROITS
              echo "then" >> $DROITS
              echo " echo 'Vous devez être root pour exécuter ce programme.'" >> $DROITS
              echo " exit 1" >> $DROITS
              echo "fi" >> $DROITS
              echo "" >> $DROITS
              echo "# vérification de l'existence de la racine" >> $DROITS
              echo 'test -d '$RACINE >> $DROITS
              echo 'if [ $? != 0 ]' >> $DROITS
              echo "then" >> $DROITS
              echo " echo $RACINE' : répertoire introuvable.'" >> $DROITS
              echo " exit 1" >> $DROITS
              echo "fi" >> $DROITS
              echo 'echo "Restauration des droits sur le répertoire et son contenu :"' >> $DROITS
              echo 'echo " '$RACINE'"' >> $DROITS

              # écriture des instruction de restauration des droits
              echo "##### DEBUT #####" >> $DROITS
              ls -ldQ `du -a $RACINE | cut -f2` | awk -F' ' '{print "chown "$3":"$4,$8}' | grep -e '^[a-z]' >> $DROITS
              echo "##### FIN #####" >> $DROITS

              # finalisation du script
              echo 'echo "Droits restaurés aevc succès."' >> $DROITS

              # configuration des droits sur le script créé
              chmod 740 $DROITS
              chown root:root $DROITS

              echo "Script de restauration des droits créé avec succès."
              echo " Racine : $RACINE"
              echo " Emplacement du script : $DROITS"

              exit 0

              • [^]Re: Solutions alternatives

                Posté par François Nautré () le 28/02/2008 à 00:08. (lien). Évalué à 1.

                Le script pond lui-même un script de ce genre :


                #!/bin/bash
                #
                # Créé le : mercredi 27 février 2008, 23:38:59 (UTC+0100)
                #
                # Racine : /home/santos/rsync/test/root
                #

                ##### Vérifications préliminaires #####

                # vérification de l'utilisateur qui exécute le programme
                if [ `whoami` != "root" ]
                then
                echo 'Vous devez être root pour exécuter ce programme.'
                exit 1
                fi

                # vérification de l'existence de la racine
                test -d /home/santos/rsync/test/root
                if [ $? != 0 ]
                then
                echo /home/santos/rsync/test/root' : répertoire introuvable.'
                exit 1
                fi
                echo "Restauration des droits sur le répertoire et son contenu :"
                echo " /home/santos/rsync/test/root"
                ##### DEBUT #####
                chown root:root "/home/santos/rsync/test/root"
                chown root:root "/home/santos/rsync/test/root/root_test"
                chown santos:santos "/home/santos/rsync/test/root/santos"
                chown santos:santos "/home/santos/rsync/test/root/santos/santos_777"
                chown santos:santos "/home/santos/rsync/test/root/santos/tony_default"
                chown tony:tony "/home/santos/rsync/test/root/tony"
                chown tony:tony "/home/santos/rsync/test/root/tony/tony_777"
                chown tony:tony "/home/santos/rsync/test/root/tony/tony_default"
                ##### FIN #####
                echo "Droits restaurés aevc succès."

              • [^]Re: Solutions alternatives

                Posté par Steve Azriel () le 29/02/2008 à 01:04. (lien). Évalué à 1.

                Bonjour,

                Voici quelques petits points sur tes scripts:
                1) Pour sécuriser un peu plus l'application des chown, je t'invite à utiliser l'apostrophe ' plutôt que le guillemet " pour encadrer les noms des fichiers car le shell (type BaSH) a une légère tendance à regarder dedans (entre les ") pour évaluer ce qu'il peut y trouver (un caractère spécial '!', '*', ...)
                2) Quid si lorsque tu exécutes le script de restauration des droits (celui avec les chown), il y a des erreurs d'exécution (chown peut échouer même en root) ?
                En effet, le script indique toujours une fin "avec succès" (en passant, quel bonheur ^__^) ?

                Cdlt,

                • [^]Re: Solutions alternatives

                  Posté par François Nautré () le 29/02/2008 à 02:00. (lien). Évalué à 1.

                  Merci pour tes conseils !

                  1) Exact, je ne savais pas (ou ne m'étais pas posé la question)

                  2) C'est un brouillon de script, pondu tout en dinant hier soir ^^
                  A terme, y'aura les logs, l'envoi de mail automatique, etc...
                  Mais si une ou plusieurs lignes de chown échoue(nt), c'est vraiment grave ?

                  Soit c'est le fichier qui entre temps a été supprimé, soit c'est root qui n'a pas les droits sur le fichier pour lui faire un chown, et là on ne peut pas y faire grand chose...

Revenir en haut de page || Retourner aux forums || Retourner au forum Linux.debutant