소스 트리에 마운트 포인트가있을 때 파일에 타임 스탬프를 유지하도록 rsync에 지시하는 방법


41

질문과 관련

문제에 대한 간단한 설명 :

소스 트리에 마운트 포인트가 있으면 -a옵션을 사용할 때도 대상 트리에 복사 될 때 해당 마운트 포인트 내의 파일에 대한 타임 스탬프가 유지되지 않습니다

상세 설명:

이것이 소스 트리라고 가정하십시오.

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt

여기서 data/위에 외부 USB 디스크 마운트. 모든 것이 ext4파일 시스템입니다. 소스의 모든 것은 내 소유 me입니다.

BACKUP 또한 백업 USB 디스크 인 마운트 지점이되었습니다.

이 명령을 실행 한 후 파일의 타임 스탬프가 아니라 현재 파일이 생성 된 것처럼 현재 타임 스탬프가 아래에 rsync -av --delete /home/me/ /home/BACKUP/있음을 알았 /home/BACKUP/data/습니다 /home/me/data/. 외부의 다른 파일과 폴더 data에는 타임 스탬프가 유지되었습니다.

질문 : rsync위의 설정에서 마운트 포인트의 파일 및 폴더에서도 모든 파일 및 폴더의 타임 스탬프를 유지 하도록 사용하는 방법은 무엇입니까?

나는 사용하고있다 :

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30

답변:


45

부터 man rsync:

   -t, --times                 preserve modification times

편집-OP가 도움이되지 않은 이유가 즉시 명확하지 않기 때문에이 답변을 개선하려면 다음을 수행하십시오.

OP는 한 파일 시스템에서 다른 파일 시스템으로 파일을 복사하고 보존하려고합니다 c-time. 대부분의 사람들 c-time은 대부분의 UNIX / Linux 시스템 (Windows 파일 시스템은 "생성"또는 "출생"시간을 추적)에서 올바르지 않은 "생성 시간"을 의미하는 것으로 이해 합니다.

대부분의 경우, UNIX 및 Linux c-time에서 마지막 inode ' C ' 를 기록하는 데 사용되는 시간 소인 입니다. 속성이 업데이트되면 inode가 변경됩니다.

OP는 c-time파일을 새 파일 시스템으로 가져올 때 파일을 보존 할 수 없습니다 . 새 파일 시스템에서 이러한 파일을 작성하는 것은 위에 나열된 조건 중 하나입니다 (inode / file 작성).

/편집하다


9
감사합니다. 나도 알아 그러나 질문을주의 깊게 다시 읽으십시오. 내가 사용했던 -a: 말한다 archive mode; equals -rlptgoD 그에 -t이미 포함되어 있습니다.
Nasser

1
당신은 변화 시간을 보존하려고 노력하고 있습니까? ctime은 (상태) 변경을위한 "만들어진"것이 아닙니다
h3rrmiller

1
마운트 된 디스크에없는 파일에서와 마찬가지로 작동하고 싶습니다. 즉 ls -l, 파일에서 수행 할 때 표시되는 것과 동일한 타임 스탬프를 유지 하십시오. 마운트 지점에없는 파일에서 작동합니다. 그러나 마운트 지점에있는 모든 파일에는 파일이 생성되었음을 나타내는 타임 스탬프가 있습니다. 이번에 뭐라고 부르든 소스의 파일에서 동일한 타임 스탬프를 사용하고 싶었습니다. 이제는 그렇지 않습니다. 모든 시간 측면을 복사하고 싶습니다. 즉, 파일의 복제본이 만들어집니다. 생성 시간, 변경 시간 등
Nasser

4
inode가 변경되면 변경 시간 (ctime)이 업데이트됩니다 (예 : 생성 / 권한 변경 / 이동 등). 파일 시스템 (별도의 inode 테이블에 대해 파일을 복사하기 때문에)이 ctime이 업데이트되기 때문에 새로운 inode를 작성하기 때문입니다. en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller

3
ls -l쇼하지 ctime이 (수정) MTIME
h3rrmiller

6

hr3miller가 이미 말했듯이 -a (또는 --archive)는 -rlptgoD와 같으며 이미 동기화 시간이 포함되어 있습니다.

그러나 rsync가 예를 들어 사용자 및 소유자 유지에 실패한 NFS / FAT32 / NTFS 마운트에서 rsync는 시간을 설정하지 않습니다. Rsync는 다음과 같이 경고합니다

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)

따라서 다음을 사용하여 사용자 및 그룹을 보존하지 마십시오.

-rlptD

대신에

-rlptgoD

소유자와 그룹을 보존하지 않는 경우에만이 옵션을 사용하십시오. 심볼릭 링크 및 기타 기능을 유지하면 해당 동작이 트리거 될 수 있습니다. 백업하려는 모든 rsync 기능 (-r -l -p -t -g -o -D)에 대한 매뉴얼 페이지를 거쳐야합니다.


-2

나는 rsync -az그것이 수정 시간을 보존한다는 것을 사용 하고 확신합니다. 나는 지금 그것을 다시 확인했다.


2
-a( --archive)에 포함되어 있기 때문 -t입니다.
heemayl

그러나, ctime은 임의로 재설정 할 수 없습니다. (나는 원래 질문을 오해했다, 미안하다.)
Mik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.