ukryj ostrzeżenie rsync: niektóre pliki zniknęły, zanim mogły zostać przesłane

15

Podczas tworzenia kopii zapasowej moich plików serwera Postfix i Courier otrzymuję mnóstwo ostrzeżeń, takich jak:

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

Jak wyłączyć te ostrzeżenia rsync, uruchamiając je z Crona /usr/bin/rsnapshot hourly?

Czy mogę w jakiś sposób wykluczyć te katalogi?

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

tmpfolder może być głębsze, a także, na przykład:

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
źródło

Odpowiedzi:

7

Możesz użyć opcji rsyncexclude switch ( --exclude):

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

Określony w ten sposób --exclude '**/tmp/'zignoruje każdą ścieżkę, która zawiera ciąg /tmp/. Możesz również podać wzory dla tych argumentów.

Przykład

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

Wykluczy na ścieżkach w postaci: /path/to/*/tmp/.

slm
źródło
więc muszę spróbować rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
rubo77
@ rubo77 - zignoruje wszystkie zawarte /tmp/w nich katalogi, gdy je napisałem. Jeśli chcesz być bardziej jednoznaczny niż tak, możesz określić to tak, jak napisałeś.
slm
@ rubo77 --exclude='/tmp/'wyklucza tylko katalog wywoływany tmpw katalogu głównym kopii. Aby wykluczyć wszystkie podkatalogi wywoływane tmpgdziekolwiek, użyj --exclude='**/tmp/'.
Gilles 'SO - przestań być zły'
1
... lub użyj systemu plików z migawkami ... przywrócenie kopii zapasowej, w której pliki znikają w połowie, wydaje się problematyczne ... chyba że są nieistotne, w takim przypadku tak, prawdopodobnie należy je wykluczyć ...
Erk
19

Niestety, w przeciwieństwie do tego, co opisano w rozwiązaniu SWdream, --ignore-missing-argsnie ma wpływu na zniknięte pliki. Po prostu zignoruje argumenty źródłowe, które nie istnieją.

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

„Oficjalnym” sposobem ignorowania znikniętego pliku jest użycie tego skryptu z oficjalnego repozytorium źródłowego rsync: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- zniknął; hb = HEAD

co jest bardzo podobne do tego, co powiedzieli @kenorb i @ gilles-quenot.

Benoit Jacquemont
źródło
13

Powodem jest to, że pliki te istniały, gdy rsync tworzy listę plików do przesłania, ale są one usuwane przed przesłaniem.

To masaż ostrzegawczy, a nie błąd. Jednak powinieneś spróbować dowiedzieć się, dlaczego te pliki zostały usunięte, być może jest to ważne.

Aby zignorować to ostrzeżenie, możesz użyć opcji --exclude, jak podano powyżej, lub -ignore-missing-argsopcji rsync, powoduje to, że rsync ignoruje zniknięte pliki: --ignore-missing-args ignore missing source args without error może to pomóc.

SWdream
źródło
Wydaje się to zdecydowanie lepsze niż sprawdzanie konkretnego kodu powrotu i nadpisywanie go na 0.
Boycott SE dla Moniki Cellio
Z wyjątkiem rzadkich przypadków pliki znikające podczas tworzenia kopii zapasowej na żywo są całkowicie normalne (wiele aplikacji tworzy krótkotrwałe pliki tymczasowe). Jest to szczególnie prawdziwe w przypadku serwera pocztowego, gdzie pliki zawierające wiadomości e-mail są stale przenoszone z jednego katalogu do drugiego, więc IMHO ta odpowiedź jest bardziej adekwatna niż ta zaakceptowana przez OP.
MoonSweep
1
Niestety ta opcja nie istnieje we wszystkich wersjach rynsc. W szczególności 3.0.6, który jest dostarczany z CentOS 6.
jph
3
ta opcja wpływa tylko na pliki wymienione w argumentach, te znalezione podczas wyszukiwania rekurencyjnego są nadal ostrzegane.
Jasen
6

