Aller au contenu

Utiliser Rsync


jlbn

Messages recommandés

Bonjour à tous,

j'essaye de me créer mon propre script afin d'avoir notamment des fichiers de log détaillé et un plus grand contrôle.

Lorsque je teste une simple commande :

#!/bin/sh

rsync -av /volume1/Backup/dossier1 /volume1/Backup/dossier2/
en créant un fichier script sh et en le lançant à la main dans le planificateur de tache, et bien rien ne se passe.
Pour moi cette commande devrait copier le contenu de dossier1 dans dossier2
ça commence bien !
la finalité étant de copier mon volume 1 de mon nas principal vers un dossier de mon nas secondaire qui est sur un site distant en ssh.
Je précise que la sauvegarde via l'outil intégré fonctionne bien et que j'ai procédé à la modif du port ssh par défaut en modifiant le fichier ssh_config.
En résumé, je suis pas arrivé !
merci
Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 70
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Bonjour à tous,

j'essaye de me créer mon propre script afin d'avoir notamment des fichiers de log détaillé et un plus grand contrôle.

Lorsque je teste une simple commande :

#!/bin/sh

rsync -av /volume1/Backup/dossier1 /volume1/Backup/dossier2/
en créant un fichier script sh et en le lançant à la main dans le planificateur de tache, et bien rien ne se passe.

bon en fait c'est l'appel de ce script logé dans un fichier script.sh qui ne fonctionne pas, ce fichier doit-il être placé dans un endroit particulier ?

Modifié par jlbn
Lien vers le commentaire
Partager sur d’autres sites

Tu as oublié de déclarer le PATH dans ton script!

Au minimum il faudrait mettre:

PATH=/bin:/usr/bin:/usr/syno/bin

D'autre part, via le planificateur de taches, tu est "aveugle" sur les erreurs, donc pense a ajouter la création d'un log ou tu pourras vérifier que tout s'est bien passé (ou pas):

[ -t 0 ] || exec >/tmp/monscript.log 2>&1

Ces deux lignes à inclure en tête de ton script.

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Merci CoolRaoul,

J'ai ajouté ces deux lignes dans le script et ça fonctionne quand je met le script complet dans la fenêtre du planificateur de tâches.

par contre, j'ai mis donc ça :

#!/bin/sh
PATH=/bin:/usr/bin:/usr/syno/bin
[ -t 0 ] || exec >/volume1/Backup/rsync/journal.log 2>&1                         
rsync -av /volume1/Backup/jlbn /volume1/Backup/rsync/

Dans un fichier texte nommé script.sh. Quand je l'appelle via le planificateur en indiquant l'emplacement de ce fichier (/volume1/Backup/rsync/script.sh), rien ne se passe.

Faut -il placer ce fichier dans un endroit particulier ?

Lien vers le commentaire
Partager sur d’autres sites

Quand je l'appelle via le planificateur en indiquant l'emplacement de ce fichier (/volume1/Backup/rsync/script.sh), rien ne se passe.

Tu as probablement certainement oublié de le rendre exécutable.

Essaie de faire:

chmod +x /volume1/Backup/rsync/script.sh
Et re-testes.

Faut -il placer ce fichier dans un endroit particulier ?

Non, il peut être situé ou tu veux.
Lien vers le commentaire
Partager sur d’autres sites

Tu as probablement certainement oublié de le rendre exécutable.

Essaie de faire:

chmod +x /volume1/Backup/rsync/script.sh

Désolé je dois être un boulet, mais je fais ça où ?

avec putty ? j'ai essayé, ça change rien, rien ne se passe.

C'est peut être la façon de faire ce fichier de script qui est mauvaise pour moi, je crée le fichier avec notepad++.

Suis un peu perdu à vrai dire

Lien vers le commentaire
Partager sur d’autres sites

je fais ça où ?

En étant connecté en mode ligne de commande sur le NAS, par SSH ou par telnet

avec putty ?

Par exemple oui

j'ai essayé, ça change rien, rien ne se passe.

Normal, la commande "chmod" fait son travail sans rien afficher.

C'est peut être la façon de faire ce fichier de script qui est mauvaise pour moi, je crée le fichier avec notepad++.

