rsync警告を抑制する:転送される前にいくつかのファイルが消えた


14

次のような実行中のPostfixおよびCourierサーバーファイルをバックアップすると、大量の警告が表示されます。

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

rsyncCronから実行するときにこれらの警告を抑制するにはどうすればよい/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

回答:


6

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
...またはスナップショットでファイルシステムを使用します...ファイルが途中で消えるバックアップを復元することは問題ではないようです...重要でない場合は、そうです、はい、おそらく除外する必要があります...
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

まれな場合を除き、ライブバックアップ中に消失するファイルは完全に正常です(多くのアプリケーションは短命の一時ファイルを作成します)。これは、電子メールメッセージを含むファイルが1つのディレクトリから別のディレクトリに絶えず移動されるメールサーバーの場合に特に当てはまります。
MoonSweep

1
残念ながら、このオプションはrynscのすべてのバージョンに存在するわけではありません。特に、CentOS 6に
同梱されている3.0.6。

3
このオプションは、引数で指定されたファイルのみに影響し、再帰検索中に見つかったファイルは引き続き警告されます。
ジェイセン

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

確かに、それに応じて編集された投稿
ジルケノ

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フォルダーのコンテンツを除外します。

ファイルシステムが大文字と小文字を区別する場合は、これを考慮する必要がある場合があることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.