禁止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

Answers:


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/'
吉尔(Gilles)'所以

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- 消失; hb = HEAD

这与@kenorb和@ gilles-quenot所说的非常相似。


13

原因是这些文件在rsync建立要传输的文件列表时存在,但是在传输之前将其删除。

这是警告性的按摩,不是错误。但是,您应该尝试找出为什么删除了这些文件,这可能很重要。

要忽略此警告,可以使用上述问题中的--exclude选项或使用-ignore-missing-argsrsync选项,它使rsync忽略消失的文件: --ignore-missing-args ignore missing source args without error 也许有帮助。


这似乎肯定比检查一个特定的返回代码,并将其覆盖到0
抵制SE莫妮卡切廖

除极少数情况外,在实时备份过程中消失的文件是完全正常的(许多应用程序会创建短暂的临时文件)。在邮件服务器的情况下尤其如此,其中包含电子邮件的文件不断地从一个目录移动到另一个目录,因此恕我直言,此答案比OP接受的答案更充分。
MoonSweep '17

1
不幸的是,该选项并非在所有版本的rynsc中都存在。特别是CentOS 6
附带的3.0.6。– jph

3
此选项仅影响参数中命名的文件,在递归搜索期间发现的文件仍会受到警告。
Jasen

6

该错误意味着rsync在建立要传输的列表时无法再找到现有的文件。这些消失的文件错误是在最初发现某个文件存在而以后不再存在时发生的。在某些情况下,当源文件损坏或名称中包含无效字符时,也会发生这种情况(fsck建议)。

基本上,这是一个警告,而不是错误,因此无需担心,因为每个目标文件的状态都反映了运行期间相应源文件的状态。

如果由于退出值非零而导致问题,可以通过以下包装脚本(source)解决:

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

或通过以下变通办法脚本(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

如果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

当然,岗位相应编辑
吉尔斯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. 排除所有名为“ Cache”的文件夹及其内容;
  2. 排除所有“ cache2”命名文件夹的内容,但包括文件夹层次结构,因此您将获得所有子文件夹,但为空;
  3. 排除所有以.lock结尾的文件(例如Firefox的某些锁定文件及其衍生版本);
  4. 排除/ temp文件夹的内容。

请记住,如果文件系统是区分大小写的,则可能必须考虑到这一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.