Assure toi juste de l'avoir configuré comme ci dessous:

T6YBZQY.png

Une fois connecté sur le NAS en mode ligne, tu peux exécuter directement ton script, inutile de passer par le gestionnaire de tache tant que tu est en phase de mise au point.

Lien vers le commentaire
Partager sur d’autres sites

Bon , je fais des essais en local, ça me permet de comprendre mieux les commandes petit à petit, pas de soucis.

Par contre, si je veux faire la même chose vers mon syno distant en ssh, j'ai ce message d'erreur :

Host key verification failed.

rsync error: unexplained error (code 255) at io.c(687) [sender=3.0.9]

Peut-on insérer le mot de passe dans le script ?

Sinon, il faut faire une manip avec les clé ssh, mais là je suis un peu perdu sur la manip : à partir de quel serveur ? comment ?

Merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

Là on s'éloigne du problème initial.

Il va falloir d'abord que tu apprennes à utiliser l'authentification SSH par clé.

Je t'engage à chercher de l'info et des tutos la dessus mais si tu pars de zero comme je commence à m'en rendre compte prévois d'y consacrer un peu de temps.

Sache aussi que, si ton objectif est de synchroniser des dossiers à distance, peut-être ferais-tu mieux d'envisager l'utilisation des outils déà prévus ) cet effet dans l'interface DSM (synchro de dossier partagé), ou même attendre l'arrivé de DScloud de NAS à NAS en DSM 5, plutôt que passer par des scripts shell.

Lien vers le commentaire
Partager sur d’autres sites

je ne cherche pas à faire une synchro, mais une sauvegarde entre mon syno chez moi et un autre localisé chez un copain.

J'ai dèjà mis en place une sauvegarde via l'outil sauvegarder et restaurer en ssh et ça fonctionne, mais je souhaiterais pouvoir personnaliser un peu plus la sauvegarde (copie dans un dossier daté du jour des fichiers supprimés sur la source par exemple), avoir un log de suivi, etc....

je comprends en tout cas qu'il faut passer par la génération de clés ssh pour pouvoir faire ça en rsync, donc je vais suivre ton conseil et chercher des tutos clairs pour faire ça sur mon syno.

merci en tout cas pour tes conseils

Lien vers le commentaire
Partager sur d’autres sites

Bon j'avance, j'ai généré la clé et lancé un script vers mon syno distant et ça fonctionne :D

Quelques questions :

j'ai généré la clé avec l'utilisateur root, y-a-t-il un risque ?

même après avoir désactivé la connexion ssh dans terminal sur les 2 synos, le script fonctionne, c'est normal ? Par contre, lorsque j'essaye de me connecter avec putty, ça passe pas.

Lien vers le commentaire
Partager sur d’autres sites

j'ai généré la clé avec l'utilisateur root, y-a-t-il un risque ?

L'opération de génération de clé est indépendante du compte utilisé si c'est ça ta question; la clé générée à la même "qualité" quelle que soit le compte utilisée pour cela.

Sinon le risque, en laissant le port SSH ouvert, est de se faire attaquer (mais pas obligatoirement pirater: il reste encore des mécanismes de sécurité efficace comme le blocage auto) .

Je conseillerait d'utiliser des règles dans le firewall du Syno pour laisser passer sur le port SSH iniquement les IP "amies".

A cet effet, décfinir une ou plusieurs règles autorisant les connexion SSH pour ces IPs (ou range d'IPs) suivie d'une règle bloquant tout le port 22.

Iu mieux configurer le firewall en cochant "interdire l’accès" quand "aucune règle n'est remplie" (dans ce cas ne pas oublier de mettre en tète de liste une règle autorisant toutes les IP di LAN locale. De plusla règle de blocage devient inutile)

même après avoir désactivé la connexion ssh dans terminal sur les 2 synos, le script fonctionne, c'est normal ? Par contre, lorsque j'essaye de me connecter avec putty, ça passe pas.

Le service de sauvegarde réseau est basé sur rsync qui lui même s'appuie sur SSH.

A partir du moment ou le service a été activé via le panneau de configuration DSM, le démon sshd l'est aussi, même si on a désactivé les connexions ssh dans "terminal" (ce qui aura juste pour effet d'interdire les connexions ssh "non rsync")

