root@server1:/ - 원격 서버
/backup1/12/fullbackup - server1의 데이터가 포함된 로컬 백업 서버
먼저 원격 서버의 모든 데이터를 로컬 백업 서버(script1.sh)로 동기화합니다.
rsync -avrh -e "ssh -p 123456 -o StrictHostKeyChecking=no" \
--progress \
root@server1:/ /backup1/12/fullbackup/
둘째, 간단한 차등 백업 스크립트(script2.sh)를 만듭니다.
today=15
rsync -avrh -e "ssh -p 123456 -o StrictHostKeyChecking=no" \
--progress \
--link-dest=/backup1/12/fullbackup/
root@$ip:/ /backup1/12/backupday/$today/
디렉터리 12에서 첫 번째 스크립트(script1.sh)를 실행한 후:
# du -sh /backup1/12/*
8.0K /backup1/12/backupday
4.1G /backup1/12/fullbackup
두 번째 스크립트(script2.sh)를 실행한 후 모든 데이터가 전체 백업에서 backupday/15로 이동됩니다.
# du -sh /backup1/12/*
3.9G /backup1/12/backupday
386M /backup1/12/fullbackup
Today=15를 Today=16으로 이동하고 백업일에 두 번째 스크립트(script2.sh)를 다시 실행합니다.
# du -sh /backup1/12/backupday/*
4.1G /backup1/12/backupday/15
104M /backup1/12/backupday/16
script2.sh를 처음 실행할 때 모든 데이터가 backupday/15로 이동하고 두 번째, 세 번째 및 다음에 스크립트를 실행할 때 올바른 차등 백업이 생성되는 이유를 이해할 수 없습니다.
/backup1/12/fullbackup에 항상 전체 복사본이 있고 backupday/$today에 다른 복사본이 있도록 하려면 무엇을 변경해야 합니까?
답변1
당신이 보는 것은 인공물입니다 du
. 파일을 하드 링크할 때 du
두 번째 파일이 발견될 때 고려된 디스크 사용량을 기록해 두십시오. 예를 들어
$ mkdir a b
$ dd count=1000 </dev/zero >a/x
$ ln a/x b/x
$ du -s a b
500 a
0 b
$ du -s b a
500 b
0 a
첫 번째 디렉토리가 명백하게 사용되는 모든 공간을 어떻게 얻는지 확인할 수 있습니다.