supprimer l'avertissement rsync: certains fichiers ont disparu avant de pouvoir être transférés

14

Je reçois beaucoup d'avertissements lors de la sauvegarde de mes fichiers serveur Postfix et Courier en cours d'exécution, comme:

file has vanished: /var/kunden/mail/username/[email protected]/tmp/courier.lock

Comment puis-je supprimer ces avertissements rsynclors de son exécution à partir de Cron /usr/bin/rsnapshot hourly?

Puis-je en quelque sorte exclure ces répertoires?

/var/kunden/mail/*/*/tmp/

le tmpdossier peut également être plus profond, par exemple:

file has vanished: /var/kunden/mail/username/[email protected]/.Presse/tmp/1353871473.M716135P32214_imapuid_36.test.de
file has vanished: /var/kunden/mail/username/[email protected]/.Presse/tmp/courier.lock
rubo77
la source

Réponses:

6

Vous pouvez utiliser rsyncle commutateur d'exclusion de ( --exclude):

$ rsync -avz --exclude '**/tmp/' source/ destination/

Spécifié de cette façon, --exclude '**/tmp/'il ignorera tout chemin qui inclut la chaîne /tmp/. Vous pouvez également fournir des modèles à ces arguments.

Exemple

$ rsync -avz --exclude '/path/to/*/tmp/' source/ destination/

Exclura sur les chemins de la forme: /path/to/*/tmp/.

slm
la source
donc je dois essayer rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
rubo77
@ rubo77 - il ignorera tous les répertoires qui les contiennent tels /tmp/que je les ai écrits. Si vous voulez être plus explicite, alors oui, vous pouvez le spécifier comme vous l'avez écrit.
slm
@ rubo77 --exclude='/tmp/'exclut uniquement le répertoire appelé tmpà la racine de la copie. Pour exclure tous les sous-répertoires appelés tmpn'importe où, utilisez --exclude='**/tmp/'.
Gilles 'SO- arrête d'être méchant'
1
... ou utiliser un système de fichiers avec des instantanés ... il semble problématique de restaurer une sauvegarde où les fichiers disparaissent à mi-chemin ... à moins qu'ils ne soient sans conséquence, auquel cas, oui, ils devraient probablement être exclus ...
Erk
19

Malheureusement, contrairement à ce qui est décrit dans la solution SWdream, --ignore-missing-argsn'a aucun impact sur les fichiers disparus. Il ignorera simplement les arguments source qui n'existent pas.

Voir man rsync:

  --ignore-missing-args
          When rsync is first processing the explicitly  requested  source
          files  (e.g. command-line arguments or --files-from entries), it
          is normally an error if the file cannot be found.   This  option
          suppresses  that  error,  and does not try to transfer the file.
          This does not affect subsequent vanished-file errors if  a  file
          was initially found to be present and later is no longer there.

La manière "officielle" d'ignorer le fichier disparu est d'utiliser ce script à partir du référentiel source rsync officiel: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- disparu; hb = TETE

ce qui est très similaire à ce que @kenorb et @ gilles-quenot ont dit.

Benoit Jacquemont
la source
13

La raison en est que ces fichiers existaient pendant que rsync construit la liste des fichiers à transférer, mais ils sont supprimés avant le transfert.

C'est un massage d'avertissement, pas une erreur. Cependant, vous devriez essayer de savoir pourquoi ces fichiers ont été supprimés, c'est peut-être important.

Pour ignorer cet avertissement, vous pouvez utiliser l'option --exclude comme la question ci-dessus ou utiliser l' -ignore-missing-argsoption rsync, cela fait que rsync ignore les fichiers disparus: --ignore-missing-args ignore missing source args without error cela peut être utile.

SWdream
la source
Cela semble certainement mieux que de vérifier un code retour spécifique et de le remplacer par 0.
Boycott SE pour Monica Cellio
Sauf dans de rares cas, les fichiers disparaissant lors d'une sauvegarde en direct sont parfaitement normaux (de nombreuses applications créent des fichiers temporaires de courte durée). Cela est particulièrement vrai dans le cas d'un serveur de messagerie, où les fichiers contenant des messages électroniques sont constamment déplacés d'un répertoire à un autre, donc à mon humble avis cette réponse est plus adéquate que celle acceptée par OP.
MoonSweep
1
Malheureusement, cette option n'existe pas dans toutes les versions de rynsc. En particulier, 3.0.6, livré avec CentOS 6.
jph
3
cette option affecte uniquement les fichiers nommés dans les arguments, ceux trouvés lors de la recherche récursive sont toujours avertis.
Jasen
6

