이와 관련질문
문제에 대한 간단한 설명:
소스 트리 내부에 마운트 지점이 있는 경우 -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
답변1
에서 man rsync
:
-t, --times preserve modification times
한 파일 시스템에서 다른 파일 시스템으로 파일을 복사하고 이를 보존하려고 하기 때문에 c-time
대부분의 사람들은 c-time
"생성 시간"을 이해하지만 대부분의 UNIX/Linux 시스템에서는 올바르지 않습니다(Windows 파일 시스템은 "생성" 또는 "생성" 시간을 추적합니다).
대부분의 경우 UNIX 및 Linux에서는 c-time
타임스탬프를 사용하여 마지막 inode를 기록합니다.씨'걸어. inode의 속성 중 하나라도 업데이트되면 inode도 변경됩니다.
- 생성(OP의 경우)
- 모드(권한)
- 소유자/그룹
- 하드 링크 수
- 잠깐(stat() 시스템 호출)
c-time
OP는 파일을 새 파일 시스템으로 가져올 때 파일을 보관할 수 없습니다. 새 파일 시스템에서 이러한 파일을 생성하는 것은 위에 나열된 조건 중 하나입니다(inode/파일 생성).
답변2
hr3miller가 이미 말했듯이 -a (또는 --archive)는 -rlptgoD와 동일하며 이미 동기화 시간을 포함합니다.
그러나 rsync가 데이터를 예를 들어 복사할 때 rsync는 NFS/FAT32/NTFS 마운트가 사용자 및 소유자를 보존하지 못하는 시간을 설정하려고 시도하지 않습니다. 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)에 대한 매뉴얼 페이지를 주의 깊게 읽어야 합니다.
답변3
이 touch
도구를 사용하여 이를 달성할 수 있습니다. 이 -r
매개변수는 한 파일/폴더에서 다른 파일/폴더로 타임스탬프를 복사합니다.
cd srcParentDir
find srcDir -exec touch -r {} /target/dir/{} \;
또는 예를 들어:
cd /home/me
find . -exec touch -r {} /home/BACKUP/{} \;
다음 명령문을 실행합니다.
touch -r ./data/a.txt /home/BACKUP/./data/a.txt
touch -r ./foo.txt /home/BACKUP/./foo.txt
touch -r ./boo.txt /home/BACKUP/./boo.txt
따라서 기본적으로 이전 타임스탬프를 새 파일 시스템에 복사합니다.
대상 경로에 공백이 있으면 이스케이프해야 합니다 /home/my\ spaced\ path/
. {}
100% 확신할 수는 없지만 그것이 당신에게 도움이 될 것이라고 생각합니다 .
답변4
나는 그것을 사용 rsync -az
하고 그것이 내 수정 시간을 보존한다고 확신합니다. 지금 다시 확인해 봤습니다.