it-swarm.dev

rsync-rsync 로그에서 f +++++++++의 의미는 무엇입니까?

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
92
GodFather

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를 대체하는 업데이트 유형은 다음과 같습니다.

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

X를 대체하는 파일 유형은 다음과 같습니다. 파일의 경우 f, 디렉토리의 경우 d, 심볼릭 링크의 경우 L, D 장치 및 특수 파일 (예 : 소켓 및 fifo)의 S.

위 문자열의 다른 문자는 항목의 관련 속성이 업데이트되거나 "."인 경우 출력되는 실제 문자입니다. 변화가 없습니다. (1) 새로 만든 항목은 각 문자를 "+"로 바꾸고, (2) 동일한 항목은 점을 공백으로 바꾸고, (3) 알 수없는 속성은 각 문자를 "?"로 바꿉니다. (이것은 오래된 rsync와 대화 할 때 발생할 수 있습니다).

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

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

다른 출력도 가능합니다. 파일을 삭제할 때 "% i"는 제거 할 각 항목에 대해 "* deleting"문자열을 출력합니다. 자세한 메시지).

162
mit

얼마 전에 필자는 작성중인 스크립트의 rsync 출력을 이해해야했습니다. 그 스크립트를 작성하는 과정에서 나는 구글을 둘러보고 @mit이 above 라고 쓴 것을 찾아 냈다. 이 정보와 다른 소스의 문서를 사용하여 비트 플래그에 대한 내 입문서를 만들고 모든 동작에 대해 비트 플래그를 출력하도록 rsync를 얻는 방법 (기본적으로 수행하지 않음).

본인은이 정보가 검색을 통해이 페이지에서 우연히 발견되어 rsync에 대한 자세한 설명이 필요한 다른 사람들을 돕기를 희망하여 여기에 게시하고 있습니다.

--itemize-changes 플래그 and-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 플래그 and-vvv 플래그는 rsyncall 파일 시스템 변경에 대한 항목을 출력하는 데 필요합니다. 삼중 verbose없이 (-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|\*).......... .')

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

캡처 된 출력 처리 :

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

77
John Mark Mitchell

1) Wodin, 그건 사실이 아닙니다. --partial 또는 -P 태그 (--partial --progress와 동일)를 사용하면 rsync가 중단 된 전송을 재개합니다.

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

2
Joao Figueiredo

1.) "동기화를 다시 시작"하지만 크기 및 타임 스탬프 등이 같은 파일은 전송하지 않습니다. 먼저 전송할 파일 목록을 작성합니다.이 단계에서 일부 파일이 이미 전송 된 것을 확인할 수 있습니다. 그들을 건너 뛸 것입니다. 타임 스탬프 등을 유지하도록 rsync에 알려야합니다 (예 : rsync -a ... 사용)

Rsync가 파일을 전송하는 동안 filename 대신 .filename.XYZABC와 같이 호출합니다. 그런 다음 해당 파일 전송이 끝나면 파일 이름이 바뀝니다. 따라서 큰 파일을 전송하는 동안 rsync를 종료하면 처음부터 시작하지 않고 --partial 옵션을 사용하여 전송을 계속해야합니다.

2.) 나는 그것이 무엇인지 모른다. 몇 가지 예를 붙여 넣을 수 있습니까?

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

내 답변이 Joao 's를 기반으로하는 경우 고정 부분

1
Wodin