[SAUVEGARDES] rsync fichier d'exclusion

Bonjour

Je cherche depuis quelques jours une solution à un changement de comportement de rsync (je n’ai rien vu dans le changelog à ce sujet)

Je me suis rendu compte que mon script de sauvegarde ne respecte plus le fichier d’exclusion que je lui donne, et ce depuis ce mercredi puisque cela fonctionnait parfaitement avant. Je l’ai vu transférer des fichiers et répertoires que j’avais bien exclus jusque là

Là je suis arrivé au bout de mes idées pour traquer ce bug

Voici l’état des lieux:

  • J’utilise une machine virtuelle (Debian Jessie) sur laquelle sont montés deux répertoires de serveurs locaux
  • Le serveur source est monté par Samba, le serveur de destination par NFS
  • J’exécute ce script fait maison (ou plutôt adapté, peut-être même de scripts trouvés ici) manuellement une fois par semaine

J’ai activé le mode verbose++ et le dry run pour mes tests

  • J’ai vérifié l’encodage du fichier exclude et ses droits:
    l’encodage est us-ascii cela me surprend mais j’ai la même chose sur tous mes postes clients Debian (Wheezy et Jessie). Le fichier est en 644 et appartient toujours à l’utilisateur qui exécute le script rsync
  • J’ai essayé avec des + puis des - devant chaque ligne de mon fichier exclude => Sans effet
  • Même chose en remplaçant exclude par “–filter=merge fichier” => Sans effet
  • J’ai supprimé le = après --exclude-from (lu par ici je crois) => Cela déclenche une erreur
  • Je lui ai fait charger un fichier exclude qui n’existe pas => Déclenche une erreur aussi donc l’option est toujours d’actualité
  • J’ai remplacé --exclude-from= par un --exclude= avec un des patterns de mon fichier => ça fonctionne j’ai bien “hiding blabla because of pattern blabla” dans le log
  • J’ai enchaîné les --exclude= avec plusieurs de mes patterns => Ça ne fonctionne plus, il n’en filtre plus aucun et rien dans le log
  • J’ai essayé diverses possibilités en enlevant ou ajoutant des doubles et simples quotes autour de mes variables => rien (les autres fonctionnent: $LOG par exemple)
  • J’ai déplacé --exclude-from= dans ma variable au lieu de la façon dont c’est écrit dans le script ci-dessous => rien de mieux
  • J’ai exécuté la même ligne de commande directement dans le shell => même comportements

rsync-nas.sh

[code]#!/bin/sh

RACINE="$HOME/Scripts"
DATE="$(date +"%Y-%m-%d_%H:%M:%S")“
SOURCE=”$HOME/vhs4/“
DEST=”$HOME/nas/“
OPTIONS=”-aurvvvh0n --no-g --no-p --progress --delete --delete-excluded --stats"
#EXCLUDE="–exclude=’.Trash**’ --exclude=‘Downloads’ --exclude=‘Torrents’“
EXCLUDE=”$RACINE/exclude-nas.txt"
#BACKUP="$HOME/.local/share/Trash/files"
LOG="$RACINE/logs/NewSauvegarde-$DATE.log"

mountpoint -q "$DEST"
if [ $? != “1” ]
then echo “** NAS OK " >> "$LOG"
mountpoint -q "$SOURCE"
if [ $? != “1” ]
then echo "
VHS4 OK **” >> “$LOG”

    echo "**************** SAUVEGARDE DEMAREE ***************** " >> "$LOG"
    rsync $OPTIONS --log-file="$LOG" --exclude-from="$EXCLUDE" "$SOURCE" "$DEST"
    echo "**************** SAUVEGARDE TERMINEE ***************** " >> "$LOG" ; exit


    else echo "** VHS4 KO **" >> "$LOG"
    fi

else echo “** NAS KO **” >> "$LOG"
fi

echo "**************** SAUVEGARDE INTERROMPUE ***************** " >> “$LOG”[/code]

