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

前端之家收集整理的这篇文章主要介绍了使用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/
原文链接:https://www.f2er.com/linux/395551.html

猜你在找的Linux相关文章