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) 后,所有数据从 fullbackup 移动到 backupday/15
# du -sh /backup1/12/*
3.9G /backup1/12/backupday
386M /backup1/12/fullbackup
将 Today=15 移至 Today=16 并在 backupday 中再次运行第二个脚本 (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
您会看到第一个目录如何获取所有显然已使用的空间。