exclude-nas.txt

*~ .sujournal .snap** .Trash** .@__thumb** Thumbs.db .DS_Store .git** Torrents Downloads video/Divx/Tri BDMV/ /prive/vm/ /albums/ /amis/ /partages/ /www/

Avez vous d’autres idées ?

merci

Salut,

Relis ton script.

Comme je le disais il fonctionnait très bien auparavant sans que je n’y fasse de modifications entre les deux, du coup s’il y a des erreurs dans ce que j’ai posté (je vais regarder ça) ça vient de mes essais, probablement pas du problème que j’ai.

Pourrais-tu détailler ? Merci

Edit: tu penses aux guillemets ?

Bonjour
Bon, j’ai vu que l’option -0 ne fait pas quelque chose d’attendu, je ne sais plus pourquoi je l’avais mise. Peut-être que ça fonctionnait jusque là pour une raison iconnue.

Et je vais faire un autre test aussi en modifiant l’imbrication des quotes, au cas où (ça fonctionne normalement en terminal avec echo pourtant)

Est-ce qu’en ligne de commande simple, càd sans tous tes raccourcis et en dehors d’un script ça fonctionne ?
Je te conseille de faire du pas à pas :
Créer un SEUL fichier “exclure”, dans lequel tu places deux ou trois chemins (complets) et de tester avec une seule ligne de commande :

rsync -av --del --exclude-from=/home/epy/exclure / /mnt

Bien sûr, tu auras monté auparavant ton DDext sur /mnt

Si ça fonctionne bien, tu rajoutes les autres dossiers petit à petit pour voir où ça ne passe pas.

Ok je vais tester ça aussi merci

Pour les tests en CLI simple ils ont le même comportement que le script, c’est à dire OK pour un seul --exclude= et KO pour plusieurs exclude ou exclude-from

Bien vu ricardo au final, ton commentaire rejoint le test qu’on m’avait conseillé de faire en virant toutes les options, c’était le -0 qui causait le problème

Quand on lit la doc c’est évident, mais s’il était là c’est soit une faute de frappe à la con (ça peut arriver mais je doute) soit qu’il a changé de fonctionnalité avec la dernière mise à jour

Merci pour l’aide

rsync est assez susceptible, il n’aime pas trop les complications :confused:
Pour exemple, maintenant, ma sauvegarde est réduite à ce scrip :

[code]sudo mount -t ext4 /dev/sdd5 /mnt/autre
sudo rsync -av --del --exclude-from=/root/exclure / /mnt/autre
echo
echo "sauve / terminé"
echo
sleep 2
sudo umount /mnt/autre

sudo mount -t ext4 /dev/sdd3 /mnt/autre
sudo rsync -av --del --exclude-from=/home/ricardo/exclure /home/ricardo/ /mnt/autre/ricardo
sudo umount /mnt/autre
echo
echo “sauvegarde complète et démontage effectué”
echo
exit[/code]

Il faudrait effectivement que je fasse une passe sur mes options, je devrais pouvoir simplifier, j’ai vu qu’il y avait --info avec des choses intéressantes pour remplacer mes options et simplifier

Par contre, ça m’intéresse de savoir comment tu fais avec ton script et les sudo
Tu le lances manuellement ?
Si oui je suppose qu’au lancement il te demande l’authentification et après il la conserve. Mais si la copie dure plus longtemps que le temps réglé pour sudo (15 mins par défaut je crois) il se passe quoi ?

Je n’ai jamais eu de copie durant 15 mn, même la première fois quand il a tout à ingérer :unamused:
Mais je ne pense pas que, même dans ce cas, exceptionnel à mon avis, il y n’ait de problème. Une fois le processus enclenché, sudo n’est plus en cause. Cette dernière affirmation demande corroboration :017 .

EDIT :