Lien vers le commentaire
Partager sur d’autres sites

merci pour tes conseils et précisions à nouveau,

j'ai déjà mis des règles dans le pare feu en n'autorisant que des ip locales et l'adresse ip du syno source, celle-ci étant fixe. J'ai par ailleurs modifié le port par défaut pour le ssh, et activé le blocage auto.

Je pense donc être tranquille.

Je continue mes essais maintenant pour aboutir à un script fonctionnel et qui me convienne.

Lien vers le commentaire
Partager sur d’autres sites

je continue et j'avance, ci dessus le code que j'utilise :

#!/bin/sh
PATH=/bin:/usr/bin:/usr/syno/bin

#Déclaration des variables
date=`date +%y_%m_%d`
LOG=/volume1/Backup/rsync/log
EXCLURE=/volume1/Backup/rsync/exclure.txt
SOURCE=/volume1/Backup/jlbn
DEST=/volume1/backup/test/
BACKUP=/volume1/backup/test/fichiers_suppr
SERVEUR=root@111.222.222.222

#Fichier de log pour le suivi
[ -t 0 ] || exec >$LOG/$date.log 2>&1

#Lancement de la sauvegarde
rsync -av --stats --delete --backup 
    -e "ssh -p 5555 -i /dir/.ssh/id_dsa" 
	--backup-dir=$BACKUP/$date/ 
	--exclude-from=$EXCLURE  #j'ai pas essayé mais ça doit fonctionner
	$SOURCE $SERVEUR:$DEST

#Supression du repertoire de sauvegarde des fichiers supprimés dans la source de plus de 5 jours : ça marche pas
supprdossier= ls $BACKUP | head -n5
mv $supprdossier poubelle/

#Envoi d'un mail avec heure de début et fin et fichier de log à realiser

exit

Ce qui marche :

  • fichier de log ok
  • sauvegarde ok
  • sauvegarde des fichiers supprimés dans la source dans un dossier date sur la cible : ok

Ce qui marche pas :

  • suppr du dossier date de plus de 5 jours

Ce qui n'est pas fait :

  • envoi du mail

si vous pouvez m'aider un peu ou m'aiguiler

merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Ce qui marche pas :

  • suppr du dossier date de plus de 5 jours

Je m'y prendrais plutôt comme suit: (laisser le code entre parenthèses afin que le "cd" reste local):

(
    cd "$BACKUP" && find . -type d -maxdepth 1 -mindepth 1 -mtime +5 | xargs rm -r
)

A tester avec un "echo" avant le "xargs" pour tester

