Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/12/2015, à 13:33

nukleon

Rsync et comparaison de fichier avant backup

Bonjour je viens vers vous parce que ça fait un petit moment que je me prend la tête sur un script.
Voilà je vous expose le problème :
J'ai un serveur distant qu'on nommera "distant" roll
Sur ce serveur j'ai un dossier qui contient d'autres dossiers et des fichiers qui se synchronisent sur mon NAS local une fois par jour.
Sur le NAS je renomme les dossiers synchronisés.
Je voudrais pouvoir dire à rsync de checker les dossiers renommés afin qu'il ne resynchronise pas les fichiers déjà présents en local.
Pour cela je passe l'option --compare-dest à rsync.
Et pour faire ça bien, vu que j'ai une multitude de dossiers, je stocke le résultat d'un find dans une variable nommée "list".
Voilà le script :

#!/bin/bash
saveDate=$(date +%Y-%m-%d_%H-%M-%S)
logfile="/home/nukleon/logs/rsync_$saveDate.log"

## Lister les rep déjà présents afin de ne pas recopier les fichiers et dossiers déplacés ou renommés
ls=$(find /media/backups/rep2/ -type d -printf .ls.tmp)
read list < .ls.tmp

#Script
echo "Début de la synchronisation : $(date +%d/%m/%Y) - $(date +%H:%M:%S)" >> "$logfile"
echo "" >> "$logfile"
rsync -Pau --stats --compare-dest="$list" maxime@distant:/home/nukleon/rep1/ /media/backups/rep1/ >> "$logfile"
echo "" >> "$logfile"
echo "Fin de la synchronisation : $(date +%d/%m/%Y) - $(date +%H:%M:%S)" >> "$logfile"

Seulement rsync copie quand même les fichiers et dossiers déjà présents dans rep2.

Qu'est ce que je rate ?

Dernière modification par nukleon (Le 09/12/2015, à 13:35)


Do it yourself !

Hors ligne

#2 Le 09/12/2015, à 14:42

αjet

Re : Rsync et comparaison de fichier avant backup

Je ne suis pas convaincu que --compare-dest puisse t'aider pour ce cas.

Je ne suis pas sur de ce que j'avance mais pour moi si ta situation initiale est la suivante:
distant:

rep1/DossierA/Fichier01
rep1/DossierA/Fichier02

Local:

rep2/DossierA/Fichier01 (identique à Fichier01 distant)
rep1/DossierARenomé/Fichier01 (identique à Fichier01 distant)

Alors tu te retrouveras en local avec les fichiers suivants :

rep1/DossierARenomé/Fichier01
rep1/DossierA/Fichier02

De plus si tu fais une modification sur Fichier01 sur le serveur distant:
distant:

rep1/DossierA/Fichier01 (modifié)
rep1/DossierA/Fichier02 (inchangé)

Alors tu te retrouveras dans la situation suivante:

rep2/DossierA/Fichier01 (original)
rep1/DossierARenomé/Fichier01 (original)
rep1/DossierA/Fichier01 (modifié)
rep1/DossierA/Fichier02

Je ne sais pas pourquoi tu as besoin de renommer ces dossier mais ça me semble difficile à maintenir comme solution.

Éventuellement pourrais-tu songer à utiliser des liens symboliques sur le NAS si tu as besoin de noms différents ?

Autre suggestion, si :
-  le nombre de dossiers dont le nom doit être différent est faible,
-  ils se situent assez bas dans l'arborescence
-  ils sont assez statiques, je veux dire pas de création/suppression fréquente de ces dossiers
Alors je pense qu'un script avec un rsync pour chacun de ces dossiers serait peut être facile et plus fiable à mettre en œuvre.

Si tu veux maintenir ta solution actuelle, je pense que ce qui manque dans ton script est une table de correspondance entre les différents noms de dossiers.


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#3 Le 09/12/2015, à 15:58

nukleon

Re : Rsync et comparaison de fichier avant backup

Merci de ta réponse.
Alors tu as assez bien cerné la situation.

Alors tu te retrouveras en local avec les fichiers suivants :

rep1/DossierARenomé/Fichier01
rep1/DossierA/Fichier02

Ca ça ne me dérange pas.

De plus si tu fais une modification sur Fichier01 sur le serveur distant:
distant:

rep1/DossierA/Fichier01 (modifié)
rep1/DossierA/Fichier02 (inchangé)

