rsync 로그에서 f +++++++++는 무엇을 의미합니까?


116

rsync내 서버 파일의 백업을 만드는 데 사용 하고 있는데 두 가지 질문이 있습니다.

  1. 프로세스 중간에 중지하고 rsync다시 시작 해야합니다.
    rsync이 중지하거나 처음부터 다시 시작한다는 점에서 시작?

  2. 로그 파일에서 나는 "f+++++++++". 무슨 뜻인가요?

예 :

2010/12/21 08:28:37 [4537] >f.st...... iddd/logs/website-production-access_log
2010/12/21 08:29:11 [4537] >f.st...... iddd/web/website/production/shared/log/production.log
2010/12/21 08:29:14 [4537] .d..t...... iddd/web/website/production/shared/sessions/
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.017a771cc19b18cd
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.01eade9d317ca79a

답변:


196

rsync가 작동하는 방식을 살펴보고 숨겨진 결과 라인을 더 잘 이해해 보겠습니다.

1-rsync의 큰 장점은 중단 후에도 다음 번에 원활하게 계속된다는 것입니다.

다음 rsync 호출은 그 동안 변경되지 않은 경우 이미 전송 된 파일을 다시 전송하지 않습니다. 그러나 중단되었음을 알지 못하기 때문에 처음부터 모든 파일을 다시 확인하기 시작합니다.

2-각 문자는에 대한 섹션을 읽으면 번역 할 수있는 코드입니다 -i, --itemize-changes.man rsync

질문에서 예제 로그 파일을 디코딩합니다.

> f.st ......

> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different

.d..t ......

. - the item is not being updated (though it might have attributes 
    that are being modified)
d - it is a directory
t - the time stamp is different

> f +++++++++

> - the item is received
f - a regular file
+++++++++ - this is a newly created item

rsync 매뉴얼 페이지의 관련 부분 :

-i, --itemize-changes

속성 변경을 포함하여 각 파일에 적용되는 변경 사항의 간단한 항목 별 목록을 요청합니다. 이것은 --out-format = '% i % n % L'을 지정하는 것과 정확히 동일합니다. 옵션을 반복하면 변경되지 않은 파일도 출력되지만 수신 rsync가 버전 2.6.7 이상인 경우에만 (이전 버전의 rsync에서 -vv를 사용할 수 있지만 다른 자세한 메시지의 출력도 켜집니다. 현자).

"% i"이스케이프에는 11 자 길이의 암호화 된 출력이 있습니다. 일반 형식은 YXcstpoguax 문자열과 유사합니다. 여기서 Y는 수행중인 업데이트 유형으로 대체되고, X는 파일 유형으로 대체되며, 다른 문자는 수정중인 경우 출력 될 수있는 속성을 나타냅니다.

Y를 대체하는 업데이트 유형은 다음과 같습니다.

  • A <는 파일이 원격 호스트로 전송 (전송)되고 있음을 의미합니다.
  • A >는 파일이 로컬 호스트로 전송 (수신 됨)됨을 의미합니다.
  • A c는 항목에 대해 로컬 변경 / 생성이 발생하고 있음을 의미합니다 (예 : 디렉토리 생성 또는 심볼릭 링크 변경 등).
  • A h는 항목이 다른 항목에 대한 하드 링크임을 의미합니다 (--hard-links 필요).
  • A .는 항목이 업데이트되고 있지 않음을 의미합니다 (수정중인 속성이있을 수 있음).
  • A *는 나머지 항목 별 출력 영역에 메시지 (예 : "삭제")가 포함되어 있음을 의미합니다.

X를 대체하는 파일 유형 f은 파일 d용, 디렉토리 L용, 심볼릭 링크 D용, 장치 S용 및 특수 파일 용 (예 : 명명 된 소켓 및 fifo)입니다.

위 문자열의 다른 문자는 항목의 관련 속성이 업데이트되는 경우 출력되는 실제 문자 또는 "."입니다. 변화가 없습니다. 이에 대한 세 가지 예외는 (1) 새로 생성 된 항목이 각 문자를 "+"로 대체하고, (2) 동일한 항목이 점을 공백으로 대체하고, (3) 알 수없는 속성이 각 문자를 "?"로 대체하는 것입니다. (이전 rsync와 대화 할 때 발생할 수 있습니다.)