(le "cd <truc> && <commande dangereuse>" ainsi que les quotes autour de $BACKUP (pas se faire avoir si variable non définie), sont des habitudes que j'ai prises, pas forcément utile ici mais bon: ceintures, bretelles , ... toussa,

Lien vers le commentaire
Partager sur d’autres sites

Je m'y prendrais plutôt comme suit: (laisser le code entre parenthèses afin que le "cd" reste local):

(
    cd "$BACKUP" && find . -type d -maxdepth 1 -mindepth 1 -mtime +5 | xargs rm -r
)

A tester avec un "echo" avant le "xargs" pour tester

(le "cd <truc> && <commande dangereuse>" ainsi que les quotes autour de $BACKUP (pas se faire avoir si variable non définie), sont des habitudes que j'ai prises, pas forcément utile ici mais bon: ceintures, bretelles , ... toussa,

par contre, j'ai mal dû m'exprimer le dossier à supprimer est sur le serveur cible, donc pas en local, du coup, le code proposé ne doit pas fonctionner ?

Lien vers le commentaire
Partager sur d’autres sites

par contre, j'ai mal dû m'exprimer le dossier à supprimer est sur le serveur cible, donc pas en local, du coup, le code proposé ne doit pas fonctionner ?

En effet

Pour effacer des fichiers distants faudrait pouvoir faire un ssh en mode commande mais il me semble que tu l'as désactivé?

Sinon et si je ne me goure pas ça serait faisable comme ceci (attention aux quotes):

ssh $SERVEUR "cd '$BACKUP' && find . -type d -maxdepth 1 -mindepth 1 -mtime +5 | xargs rm -r"
Lien vers le commentaire
Partager sur d’autres sites

Sinon et si je ne me goure pas ça serait faisable comme ceci (attention aux quotes):

ssh $SERVEUR "cd '$BACKUP' && find . -type d -maxdepth 1 -mindepth 1 -mtime +5 | xargs rm -r"

Bon en fait la commande passe, mais rien ne se passe.

Je vais encore abuser et expliquer ce que je souhaite :

  • je conserve sur le serveur cible les fichiers supprimés de la source dans des dossiers datés du jour :
    • 14-02-28 : dossier sur le serveur cible où sont localisés les fichiers supprimés de la source détectés lors de la sauvegarde du 28
    • 14-02-27 : dossier sur le serveur cible où sont localisés les fichiers supprimés de la source détectés lors de la sauvegarde du 27
    • etc....
    • 14-02-24 : dossier sur le serveur cible où sont localisés les fichiers supprimés de la source détectés lors de la sauvegarde du 24
  • je fixe un nombre de jours de rétention de ces dossiers dans une variable RETENTION=5
  • avec ce paramètre, ça me permet de supprimer le dossier du 24

éventuellement, si le dossier est inexistant, et bien on envoie un message d'avertissement.

Pour faire ça peut-etre faut-il changer la structure des dossiers.

merci de votre aide (surtout de CoolRaoul depuis le début)

Modifié par jlbn
Lien vers le commentaire
Partager sur d’autres sites

Vu que ca ne fait moins d'un jour ton programme fonctionne c'est normal que rien ne se passe.

Ma commande ("find -mtime") se base sur les *timestamps* des sous dossiers de "$BACKUP" sur la cible. Je suppose que, pour tester, tu as du y créer des dossiers "bidons" , mais ils sont tous forcément datés du jour.

Les premier effacements ne seront effectifs que d'ici 6 jours.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Je lâche rien et je poursuis dans ma quête d'un script fonctionnel pour mes besoins.

Le script pour le moment :

#!/bin/sh
PATH=/bin:/usr/bin:/usr/syno/bin

#Déclaration des variables
date=`date +%y_%m_%d`
LOG=/volume1/Backup/rsync/log
EXCLURE=/volume1/Backup/rsync/exclure.txt
SOURCE=/volume1/
DEST=/volume1/backup/jlbn/
BACKUP=/volume1/backup/fichiers_suppr
SERVEUR=ip du serveur
PORT=5555
RETENTION=5


#Ecriture dans le log de la date et heure de lançement
echo "" > $LOG/$date.log
echo "========================================================================================================================" >> $LOG/$date.log
echo "Lancement de la sauvegarde le $(date +%A) $(date +%d) $(date +% $(date +%Y) à $(date +%H)h et $(date +%M)min" >> $LOG/$date.log

#Lancement de la sauvegarde
rsync -arv --partial --stats --delete --backup 
    -e "ssh -p $PORT -i /root/.ssh/id_dsa" 
	--backup-dir=$BACKUP/$date/ 
	--exclude-from=$EXCLURE 
	$SOURCE $SERVEUR:$DEST >> $LOG/$date.log

#Supression du dossier de rétention le plus ancien selon la variable RETENTION définie en jours à tester plus tard
#ssh $SERVEUR "cd '$BACKUP' && find . -type d -maxdepth 1 -mindepth 1 -mtime +'$RETENTION' | xargs rm -r"

# Ecriture de la date et de l'heure de fin de la sauvegarde
echo "" >> $LOG/$date.log
echo "-----------------------------------------------------------------" >> $LOG/$date.log
echo "Fin de la sauvegarde le $(date +%A) $(date +%d) $(date +% $(date +%Y) à $(date +%H)h et $(date +%M)min" >> $LOG/$date.log
echo "========================================================================================================================" >> $LOG/$date.log
echo >> $LOG/$date.log

# Envoi du mail
mail -s "sauvegarde vers maison" "$mail" < $LOG/$date.log

exit

tout fonctionne sauf l'envoi de mail à la fin, si vous pouvez m'aider

merci beaucoup

Modifié par jlbn
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.