Les fichiers ne sont jamais modifiés.

Éventuellement pourrais-tu songer à utiliser des liens symboliques sur le NAS si tu as besoin de noms différents ?

J'y ai pensé et c'est certainement la solution que j'adopterais si je ne parvient pas à faire ce que je veux.

Alors je pense qu'un script avec un rsync pour chacun de ces dossiers serait peut être facile et plus fiable à mettre en œuvre.

Le truc c'est que j'ai beaucoup de créations de dossiers sur le serveur.

Si tu veux maintenir ta solution actuelle, je pense que ce qui manque dans ton script est une table de correspondance entre les différents noms de dossiers.

Comment mette une telle table en place ?


Do it yourself !

Hors ligne

#4 Le 09/12/2015, à 17:10

αjet

Re : Rsync et comparaison de fichier avant backup

Je suis un peu perplexe, peut-être que si tu nous donnes plus d'informations contextuelles, on sera plus à même de t'aider.

Pourquoi est-ce que tu dois impérativement renommer les dossiers ?
Est-ce que le renommage suit une logique spécifique ?
Est-ce fait de manière automatisée, à la main ?

Sur ton NAS local, tu dis avoir deux repos, rep1 et rep2. As-tu rep2 uniquement pour répliquer la structure de dossier du serveur distant, ou est-ce qu'il a une autre utilité ?
Une fois la synchronisation de rep1 effectuée, est-ce que tu synchronises aussi rep2 avec le serveur distant ?

Dernière modification par αjet (Le 09/12/2015, à 17:11)


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#5 Le 09/12/2015, à 18:16

nukleon

Re : Rsync et comparaison de fichier avant backup

Bon en réalité j'ai une seedbox sur mon serveur, les séries que je télécharge sont enregistrées sous des noms de répertoires de ce type nom.de.la.série.SXX.nom.de.la.team.uploader.
Je les récupère sur mon NAS grâce à rsync qui est appelé par une tâche cron tous les jours.
Je reclasse les séries de la manière suivante nom.de.la.série/sXX/nom.de.l.épisode.avi
Le renommage et reclassage sert à ce que mon mediacenter parvienne sans mal à récupérer des infos sur les wrappers.

Du coup la synchronisation du repo incoming de la seedbox se fait dans un dossier incoming en local. Ensuite je renomme et déplace les dossiers dans un dossier dédié qui est une source du mediacenter.


Do it yourself !

Hors ligne

#6 Le 09/12/2015, à 19:21

αjet

Re : Rsync et comparaison de fichier avant backup

Pour la suite, on va supposer qu'il s'agit de series de tutoriels d'utilisation de logiciels libres qui sont dans le domaine public wink

Si je devais le faire je privilégierais  une table de correspondance. Tu pourrais par exemple faire un fichier text a deux colonnes séparés par une tab, virgule, etc. et d'utiliser ca comme argument pour definir les dossiers sources et destination de rsync. Ca donnerais quelquechose du genre:

nom.de.la.série1.S01.nom.de.la.team.uploader nom.de.la.série1/S01
nom.de.la.série1.S02.nom.de.la.team.uploader nom.de.la.série1/S02
nom.de.la.série2.S01.nom.de.la.team.uploader nom.de.la.série2/S01

Je pense que tu peux t'inspirer de cet exemple: http://stackoverflow.com/a/9736732.

Ca devrait donner quelque chose du genre. Je suis pas sur de la syntaxe mais ca devrait te donner une idee.

while IFS=$'\t' read -r -a myArray
do
    rsync -Pau --stats "maxime@distant:/home/nukleon/rep1/${myArray[0]}" "/media/backups/rep1/${myArray[1]}" >> "$logfile"
done < myfile

Ca implique que à chaque fois que tu rajoutes une nouvelle serie, tu créés les dossiers correspondants et maintienne le fichier à jour.


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#7 Le 10/12/2015, à 17:01

nukleon

Re : Rsync et comparaison de fichier avant backup

Évidemment en parlant de séries je parlais de séries de documents libres de droits. big_smile
Du coup je me renseigne sur les tableaux de correspondances et sur la syntaxe à adopter pour le script, je tiens le forum au jus.

Merci à toi αjet pour les liens et pour tes conseils ça me permet d'y voir un peu plus clair.

A bientôt.


Do it yourself !

Hors ligne