소스 트리에 마운트 지점이 있을 때 파일의 타임스탬프를 보존하도록 rsync에 지시하는 방법

소스 트리에 마운트 지점이 있을 때 파일의 타임스탬프를 보존하도록 rsync에 지시하는 방법

이와 관련질문

문제에 대한 간단한 설명:

소스 트리 내부에 마운트 지점이 있는 경우 -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도 변경됩니다.

c-timeOP는 파일을 새 파일 시스템으로 가져올 때 파일을 보관할 수 없습니다. 새 파일 시스템에서 이러한 파일을 생성하는 것은 위에 나열된 조건 중 하나입니다(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하고 그것이 내 수정 시간을 보존한다고 확신합니다. 지금 다시 확인해 봤습니다.

관련 정보