L'erreur signifie que rsyncvous ne pouvez plus trouver les fichiers qui existaient lors de la création de la liste à transférer. Ces erreurs de fichiers disparus se produisent lorsqu'un fichier a été initialement trouvé présent et n'est plus là plus tard. Dans certains cas, cela se produit également lorsque les fichiers source sont corrompus ou contiennent des caractères non valides (il fsckest donc conseillé).

Fondamentalement, il s'agit d'un avertissement, pas d'une erreur, donc rien à craindre, car l'état de chaque fichier de destination reflète un état correspondant aux fichiers source correspondants pendant l'exécution.

Si cela pose problème car la valeur de sortie est différente de zéro, cela peut être résolu par le script d'encapsulation suivant ( source ):

#!/bin/bash
(rsync "$@"; if [ $? == 24 ]; then exit 0; else exit $?; fi) 2>&1 | grep -v 'vanished'

ou par le script de contournement suivant ( source ):

#!/bin/sh
OUT=`/usr/bin/snapback2 2>&1`
RET=$?
if [ "$RET" != "23" -a "$RET" != "0" -a "$RET" != 24 ]; then
    echo "$OUT"
    exit $RET
fi

qui existe essentiellement avec les mêmes codes d'erreur que rsync si rsync échoue.

Ceci est discuté plus en détail dans: Bogue 3653 - Réduit la nécessité de l'avertissement "fichiers disparus"

Kenorb
la source
6

Ou simplement (avec moderne ):

#!/bin/bash

/usr/bin/rsync "$@" 2> >(grep -Ev '(file has |rsync warning: some files )vanished')
ret=$?
((ret==24)) && exit 0 || exit $ret
Gilles Quenot
la source
1
Cela ne supprimerait-il pas l'avertissement de toutes sortes de fichiers contenant également la chaîne vanished?
rubo77
Bien sûr, poste modifié en conséquence
Gilles Quenot
2

Ma réponse pourrait être un cas d'utilisation spécial, mais j'ai pensé que cela valait la peine d'être noté, afin que les gens ne perdent pas de données s'ils tombent dans ce cas.

J'obtenais ce message pour plusieurs fichiers lors d'une sauvegarde de routine des disques via rsync.

J'ai effectué une vérification du système sur le disque et il s'avère qu'il y a des problèmes avec le lecteur (allocation / corruption de fichiers, etc.) et recommandé une sauvegarde + restauration + reformatage.

Donc, avant de supprimer ou d'ignorer le message, il peut être judicieux de simplement effectuer un contrôle de santé sur votre disque juste pour être en sécurité.

Francis
la source
Les pannes de lecteur ne se produiraient pas sélectivement uniquement dans les tmprépertoires.
0

Essayez de monter votre disque de sauvegarde avec des nosuid,nodev,nofail,x-gvfs-showoptions.

Je ne sais pas quel système vous utilisez, mais je pense que cela est lié aux options de montage de votre disque. Sous Linux, cela se produit si je définis les options de montage sur User Session Default. Il se résout lorsque je le désactive et rsync se termine sans aucune erreur.

entrez la description de l'image ici

Max
la source
0

Utilisez ce paramètre:

--exclude-from="./exclude.ini"

pour mettre la liste dans un fichier. Dans le fichier exclude.ini, écrivez quelque chose comme:

Cache
cache2/*
*.lock
/temp

Où:

  1. exclut TOUS les dossiers nommés "Cache" et son contenu;
  2. exclut le contenu de tous les dossiers nommés "cache2" mais inclut la hiérarchie des dossiers afin que vous obteniez tous les sous-dossiers mais vides;
  3. exclut tous les fichiers se terminant par .lock (par exemple, certains fichiers de verrouillage de Firefox et dérivés);
  4. exclut le contenu du dossier / temp.

N'oubliez pas que si le système de fichiers dépend de la casse, vous devrez peut-être en tenir compte.

nicolap8
la source