Forum Linux.débutant Rsync : restaurer une sauvegarde

Posté par  .
Étiquettes : aucune
0
26
fév.
2008
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 !
  • # Copie

    Posté par  . É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  . É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.
      • [^] # Re: Copie

        Posté par  . É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  . É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  (site web personnel) . É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  . É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  . É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  . É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  . Évalué à 2.

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

                  puis pendant la restauration ?
                  • [^] # option -o ne marche pas

                    Posté par  . É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  . É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  . É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  . É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  . É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...

Suivre le flux des commentaires

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