각 문자와 연관된 속성은 다음과 같습니다.

  • A c는 일반 파일에 다른 체크섬이 있거나 (--checksum 필요) 심볼릭 링크, 장치 또는 특수 파일에 변경된 값이 있음을 의미합니다. 3.0.1 이전의 rsync로 파일을 보내는 경우이 변경 플래그는 체크섬이 다른 일반 파일에 대해서만 표시됩니다.
  • A s는 일반 파일의 크기가 다르며 파일 전송에 의해 업데이트됨을 의미합니다.
  • A t는 수정 시간이 다르며 보낸 사람의 값으로 업데이트 중임을 의미합니다 (--times 필요). 대체 값 T는 수정 시간이 전송 시간으로 설정된다는 것을 의미합니다. 이는 파일 / 심볼 링크 / 장치가 --times없이 업데이트되고 심볼릭 링크가 변경되고 수신자가 시간을 설정할 수 없을 때 발생합니다. (참고 : rsync 3.0.0 클라이언트를 사용할 때이 시간 설정 실패에 대해 적절한 T 플래그 대신 t와 결합 된 s 플래그를 볼 수 있습니다.)
  • A p는 권한이 다르며 보낸 사람의 값으로 업데이트 중임을 의미합니다 (--perms 필요).
  • o수단의 소유자가 다른과 보낸 사람의 값으로 갱신되고있다 (--owner 필요하고 슈퍼 유저 권한).
  • A g는 그룹이 다르며 보낸 사람의 값으로 업데이트 중임을 의미합니다 (그룹을 설정하려면 --group 및 권한이 필요함).
  • u슬롯은 향후 사용을 위해 예약되어 있습니다.
  • a수단은 그 ACL 정보가 변경.
  • x확장 속성 정보 변경 수단을 포함한다.

한 가지 다른 출력이 가능합니다. 파일을 삭제할 때 "% i"는 제거되는 각 항목에 대해 "* deleting"문자열을 출력합니다 (사용자가 삭제를 다음과 같이 출력하는 대신 기록 할만큼 최근의 rsync와 통신한다고 가정하면 자세한 메시지).


이 게시물 / 답변은 현재 매우 오래되었지만 이에 대한 의견을 작성해야했습니다. 내가 rsync에 대해 본 최고의 답변 중 하나입니다. 감사합니다 mit
Jorge

101

얼마 rsync전 내가 작성중인 스크립트 의 출력 을 이해해야 했습니다. 그 스크립트를 작성하는 동안 나는 주위를 둘러 보았고 @mit가 위에 쓴 것에 이르렀다 . 이 정보와 다른 소스의 문서를 사용하여 비트 플래그에 대한 나만의 입문서를 만들고 rsync모든 작업에 대해 비트 플래그를 출력 하는 방법을 만들었습니다 (기본적으로이 작업은 수행하지 않음).

이 정보가 검색을 통해이 페이지에서 우연히 발견되고 더 나은 설명이 필요한 다른 사람들에게 도움이되기를 바라며 여기에 해당 정보를 게시하고 있습니다 rsync.

의 조합으로 --itemize-changes플래그 -vvv 플래그, rsync우리에게 대상 디렉토리에 비해 소스 디렉토리에서 발견 된 모든 파일 시스템 변경 사항의 자세한 출력을 제공합니다. rsync그런 다음에서 생성 된 비트 플래그를 디코딩하여 변경된 내용을 확인할 수 있습니다. 각 비트의 의미를 디코딩하려면 다음 표를 사용하십시오.

rsync의 출력 에서 각 비트 위치 및 값에 대한 설명 :

YXcstpoguax  path/to/file
|||||||||||
||||||||||╰- x: The extended attribute information changed
|||||||||╰-- a: The ACL information changed
||||||||╰--- u: The u slot is reserved for future use
|||||||╰---- g: Group is different
||||||╰----- o: Owner is different
|||||╰------ p: Permission are different
||||╰------- t: Modification time is different
|||╰-------- s: Size is different
||╰--------- c: Different checksum (for regular files), or
||              changed value (for symlinks, devices, and special files)
|╰---------- the file type:
|            f: for a file,
|            d: for a directory,
|            L: for a symlink,
|            D: for a device,
|            S: for a special file (e.g. named sockets and fifos)
╰----------- the type of update being done::
             <: file is being transferred to the remote host (sent)
             >: file is being transferred to the local host (received)
             c: local change/creation for the item, such as:
                - the creation of a directory
                - the changing of a symlink,
                - etc.
             h: the item is a hard link to another item (requires 
                --hard-links).
             .: the item is not being updated (though it might have
                attributes that are being modified)
             *: means that the rest of the itemized-output area contains
                a message (e.g. "deleting")

다양한 시나리오에 대한 rsync의 출력 예 :

>f+++++++++ some/dir/new-file.txt
.f....og..x some/dir/existing-file-with-changed-owner-and-group.txt
.f........x some/dir/existing-file-with-changed-unnamed-attribute.txt
>f...p....x some/dir/existing-file-with-changed-permissions.txt
>f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt
>f.s......x some/dir/existing-file-with-changed-size.txt
>f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt 
cd+++++++++ some/dir/new-directory/
.d....og... some/dir/existing-directory-with-changed-owner-and-group/
.d..t...... some/dir/existing-directory-with-different-time-stamp/

rsync의 출력 캡처 (비트 플래그에 중점) :

