소유권 변경이 실패하면 Rsync가 타임스탬프를 유지하지 않습니다.

소유권 변경이 실패하면 Rsync가 타임스탬프를 유지하지 않습니다.

타임스탬프를 유지하면서 데이터를 NFS 공유에 동기화하려고 합니다.

원본 파일:

-rw-rw-r-- 1 simon simon 1554756 Apr 18  2017 IMG_0578-Bearbeitet.jpg

사용되는 rsync 옵션은 -avh --progress.

복사할 때 다음과 같은 경고가 표시됩니다.

rsync: chgrp "/media/simon/.../.IMG_0578-Bearbeitet.jpg.dXOTKi" failed: Operation not permitted (1)

작업 후 파일 메타데이터는 다음과 같습니다.

-rw------- 1 www-data www-data 1554756 Dez  6 00:59 IMG_0578-Bearbeitet.jpg

NFS 드라이브가 마운트되어 사용자와 그룹이 항상 www-data로 설정되어 있기 때문에 오류가 발생한 것으로 생각됩니다 chgrp(nfs 공유에 대한 옵션은 입니다 (rw,sync,all_squash,anonuid=33,anongid=33,no_subtree_check)).

지금 기분이 이상해요

  1. 소유자에 대한 오류 메시지도 없으며 변경할 수 없습니다.
  2. 부작용으로 시간도 보존되지 않는다

-grsync 옵션에서 -rlptoDvh --progress( -a제외한 모든 항목 )을 생략하면 -g오류가 발생하지 않으며 결과는 다음과 같습니다.

-rw-rw-r-- 1 www-data www-data 1554756 Apr 18  2017 IMG_0578-Bearbeitet.jpg

이것이 바로 내가 원하는 것입니다.

나에게 예상치 못한 이 두 가지 행동을 어떻게 설명할 수 있을까요?

그런데 -o이를 생략하면 결과가 나오지 않으며 결과적으로 full 과 동일한 동작이 발생합니다 -a.

답변1

이 태그를 실행하고 있습니다.rsync.c:

if (am_root >= 0) {
        uid_t uid = change_uid ? (uid_t)F_OWNER(file) : sxp->st.st_uid;
        gid_t gid = change_gid ? (gid_t)F_GROUP(file) : sxp->st.st_gid;
        if (do_lchown(fname, uid, gid) != 0) {
                /* We shouldn't have attempted to change uid
                 * or gid unless have the privilege. */
                rsyserr(FERROR_XFER, errno, "%s %s failed",
                    change_uid ? "chown" : "chgrp",
                    full_fname(fname));
                goto cleanup;
        }

이 코드에서 볼 수 있듯이 코드는 대상 파일의 소유자와 그룹을 설정하려고 시도하며 파일 소유권을 수정할 수 없는 경우 나머지 기능을 건너뜁니다( goto cleanup;). 이 함수의 건너뛰기 비트 처리는 확장된 속성, 타임스탬프, ACL 및 기타 메타데이터를 설정합니다.

다른 데이터 설정에 실패할 때 유사한 건너뛰기가 수행됩니다(타임스탬프 설정에 실패하면 파일 권한 설정을 건너뜁니다).

설정에 대해 불평하는 이유는 무엇입니까?그룹chown코드의 if가 0이 아닌 것에 대해 불평해야 하기 때문에 소유자가 아니라 완전히 확신할 수 없습니다 change_uid.

관련 정보