rsync 경고 억제 : 일부 파일은 전송되기 전에 사라짐


15

실행중인 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

답변:


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 '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으로 재정의하는 것보다 확실히 더 낫습니다.
Monica Cellio의 Boycott SE

드문 경우를 제외하고 라이브 백업 중에 사라지는 파일은 완벽하게 정상입니다 (많은 응용 프로그램이 수명이 짧은 임시 파일을 만듭니다). 전자 메일 메시지가 포함 된 파일이 한 디렉터리에서 다른 디렉터리로 지속적으로 이동하는 메일 서버의 경우 특히 그렇습니다. 따라서 IMHO는이 대답이 OP에서 허용하는 것보다 더 적합합니다.
MoonSweep

1
불행히도이 옵션은 모든 버전의 rynsc에 존재하지 않습니다. 특히 CentOS 6과 함께 제공되는 3.0.6.
jph

3
이 옵션은 인수로 명명 된 파일에만 적용되며, 재귀 검색 중에 찾은 파일은 여전히 ​​경고를받습니다.
Jasen

6

오류는 rsync전송할 목록을 작성하는 동안 기존 파일을 더 이상 찾을 수 없음을 의미합니다 . 이러한 사라진 파일 오류는 파일이 처음에 발견되어 나중에 더 이상 존재하지 않을 때 발생합니다. 어떤 경우에는 소스 파일이 손상되었거나 이름에 유효하지 않은 문자가있는 경우에도 발생합니다 ( fsck권장).

기본적으로 이것은 오류가 아니라 경고이므로 각 대상 파일의 상태는 실행 중에 해당 소스 파일의 상태를 반영하므로 걱정할 필요가 없습니다.

종료 값으로 인해 문제점이 발생하는 경우 0이 아닌 경우 다음 랩퍼 스크립트 ( 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

물론, 글에 따라 편집 됨
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. "Cache"라는 이름의 모든 폴더와 그의 컨텐츠는 제외합니다.
  2. 모든 "cache2"라는 이름의 폴더의 내용을 제외하지만 폴더 계층 구조를 포함하므로 모든 하위 폴더를 비워야합니다.
  3. .lock으로 끝나는 모든 파일 (예 : Firefox 및 파생물의 잠금 파일)을 제외합니다.
  4. / temp 폴더의 내용을 제외합니다.

파일 시스템이 대소 문자에 따라 다를 경우이를 고려해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.