2012-05-21 81 views
9

我想将rsnapshot使用的备份目录镜像到第二个位置以获得更高的安全性。理想的解决方案是使用rsync和ssh。我需要为rsync提供哪些参数来保留硬链接(由rsnapshot创建)和符号链接,删除文件,递归复制,删除目标中的文件等?这些文件都在ext3文件系统上。此外,我可以做些什么来避免这样的可能性,即如果源已损坏,那么这些缺陷会反射到镜像上?镜像rsnapshot备份目录

+0

我发现有一个脚本调用rsnapshot拷贝,其旨在用于初始同步:[rsnapshot拷贝](http://cpansearch.perl.org/src/DCANTRELL/App-Rsnapshot-1.999_00002/utils的/ rsnapshot拷贝)。在这个文件的头文件中,它指出:'rsnapshot-copy当前不适用于增量镜像快照 root(尽管未来可能会增加增量模式)。“任何想法如何支持? – highsciguy

+0

另一个想法是使用rsnapshot日志文件(可能首先相应地修改内部日志记录例程)来创建一个shell脚本,该脚本执行完全相同的mv和rsync操作,rsync在主备份上也对备份的镜像副本执行了操作。 – highsciguy

+0

澄清一点,我看到一个正常的rsync问题(见下面的答案)。如果rsnapshot路径中的文件被破坏(例如由于磁盘故障),由于使用硬链接,它将在所有较新的快照中被破坏,除非在稍后改变。这意味着文件丢失了。如果我对备份的镜像副本执行常规自动rsync,那么最终我会用其损坏的版本覆盖文件而不会注意到。问题是如果有解决方案可以避免这种情况。 – highsciguy

回答

6

我认为在rsync手册页中大部分记录了要做什么的选项。特别是,-H选项(--hard-links)启用了硬链接检测,而--delete将导致rsync删除目标上源上不存在的内容。因此,也许是这样的:

rsync -aH --delete /path/to/src/ /path/to/destination 

而且我能做些什么,以避免如果源已损坏的缺陷rsynced镜子的可能性?

好吧,那很棘手。你如何发现腐败?我认为唯一真正的解决方案是错开备份的备份(即,将您实际备份到主要目标,然后在您的下一次备份运行之前立即将其rsync同步到次要目标)。这样,如果您检测到有问题,直到下一次备份运行才能恢复。

一个不同的解决方案是将rsnapshot备份到多个目标,以便实际上从原始来源生成备份到两个不同的位置。这样,如果一个人受到损害,第二个人应该不受影响。

+0

确定所有选项都在手册页中。我只是想确保我不会忘记任何事情。但-a选项似乎非常紧凑。由于两个目的地不会同时可用,因此两个位置的rsnapshot将不可行。难道只有更新的快照才能与镜像同步吗?以这种方式,即使这些位置中的较旧快照在主位置中损坏,它们也会被保留。当然,我需要重复由它添加快照时由rsnapshot执行的重命名... – highsciguy

1

为防止损坏数据的复制,您可以保留每周备份,并希望在丢失所有备份之前,您会注意到源处的损坏。最好的方法是使用-c,然后它会比较源和目标的校验和以确定是否复制文件。唯一的缺点是它必须读取整个文件,使备份过程更慢。

#!/bin/sh 
# Create a Backup of Today 
# Definitions 
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A) 
# Delete backups from 7 days ago 
rm -rf /storage/backups/$sevendaysago 
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username 

rsync -aHvz /storage/`date --date=yesterday +\%Y-\%m-\%d`-`date --date=yesterday +\%A`/$host/$user/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/ 

rsync -acHvz -e ssh --delete --exclude='logs' [email protected]:/home/tim/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/