내 실험에서 모두 --itemize-changes플래그 -vvv 플래그는 얻을하는 데 필요한 rsync출력에 대한 항목 모든 파일 시스템 변경. 삼중 상세 표시 ( -vvv) 플래그가 없으면 디렉토리, 링크 및 장치 변경 사항이 나열되지 않았습니다. rsync 버전을 실험하여 예상 한 모든 내용을 관찰하고 기록하는지 확인하는 것이 좋습니다.

이 기술의 편리한 사용 중 하나 --dry-run는 명령에 플래그 를 추가하고 rsync에 의해 결정된 변경 목록을 변수에 수집하여 (변경하지 않고) 목록에서 직접 처리 할 수 ​​있도록하는 것입니다. 다음과 같은 것은 변수의 출력을 캡처합니다.

file_system_changes=$(rsync --archive --acls --xattrs \
    --checksum --dry-run \
    --itemize-changes -vvv \
    "/some/source-path/" \
    "/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')

위의 예에서 (stdout) 출력은 (stdin을 통해)로 rsync리디렉션 grep되므로 비트 플래그가 포함 된 라인 만 분리 할 수 ​​있습니다.

캡처 된 출력 처리 :

그런 다음 나중에 사용하기 위해 변수의 내용을 기록하거나 관심 항목에 대해 즉시 반복 할 수 있습니다. 에 대해 자세히 조사하는 동안 작성한 스크립트에서이 정확한 전술을 사용합니다 rsync. 새 파일, 중복 파일 (동일한 이름, 동일한 내용), 파일 충돌 (동일한 이름, 다름)을 분리하기 위해 캡처 된 출력을 사후 처리하는 예제 는 스크립트 ( https://github.com/jmmitchell/movestough )를 참조하십시오. 내용) 및 하위 디렉토리 구조의 변경 사항.


1
굉장히 유용하다! 로그 출력에서 ​​-T는 무엇입니까?
Pol Hallen

Pol, rsync에 대한-T 플래그에 대해 물어 보십니까?
존 마크 미첼

Pol, 귀하의 질문을 올바르게 이해하면 rsync 로그의 t는 비교 된 두 파일이 다른 타임 스탬프를 가지고 있음을 의미합니다. 다른 시간에 생성되거나 수정되었음을 의미합니다.
John Mark Mitchell

3
출력의 "T"는 시간이 현재 시간 "<f..T ...... Rise.mp3"로 업데이트되었음을 ​​의미한다고 생각합니다. 적어도 이것은 내가 관찰하고있는 것입니다. "t"는 로컬 파일의 시간입니다.
C. Kelly

1
몇 년 늦었지만 "t"대 "T"는 man 페이지에 설명되어 있습니다. A t는 수정 시간이 다르며 보낸 사람의 값으로 업데이트되고 있음을 의미합니다 (--times 필요). 대체 값 T는 수정 시간이 전송 시간으로 설정된다는 것을 의미합니다. 이는 파일 / 심볼 링크 / 장치가 --times없이 업데이트되고 심볼릭 링크가 변경되고 수신자가 시간을 설정할 수 없을 때 발생합니다. (참고 : rsync 3.0.0 클라이언트를 사용하는 경우이 시간 설정 실패에 대해 적절한 T 플래그 대신 t와 결합 된 s 플래그를 볼 수 있습니다.)
user187557

2

1) Wodin, 그것은 전적으로 사실이 아닙니다. --partial 또는 -P 태그를 사용하는 경우 (--partial --progress와 동일) rsync는 중단 된 전송을 재개합니다.

2) 정확합니다. --itemize-changes 태그의 일반적인 출력입니다.


2

1.) "동기화를 다시 시작"하지만 동일한 크기와 타임 스탬프 등의 파일은 전송하지 않습니다. 먼저 전송할 파일 목록을 작성하고이 단계에서 이미 일부 파일을 전송 한 것을 확인할 수 있습니다. 건너 뜁니다. 타임 스탬프 등을 보존하도록 rsync에 지시해야합니다 (예 : 사용 rsync -a ...).

rsync에 파일을 전송하는 동안, 그것은처럼 뭔가를 호출 .filename.XYZABC하는 대신 filename. 그런 다음 해당 파일 전송이 완료되면 이름이 바뀝니다. 따라서 큰 파일을 전송하는 동안 rsync를 종료하면 처음부터 시작하는 대신 --partial 옵션을 사용하여 전송을 계속해야합니다.

2.) 그게 뭔지 모르겠어요. 몇 가지 예를 붙여 넣을 수 있습니까?

편집 : http://ubuntuforums.org/showthread.php?t=1342171에 따라 해당 코드는 -i, --itemize-changes옵션 섹션의 rsync man 페이지에 정의되어 있습니다.

Joao의 답변을 기반으로 한 경우 고정 부분


위에 몇 가지 로그 예제를 넣었습니다. 감사.
GodFather

내 답변을 업데이트했습니다. 코드는 man 페이지에 설명되어 있습니다.
Wodin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.