Błąd oznacza, że rsyncnie można już znaleźć plików, które istniały podczas tworzenia listy do przesłania. Te błędy zniknięcia pliku występują, gdy plik początkowo został znaleziony, a później go już nie ma. W niektórych przypadkach dzieje się tak również wtedy, gdy pliki źródłowe są uszkodzone lub mają nieprawidłowe znaki w nazwie (tak fsckzaleca się).

Zasadniczo jest to ostrzeżenie, a nie błąd, więc nie ma się czym martwić, ponieważ stan każdego pliku docelowego odzwierciedla stan, w którym odpowiednie pliki źródłowe podczas uruchamiania.

Jeśli powoduje problem, ponieważ wartość wyjścia jest różna od zera, można to rozwiązać za pomocą następującego skryptu opakowania ( źródła ):

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

lub za pomocą następującego skryptu obejścia ( źródło ):

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

który w zasadzie istnieje z tymi samymi kodami błędów co rsync, jeśli rsync zawiedzie.

Jest to dalej omówione w: Bug 3653 - Zmniejsz potrzebę ostrzeżenia o „znikniętych plikach”

kenorb
źródło
6

Lub po prostu (z nowoczesnym ):

#!/bin/bash

/usr/bin/rsync "$@" 2> >(grep -Ev '(file has |rsync warning: some files )vanished')
ret=$?
((ret==24)) && exit 0 || exit $ret
Gilles Quenot
źródło
1
Czy to nie pomija ostrzeżenia o wszelkiego rodzaju plikach, które również zawierają w sobie ciąg znaków vanished?
rubo77
Jasne, post został odpowiednio zmodyfikowany
Gilles Quenot
2

Moja odpowiedź może być szczególnym przypadkiem użycia, ale uważam, że warto to zauważyć, aby ludzie nie stracili danych, jeśli są objęci tą sprawą.

Otrzymywałem ten komunikat dla kilku plików podczas rutynowego tworzenia kopii zapasowych dysków za pomocą rsync.

Przeprowadziłem kontrolę systemu na dysku i okazało się, że występują problemy z dyskiem (alokacja / uszkodzenie pliku itp.) I zaleciłem wykonanie kopii zapasowej + przywracanie + formatowanie.

Więc zanim wyjdziesz z ukrycia lub całkowicie zignorujesz wiadomość, rozsądnie może być po prostu przeprowadzenie kontroli stanu dysku, aby być bezpiecznym.

Francis
źródło
Awarie dysków nie występowałyby selektywnie tylko w tmpkatalogach.
0

Spróbuj zamontować dysk kopii zapasowej z nosuid,nodev,nofail,x-gvfs-showopcjami.

Nie jestem pewien, jakiego systemu używasz, ale uważam, że jest to związane z opcjami montowania dysku. W systemie Linux dzieje się tak, jeśli ustawię opcje montowania na User Session Default. Rozwiązuje się, gdy go wyłączam, a rsync kończy bez żadnych błędów.

wprowadź opis zdjęcia tutaj

Max
źródło
0

Użyj tego parametru:

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

umieścić listę w pliku. W pliku exclude.ini napisz coś takiego:

Cache
cache2/*
*.lock
/temp

Gdzie:

  1. nie obejmuje WSZYSTKICH folderów o nazwie „Pamięć podręczna” i jego zawartości;
  2. wyklucza zawartość wszystkich nazwanych folderów „cache2”, ale obejmuje hierarchię folderów, dzięki czemu wszystkie podfoldery są puste;
  3. wyklucza wszystkie pliki kończące się na .lock (np. niektóre pliki blokujące Firefoksa i pochodne);
  4. wyklucza zawartość folderu / temp.

Pamiętaj, że jeśli w systemie plików rozróżniana jest wielkość liter, być może będziesz musiał to uwzględnić.

nicolap8
źródło