rsync: 업데이트된/새 파일을 다른 디렉토리에 복사

rsync: 업데이트된/새 파일을 다른 디렉토리에 복사

백업에 다음 구조를 사용하고 싶습니다

/source # the source directory which should be backed up

/backup/initial/... # the first initial copy/backup of the source
/backup/snapshots/YYYYmmDDHHmmss/... # (1)
/backup/changed/YYYYmmDDHHmmss/... # (2)

나는 (1)이 rsync의 "기본" 동작이라고 생각합니다. 원본 백업에 대한 하드 링크를 사용하여 스냅샷을 생성합니다. 나는 이것을 할 것이다rsync -avuP --link-dest=$initial_backup $directory_to_backup $destination

rsync -riv --ignore-existing "$directory_to_backup"/ "$last_backup"/ (2) rsync 출력을 얻습니다. rsync -riv --existing "$directory_to_backup"/ "$last_backup"/

changed하지만 이제 이 두 스크립트의 출력을 디렉터리 에 하드 링크하고 싶습니다 .

내 목표는 백업하려는 디렉터리와 changed새 파일과 수정된 파일만 포함하는 디렉터리의 전체 스냅샷을 만드는 것입니다. 너무 많은 공간을 차지하지 않도록 모든 것이 하드 링크되어 있습니다.

답변1

내가 올바르게 이해했다면 순서를 약간만 변경하면 됩니다. --compare-dest새 파일과 변경된 파일을 생성하는 디렉터리를 사용한 다음 두 개의 --link-dest매개 변수를 사용하여 이 변경된 디렉터리와 이전 스냅샷에 다시 연결할 수 있습니다. 다음은 테스트 스크립트 예시입니다.

cd /tmp/
rm -fr src backup
mkdir -p src/a/b backup
date >src/a/b/unchanged
date >src/a/b/c
rsync -a src/ backup/i
rsync -a --link-dest=../i/ src/ backup/s1
sleep 1
date >src/a/b/c
date >src/a/b/c2
rsync -av --compare-dest=../s1 src/ backup/ch
rsync -av --link-dest=../s1 --link-dest=../ch src/ backup/s2
ls -li backup/*/*/*/*

이것은 나에게 다음과 같은 결과를 제공합니다.

919 -rw-r--r-- 2  backup/i/a/b/c
920 -rw-r--r-- 3  backup/i/a/b/unchanged
919 -rw-r--r-- 2  backup/s1/a/b/c
920 -rw-r--r-- 3  backup/s1/a/b/unchanged
472 -rw-r--r-- 2  backup/ch/a/b/c
473 -rw-r--r-- 2  backup/ch/a/b/c2
472 -rw-r--r-- 2  backup/s2/a/b/c
473 -rw-r--r-- 2  backup/s2/a/b/c2
920 -rw-r--r-- 3  backup/s2/a/b/unchanged

여기서 디렉터리는 i초기 백업인 s1snapshot1, s2snapshot2 및 chsnapshot2에 해당하는 변경 사항입니다. 첫 번째 열은 inode 번호이고 세 번째 열은 하드 링크 수입니다. 이는 변경된 파일이 c에 하드 링크되고 ch, 새 파일이 c2에 하드 링크되고 ch, 변경되지 않은 파일이 에 하드 링크됨을 나타냅니다 s1.i

관련 정보