使用rsync进行Git样式的增量备份
我正在尝试在Ubuntu上设置备份脚本.每天我都想将本地源目录复制到使用日期唯一命名的远程服务器上的备份目录. (例如,backup-jan1 /,backup-jan2 /等)它应该存储最早状态的镜像并使用差异文件来重新创建新的备份点.
使用rsync非常简单.我已经设置了一个脚本来进行备份,使用当天命名备份目录,并为最新备份创建一个符号链接(已经编辑了IP): date=`date "+%m%d"` rsync -ave ssh /srv root@150.69.32.8:/backup/backup-$date/ ssh root@150.69.32.8 rm -rf /backup/current ssh root@150.69.32.8 ln -s backup-$date/ /backup/current 但是,这是一个棘手的部分:我不希望它复制没有改变的文件.因此,如果自上次每日备份以来任何文件发生了更改,它将像平常一样复制它们.否则,它会将未更改的先前备份文件从其第一个备份目录符号链接到新备份. (有点像git) 因此,例如,假设我开始备份Jan 1. backup-jan1 /目录将包含所有原始备份文件.第二天,1月2日备份应该只复制24小时内更改的文件.对于所有其他文件,它将从Jan 1备份文件中创建符号链接. 1月3日,我添加了一个文件并删除了另一个文件.如果删除了文件,则不应继续进行符号链接. 示例目录/文件结构: backup-jan1/ (initial backup) file_a file_b backup-jan2/ (no changes) file_a (symlink to ../backup-jan1/file_a) file_b (symlink to ../backup-jan1/file_b) backup-jan3/ (removed file_a symlink and added file_c) file_b (symlink to ../backup-jan1/file_b) file_c ... 我试图在rsync和rsnapshot中寻找这种版本控制类型的功能,但我还没有找到它.任何人都可以建议像这样的备份策略吗? 解决方法
您似乎正在寻找的是–link-dest功能,它是rsync的一部分.你似乎描述的是
dirvish的运作方式.
link-dest选项创建从目标路径到结构的另一个副本的硬链接. 使用dirvish执行初始备份,只使用rsync. 之后,每个额外的后退都与之前的成功备份硬链接.意思是没有重复的文件.您可以直接从Vault中访问任何单个备份,每个备份都是完整的备份.您可以随时删除以前的备份. 这是一个可用于演示的脚本. # create test area mkdir -p /tmp/backuptest/{source,dest1,dest2,dest3} for a in `seq 10` ; do dd if=/dev/urandom of=/tmp/backuptest/source/file$a bs=1M count=1; done # look find /tmp/backuptest/ -ls ; du find /tmp/backuptest/ # initial backup rsync -va /tmp/backuptest/source/ /tmp/backuptest/dest1/ # look find /tmp/backuptest/ -ls ; du find /tmp/backuptest/ # make chagnes rm /tmp/backuptest/source/file[2-4] cat /tmp/backuptest/source/file[6-7] >/tmp/backuptest/source/file11 # new backup linked to previous rsync -va /tmp/backuptest/source/ /tmp/backuptest/dest2/ --link-dest=/tmp/backuptest/dest1/ # look find /tmp/backuptest/ -ls ; du find /tmp/backuptest/ # make changes rm /tmp/backuptest/source/file5 cat /tmp/backuptest/source/file[5-7] >/tmp/backuptest/source/file12 # new backup linked to previous rsync -va /tmp/backuptest/source/ /tmp/backuptest/dest3/ --link-dest=/tmp/backuptest/dest2/ # look find /tmp/backuptest/ -ls ; du find /tmp/backuptest/ # remove dest1 rm -r /tmp/backuptest/dest1/ # see your dest2,and dest3 are still complete backups for the state at those times. find /tmp/backuptest/ -ls ; du find /tmp/backuptest/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux-kernel – 如何访问struct sk_buff成员?
- Linux:如何调试SIGSEGV?如何跟踪错误源?
- [APUE]系统数据文件与信息
- linux /etc/profile bashrc bash_profile
- Linux启动过程
- 在ABI的NDK工具链文件夹中找不到工具链,前缀为:mips64el-l
- linux – 惠普智能阵列;如何安全地从阵列中删除带有SMART预
- linux – GRUB stage 1.5的代码驻留在磁盘上的位置是什么
- c# – Linux上的ClientWebSocket抛出AuthenticationExcept
- linux – 系统交换……我怎么弄清楚问题是什么