придушити попередження rsync: деякі файли зникли, перш ніж їх можна було перенести


15

Я отримую безліч попереджень, коли створюю резервні копії моїх запущених файлів серверів Postfix та Courier, таких як:

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

Як я можу придушити ці попередження, rsyncколи запускається з Cron /usr/bin/rsnapshot hourly?

Чи можу я якось виключити ці панночки?

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

tmpпапка може бути глибше , а також, наприклад:

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

Відповіді:


7

Ви можете використовувати rsyncперемикач виключення ( --exclude):

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

Зазначений таким чином --exclude '**/tmp/'ігнорує будь-який шлях, що включає рядок /tmp/. Ви також можете навести шаблони цього аргументу.

Приклад

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

Виключимо по доріжках форми: /path/to/*/tmp/.


так що я повинен спробувати rsync -a --exclude '/var/kunden/mail/*/*/tmp/' --exclude '/var/kunden/mail/*/*/*/tmp/' /var/kunden/ $SERVER/var_kunden/ ?
rubo77

@ rubo77 - він ігнорує будь-які каталоги, що включають /tmp/до них, як я це писав. Якщо ви хочете бути більш чіткими, то так, ви можете вказати це так, як ви написали.
slm

@ rubo77 --exclude='/tmp/'виключає лише каталог, який називається tmpв корені копії. Щоб виключити всі підкаталоги, що викликаються tmpбудь-де, використовуйте --exclude='**/tmp/'.
Жил 'SO- перестань бути злим'

1
... або використовувати файлову систему зі знімками ... видається проблематичним відновити резервну копію, де файли зникають на півдорозі ... якщо вони не мають наслідків, у такому випадку, так, вони, ймовірно, повинні бути виключені ...
Ерк

19

На жаль, на відміну від того, що описано в рішенні SWdream, --ignore-missing-argsне впливає на зниклі файли. Він просто ігнорує вихідні аргументи, яких не існує.

Дивіться 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.

"Офіційний" спосіб ігнорування зниклого файлу полягає у використанні цього сценарію з офіційного сховища джерела rsync: https://git.samba.org/?p=rsync.git;a=blob_plain;f=support/rsync-no- зник; hb = ГОЛА

що дуже схоже на те, що сказали @kenorb та @ gilles-quenot.


13

Причина в тому, що ці файли існували, коли rsync створює список файлів для передачі, але вони видаляються перед передачею.

Це попереджувальний масаж, а не помилка. Однак вам слід спробувати з'ясувати, чому цей файл видалено, це може бути важливо.

Щоб ігнорувати це попередження, ви можете скористатися опцією --exclude, як описано вище, або скористатися -ignore-missing-argsпараметром rsync, rsync ігнорує зниклі файли: --ignore-missing-args ignore missing source args without error це може допомогти.


Це, безумовно, краще, ніж перевірити конкретний код повернення та змінити його на 0.
Бойкот SE для Monica Cellio

За винятком рідкісних випадків, файли, які зникають під час резервного копіювання в реальному часі, є цілком нормальними (багато програм створюють короткочасні тимчасові файли). Особливо це стосується поштового сервера, де файли, що містять повідомлення електронної пошти, постійно переміщуються з одного каталогу в інший, тому IMHO ця відповідь є більш адекватною, ніж прийнята ОП.
MoonSweep

1
На жаль, ця опція існує не у всіх версіях rynsc. Зокрема, 3.0.6, що постачається з CentOS 6.
jph

3
ця опція впливає лише на файли, названі в аргументах, ті, які знайдені під час рекурсивного пошуку, все ще отримують попередження.
Ясен

6

Помилка означає, що rsyncпід час створення списку для передачі більше не можна знайти файли, які існували. Ці помилки зниклих файлів трапляються, коли спочатку було встановлено, що файл присутній, а пізніше його більше немає. У деяких випадках це трапляється і тоді, коли вихідні файли пошкоджені або мають невірні символи в імені (так fsckрадимо).

В основному це попередження, а не помилка, тому нічого не турбуватися, оскільки стан кожного файлу призначення відображає стан, який відповідні вихідні файли під час виконання.

Якщо це викликає проблему, оскільки значення виходу не дорівнює нулю, це можна вирішити за допомогою наступного сценарію обгортки ( джерела ):

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

або за наступним сценарієм вирішення ( джерело ):

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

яка в основному існує з тими ж кодами помилок, що й rsync, якщо rsync не працює.

Про це далі йде мова в: Помилка 3653 - Зменшіть потребу в попередженні "зниклі файли"


6

Або просто (з сучасним ):

#!/bin/bash

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

1
Хіба це не пригнічуватиме попередження про всі види файлів, що містять рядок vanishedу ньому?
rubo77

Звичайно, повідомлення відредаговано відповідно
Джилс Кінот

2

Моя відповідь може бути особливим випадком використання, але я вважав, що це варто зазначити, тому люди не втрачають даних, якщо вони потрапляють під цю справу.

Я отримував це повідомлення для декількох файлів, виконуючи звичайне резервне копіювання дисків за допомогою rsync.

Я здійснив перевірку системи на диску і виявилося, що є проблеми з накопичувачем (пошкодження при розподілі / файлі тощо) і рекомендував резервну копію + відновлення + переформатування.

Тому перш ніж виходити з подавлення або ігнорувати повідомлення прямо, може бути розумно просто перевірити стан здоров’я на своєму приводі, щоб бути безпечним.


Збої на диску не вибірково трапляються лише в tmpкаталогах.

0

Спробуйте встановити резервний диск з nosuid,nodev,nofail,x-gvfs-showопціями.

Не впевнений, яку систему ви використовуєте, але я вважаю, що це пов'язано з параметрами кріплення вашого диска. У Linux це відбувається, якщо я встановив параметри кріплення User Session Default. Він вирішується, коли я його відключаю, і rsync завершується без помилок.

введіть тут опис зображення


0

Використовуйте цей параметр:

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

щоб помістити список у файл. У файл isključi.ini напишіть щось на кшталт:

Cache
cache2/*
*.lock
/temp

Де:

  1. виключає ВСІ папки з назвою "Кеш" та його вміст;
  2. виключає вміст усіх папок з назвою "cache2", але включає ієрархію папок, тому ви отримаєте всі підпапки, але порожні;
  3. виключає всі файли, що закінчуються .lock (наприклад, деякі файли блокування Firefox та їх похідні);
  4. виключає вміст папки / temp.

Пам’ятайте, що якщо файлова система залежить від регістру, вам, можливо, доведеться це враховувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.