подавить предупреждение rsync: некоторые файлы исчезли до того, как их можно было перенести

14

Я получаю массу предупреждений при резервном копировании файлов сервера 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
rubo77
источник

Ответы:

6

Вы можете использовать rsync'исключить переключатель ( --exclude):

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

Указанный таким образом --exclude '**/tmp/'будет игнорировать любой путь, который включает в себя строку /tmp/. Вы можете предоставить шаблоны для этих аргументов, а также.

пример

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

Исключим по дорожкам формы: /path/to/*/tmp/.

SLM
источник
так что я должен попробовать 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/'.
Жиль "ТАК - перестань быть злым"
1
... или использовать файловую систему со снимками ... кажется проблематичным восстановить резервную копию, где файлы исчезают на полпути ... если только они не являются несущественными, в этом случае, да, их, вероятно, следует исключить ...
Erk
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- Исчезнувшая; ПП = ГОЛОВКА

что очень похоже на то, что сказали @kenorb и @ gilles-quenot.

Бенуа Жакмон
источник
13

Причина в том, что эти файлы существовали, пока rsync создает список файлов для передачи, но перед удалением они удаляются.

Это предупреждающий массаж, а не ошибка. Тем не менее, вы должны попытаться выяснить, почему эти файлы были удалены, это может быть важно.

Чтобы игнорировать это предупреждение, вы можете использовать опцию --exclude, как указано выше, или использовать -ignore-missing-argsопцию rsync, она заставляет rsync игнорировать исчезнувшие файлы: --ignore-missing-args ignore missing source args without error это может помочь.

SWdream
источник
Это определенно лучше, чем проверять определенный код возврата и переопределять его до 0.
Бойкот SE для Моники Челлио,
За исключением редких случаев, файлы, исчезающие во время оперативного резервного копирования, совершенно нормальны (многие приложения создают кратковременные временные файлы). Это особенно верно в случае почтового сервера, где файлы, содержащие сообщения электронной почты, постоянно перемещаются из одного каталога в другой, поэтому ИМХО этот ответ является более адекватным, чем тот, который принят OP.
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 - Уменьшить необходимость предупреждения «исчезнувшие файлы»

kenorb
источник
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
Конечно, сообщение отредактировано соответственно
Gilles Quenot
2

Моим ответом может быть особый вариант использования, но я чувствовал, что это стоит отметить, поэтому люди не теряют данные, если попадают под этот случай.

Я получал это сообщение для нескольких файлов, выполняя обычное резервное копирование дисков через rsync.

Я выполнил Системную проверку на диске, и оказалось, что есть проблемы с диском (распределение / повреждение файла и т. Д.) И рекомендовал резервное копирование + восстановление + переформатирование.

Поэтому, прежде чем вы выйдете из режима подавления или полностью проигнорируете сообщение, было бы разумно просто выполнить проверку работоспособности вашего диска, чтобы быть в безопасности.

Фрэнсис
источник
Отказы дисков не будут выборочно происходить только в tmpкаталогах.
0

Попробуйте смонтировать ваш резервный диск с nosuid,nodev,nofail,x-gvfs-showпараметрами.

Не уверен, какую систему вы используете, но я считаю, что это связано с параметрами монтирования вашего диска. В Linux это происходит, если я установил параметры монтирования в User Session Default. Он разрешается, когда я отключаю его, и rsync завершает работу без ошибок.

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

Максимум
источник
0

Используйте этот параметр:

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

поместить список в файл. В файле exclude.ini напишите что-то вроде:

Cache
cache2/*
*.lock
/temp

Где:

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

Помните, что если файловая система зависит от регистра, вам, возможно, придется учитывать это.

nicolap8
источник