[quote]Par contre, ça m’intéresse de savoir comment tu fais avec ton script et les sudo Tu le lances manuellement ?
Si oui je suppose qu’au lancement il te demande l’authentification [/quote]
Tous mes scripts ont des noms simples, sans extension et tous sont placé au même endroit /usr/local/bin. Bien sûr, le chemin est dans le … :013 :017 .

Alors, comment je pratique :
Je connecte mon DDext OU je ne fais rien quand je sauvegarde sur le second DDint
Ouverture d’une console
$ mon_script (l’un ou l’autre, selon que je sauvegarde sur le DDext ou sur le DDint)
il me demande le passe sudo, que je tape.
Ça mouline, env. 30 seconde ou au plus 1 mn.
Quand s’affiche : “sauvegarde complète et démontage effectué”, soit je débranche mon DDext, soit je ne fais rien.
Le tout me prend env. 2 mn.

Ok tu n’a peut-être pas autant de données que moi à sauvegarder aussi ^^

Il faudra que j’essaie le coup du sudo sur plus de 15 mins, ça m’intrigue

Et que je mette mes scripts dans le path, ça pourrait être pratique :slightly_smiling:

[quote=“Epy”]Ok tu n’a peut-être pas autant de données que moi à sauvegarder aussi ^^

Il faudra que j’essaie le coup du sudo sur plus de 15 mins, ça m’intrigue

Et que je mette mes scripts dans le path, ça pourrait être pratique :slightly_smiling:[/quote]
Voici ce putain de mot qui ne voulait pas se connecter avec mon neurone : PATH.
Si tu mets plus de 15 mn à faire une sauvegarde, tu es sûr qu’il ne recopie QUE les fichiers qui ont été modifiés ?
Ou alors tu as une machine sous P4 voire P3 avec un DD Pata.
Ou alors encore, tu as 30 films entiers à chaque sauvegarde
Ou alors encore encore, tu ne sauvegardes qu’une fois tous les 6 mois :confused:

En fait j’ai 9To de stockage, dont 5 occupés que je sauvegarde presque intégralement sur le 2e serveur ^_^.
Rien que le temps pour lui de faire le tour de tous les répertoires et fichiers à copier y’en a bien pour 5mins (enfin je ne sais pas exactement vu qu’il fait les copies en même temps et certaines copies sont des gros fichiers de plusieurs Go)

Mais 5mins c’est à peu près le temps d’un DRY RUN, j’ai aussi beaucoup de petits fichiers d’applis web diverses et pas mal de photos de la famille à sauvegarder :slightly_smiling:

Je ne m’inquiète pas sur la durée de la sauvegarde elle me parait normale et je surveille qu’il n’y ait bien que les modifiés comme tu as pu le voir avec les logs ou en direct pendant la copie.

Oui, je comprends que 9 To ça prends du temps … la première fois… mais ensuite, en admettant que tu sauvegardes, disons 1x/semaine, ce ne sont pas 9 To qui vont être recopiés, ou alors tu bosse jour et nuit pour modifier tout ça :017

Non bien sûr, (il y a seulement 5To qui sont pleins) mais je rajoute régulièrement des gros fichiers (films) et aussi plein de petits avec mes projets en développement. Ça lui prend beaucoup de temps de parcourir ces petits fichiers surtout, même sans les copier

La toute première copie (faite 2 fois à cause d’un nas4free handicapé…) prend environ 2 jours et demi non stop (en Gigabit) :slight_smile:

[quote=“Epy”]Non bien sûr, (il y a seulement 5To qui sont pleins) mais je rajoute régulièrement des gros fichiers (films) et aussi plein de petits avec mes projets en développement. Ça lui prend beaucoup de temps de parcourir ces petits fichiers surtout, même sans les copier

La toute première copie (faite 2 fois à cause d’un nas4free handicapé…) prend environ 2 jours et demi non stop (en Gigabit) ^_^[/quote]

Wahouuuuuuuuuuuuuuuuuuu :005
en effet !