我想将 rsnapshot 使用的备份目录镜像到第二个位置以提高安全性。理想情况下,该解决方案将 rsync 与 ssh 一起使用。我需要向 rsync 提供哪些参数以保留硬链接(由 rsnapshot 创建)和符号链接、删除文件、递归复制、删除目标中的文件等?这些文件都在 ext3 文件系统上。此外,我能做些什么来避免如果源被损坏,缺陷被重新同步到镜像的可能性?
问问题
4424 次
2 回答
7
我认为做你想做的事情的选项很大程度上记录在rsync
手册页中。特别是,-H
选项 ( --hard-links
) 启用硬链接检测,--delete
并将导致 rsync 删除源上不存在的目标上的内容。所以也许是这样的:
rsync -aH --delete /path/to/src/ /path/to/destination
此外,我能做些什么来避免如果源被损坏,缺陷被重新同步到镜像的可能性?
嗯,这很棘手。你如何发现腐败?我认为唯一真正的解决方案是错开备份的备份(也就是说,将实际备份执行到主要目标,然后在下一次备份运行之前立即将其同步到次要目标)。这样,如果您检测到问题,直到下一次备份运行才能恢复。
一个不同的解决方案是rsnapshot
备份到多个目的地,这样您实际上是从两个不同位置的原始源生成备份。这样,如果一个损坏,第二个应该不受影响。
于 2012-05-21T20:31:41.463 回答
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' tim@tim.tim.net:/home/tim/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/
于 2012-09-12T06:48:14.470 回答