sopprimere l'avviso rsync: alcuni file sono scomparsi prima che potessero essere trasferiti


14

Ricevo molti avvisi quando eseguo il backup dei miei file di server Postfix e Courier in esecuzione come:

file has vanished: /var/kunden/mail/username/name@mymail.de/tmp/courier.lock

Come posso eliminare quegli avvisi da rsyncquando lo eseguo da Cron /usr/bin/rsnapshot hourly?

Posso in qualche modo escludere quelle directory?

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

la tmpcartella può essere anche più profonda, ad esempio:

file has vanished: /var/kunden/mail/username/name@mymail.de/.Presse/tmp/1353871473.M716135P32214_imapuid_36.test.de
file has vanished: /var/kunden/mail/username/name@mymail.de/.Presse/tmp/courier.lock

Risposte:


6

Puoi usare rsyncl'opzione exclude ( --exclude):

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

Specificato in questo modo --exclude '**/tmp/'ignorerà qualsiasi percorso che includa la stringa /tmp/. Puoi fornire schemi anche a questi argomenti.

Esempio

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

Escluderà su sentieri della forma: /path/to/*/tmp/.


quindi devo provare rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
rubo77,

@ rubo77 - ignorerà tutte le directory che includono /tmp/in esse mentre l'ho scritto. Se vuoi essere più esplicito, sì, puoi specificarlo come hai scritto.
slm

@ rubo77 --exclude='/tmp/'esclude solo la directory chiamata tmpnella radice della copia. Per escludere tutte le sottodirectory chiamate tmpovunque, utilizzare --exclude='**/tmp/'.
Gilles 'SO- smetti di essere malvagio' il

1
... o utilizzare un file system con snapshot ... sembra problematico ripristinare un backup in cui i file scompaiono a metà strada ... a meno che non siano irrilevanti, nel qual caso sì, probabilmente dovrebbero essere esclusi ...
Erk

19

Sfortunatamente, a differenza di quanto descritto nella soluzione SWdream, --ignore-missing-argsnon ha alcun impatto sui file scomparsi. Ignorerà semplicemente gli argomenti di origine che non esistono.

Vedi 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.

Il modo "ufficiale" di ignorare il file scomparso è utilizzare questo script dal repository di sorgenti rsync ufficiale: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- Vanished; hb = TESTA

che è molto simile a quello che hanno detto @kenorb e @ gilles-quenot.


13

Il motivo è che questi file esistevano mentre rsync sta costruendo l'elenco dei file da trasferire ma vengono rimossi prima del trasferimento.

È un massaggio di avvertimento, non un errore. Tuttavia, dovresti provare a scoprire perché questi file sono stati eliminati, forse è importante.

Per ignorare questo avviso, puoi usare l'opzione --exclude come sopra domanda o usare l' -ignore-missing-argsopzione rsync, fa sì che rsync ignori i file scomparsi: --ignore-missing-args ignore missing source args without error forse aiuta.


Sembra decisamente meglio che cercare un codice di ritorno specifico e sovrascriverlo a 0.
Boycott SE per Monica Cellio,

Tranne in rari casi, i file che scompaiono durante un backup live sono perfettamente normali (molte applicazioni creano file temporanei di breve durata). Ciò è particolarmente vero nel caso di un server di posta, in cui i file contenenti messaggi di posta elettronica vengono costantemente spostati da una directory all'altra, quindi IMHO questa risposta è più adeguata di quella accettata da OP.
MoonSweep l'

1
Sfortunatamente questa opzione non esiste in tutte le versioni di rynsc. In particolare, 3.0.6, fornito con CentOS 6.
jph

3
questa opzione ha effetto solo sui file indicati negli argomenti, quelli trovati durante la ricerca ricorsiva vengono comunque avvisati.
Jasen,

6

L'errore indica che rsyncnon è più possibile trovare i file esistenti durante la creazione dell'elenco da trasferire. Questi errori di file scomparsi si verificano quando un file è stato inizialmente trovato per essere presente e in seguito non è più lì. In alcuni casi accade anche quando i file di origine sono danneggiati o hanno caratteri non validi nel nome (quindi fsckè consigliato).

Fondamentalmente questo è un avvertimento, non un errore, quindi nulla di cui preoccuparsi, poiché lo stato di ciascun file di destinazione riflette uno stato in cui i file di origine corrispondenti durante l'esecuzione.

Se sta causando un problema a causa del valore di uscita diverso da zero, questo può essere risolto dal seguente script wrapper ( sorgente ):

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

o con il seguente script di soluzione alternativa ( fonte ):

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

che fondamentalmente esiste con gli stessi codici di errore di rsync se rsync fallisce.

Questo è ulteriormente discusso in: Bug 3653 - Ridurre la necessità dell'avvertenza "file scomparsi"


6

O semplicemente (con moderno ):

#!/bin/bash

/usr/bin/rsync "$@" 2> >(grep -Ev '(file has |rsync warning: some files )vanished')
ret=$?
((ret==24)) && exit 0 || exit $ret

1
Non sopprimerebbe anche l'avvertimento di tutti i tipi di file che contengono la stringa vanished?
rubo77

Certo, post modificato di conseguenza
Gilles Quenot

2

La mia risposta potrebbe essere un caso d'uso speciale, ma ho ritenuto che valesse la pena notare, quindi le persone non perdono i dati se rientrano in questo caso.

Stavo ricevendo quel messaggio per diversi file mentre eseguivo un backup di routine delle unità tramite rsync.

Ho eseguito un controllo del sistema sul disco e risulta che ci sono problemi con l'unità (allocazione / danneggiamento dei file, ecc.) E ho raccomandato un backup + ripristino + riformattazione.

Quindi, prima di uscire per sopprimere o ignorare completamente il messaggio, potrebbe essere saggio eseguire un controllo dello stato sul disco solo per sicurezza.


I guasti alle unità non si verificherebbero solo selettivamente nelle tmpdirectory.

0

Prova a montare il tuo disco di backup con le nosuid,nodev,nofail,x-gvfs-showopzioni.

Non sono sicuro del sistema che stai utilizzando, ma credo che ciò sia correlato alle opzioni di montaggio del tuo disco. Su Linux questo accade se imposto le opzioni di mount su User Session Default. Si risolve quando lo disabilito e rsync si completa senza errori.

inserisci qui la descrizione dell'immagine


0

Usa questo parametro:

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

per mettere la lista in un file. Nel file exclude.ini scrivi qualcosa del tipo:

Cache
cache2/*
*.lock
/temp

Dove:

  1. esclude TUTTE le cartelle denominate "Cache" e il suo contenuto;
  2. esclude il contenuto di tutte le cartelle denominate "cache2" ma include la gerarchia delle cartelle in modo da ottenere tutte le sottocartelle, ma vuote;
  3. esclude tutti i file che terminano con .lock (es. alcuni file di blocco di Firefox e derivati);
  4. esclude il contenuto della cartella / temp.

Ricordare che se il file system dipende dal caso, potrebbe essere necessario tenerne conto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.