使用rsync进行Git样式的增量备份

使用rsync进行Git样式的增量备份,第1张

概述我正在尝试在Ubuntu上设置备份脚本.每天我都想将本地源目录复制到使用日期唯一命名的远程服务器上的备份目录. (例如,backup-jan1 /,backup-jan2 /等)它应该存储最早状态的镜像并使用差异文件来重新创建新的备份点. 使用rsync非常简单.我已经设置了一个脚本来进行备份,使用当天命名备份目录,并为最新备份创建一个符号链接(已经编辑了IP): date=`date "+%m% 我正在尝试在Ubuntu上设置备份脚本.每天我都想将本地源目录复制到使用日期唯一命名的远程服务器上的备份目录. (例如,backup-jan1 /,backup-jan2 /等)它应该存储最早状态的镜像并使用差异文件来重新创建新的备份点.

使用rsync非常简单.我已经设置了一个脚本来进行备份,使用当天命名备份目录,并为最新备份创建一个符号链接(已经编辑了IP):

date=`date "+%m%d"`rsync -ave ssh /srv [email protected]:/backup/backup-$date/ssh [email protected] rm -rf /backup/currentssh [email protected] 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_bbackup-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 areamkdir -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# lookfind /tmp/backuptest/ -ls ; du find /tmp/backuptest/# initial backuprsync -va /tmp/backuptest/source/ /tmp/backuptest/dest1/# lookfind /tmp/backuptest/ -ls ; du find /tmp/backuptest/# make chagnesrm /tmp/backuptest/source/file[2-4]cat /tmp/backuptest/source/file[6-7] >/tmp/backuptest/source/file11# new backup linked to prevIoUsrsync -va /tmp/backuptest/source/ /tmp/backuptest/dest2/ --link-dest=/tmp/backuptest/dest1/# lookfind /tmp/backuptest/ -ls ; du find /tmp/backuptest/# make changesrm /tmp/backuptest/source/file5cat /tmp/backuptest/source/file[5-7] >/tmp/backuptest/source/file12# new backup linked to prevIoUsrsync -va /tmp/backuptest/source/ /tmp/backuptest/dest3/ --link-dest=/tmp/backuptest/dest2/# lookfind /tmp/backuptest/ -ls ; du find /tmp/backuptest/# remove dest1rm -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/
总结

以上是内存溢出为你收集整理的使用rsync进行Git样式增量备份全部内容,希望文章能够帮你解决使用rsync进行Git样式的增量备份所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1034002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存