타임스탬프를 유지하면서 데이터를 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)
).
지금 기분이 이상해요
- 소유자에 대한 오류 메시지도 없으며 변경할 수 없습니다.
- 부작용으로 시간도 보존되지 않는다
-g
rsync 옵션에서 -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
.