백업에 다음 구조를 사용하고 싶습니다
/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
초기 백업인 s1
snapshot1, s2
snapshot2 및 ch
snapshot2에 해당하는 변경 사항입니다. 첫 번째 열은 inode 번호이고 세 번째 열은 하드 링크 수입니다. 이는 변경된 파일이 c
에 하드 링크되고 ch
, 새 파일이 c2
에 하드 링크되고 ch
, 변경되지 않은 파일이 에 하드 링크됨을 나타냅니다 s1
.i