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 Émilien Tlapale . Évalué à 3.
[^] # Re: Copie
Posté par NeoX . Évalué à 3.
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 santos . Évalué à 2.
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 santos . Évalué à 1.
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 (site web personnel) . Évalué à 3.
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 santos . Évalué à 2.
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 . Évalué à 2.
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 santos . Évalué à 1.
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 . Évalué à 2.
puis pendant la restauration ?
[^] # option -o ne marche pas
Posté par santos . Évalué à 1.
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 santos . Évalué à 1.
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 santos . Évalué à 1.
#!/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 . Évalué à 1.
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 santos . Évalué à 1.
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.