我设置了一个cron,将备份我的SVN回购(8 GB)到另一台服务器。 但有时我会得到错误,我觉得这不是将svn备份到远程服务器的正确方法。
我使用了命令rsync -avz myrepo。
请build议我一个很好的方法来执行svn备份到远程服务器。 因为它是7 GB,我不能压缩文件并且每天传输它。
谢谢
总结: 只要不备份当前活动的存储库, rsync应该完全可以用来备份svn存储库。 我怀疑你正在尝试备份一个有问题的活动仓库。
详情:
你不说错误报告,这使得任何诊断的尝试都很困难。 这是我经常嘲笑我们的用户 – 如果一个应用程序给你一个特定的消息报告给你要求诊断/支持的人的特定消息 ,即使该消息实际上是“发生错误”或类似的因为这确实发生)。
我猜测所报告的问题与文件丢失有关(它们在初始扫描期间存在,但在备份完成之前移动/重命名/删除),被locking,或在rsync读取时明显改变。 如果备份活动的svn服务,并且在启动备份运行之前没有完全停止svn服务,您将看到大多数备份技术出现类似的错误(或更糟糕的是:相关但未报告的问题)。
在备份运行期间停止对存储库的所有访问,即使是在夜晚完成(因为您可能有在不同时间工作的远程开发人员),您可能不会select使用该存储库。 如果是这种情况,那么有几个选项,其中包括:
使用hot-backup.py来完成存储库的完全备份, 如本免费提供的版本控制 (通常被认为是推荐阅读)的本节所述。 这不会直接适用于您的远程备份,因为它会导致每次都通过线路发送完整的repo,但您可以备份到临时本地区域,然后对该备份执行rsync (或其他任何操作)。而不是实时存储库。
如果您正在Linux上运行并使用LVM进行驱动器分区,则可以使用LVM的快照工具来执行与选项1中所述类似的function。请参阅此处和此处的技术文档示例。 这确实意味着在短时间内停止访问SNV服务的时间长度是快照需要创build的时间,但这几乎是一个问题,而不是需要停止整个备份操作的问题。
使用上面的SVN书中提到的实时存储库的增量备份。
LVM技术将比hot-backup.py -then-sync更快,但是除非您已经熟悉和熟悉LVM,否则没有大量额外的工作和学习可供您使用。 它的好处是,它几乎肯定会快得多,并且会占用更less的磁盘空间(尽pipe现在磁盘空间相当便宜)。 LVM快照在存在时会影响写入性能,但是除非您的存储库非常繁忙,并且在删除快照时无论如何在备份运行结束时性能将恢复正常,否则这种差异不太可能被察觉。
hot-backup.py方法的优点是,如果您还没有一个备份,也可以为您提供本地备份 – 如果您将“热复制”版本存储在另一台计算机上,则可以比恢复时快得多如果主机在不影响其他主机的情况下死机(例如,驱动器控制器故障),则进行远程复制。 除非您已经使用LVM并熟悉LVM,否则实现起来可能会更简单。
增量备份比这两种技术都要快,但是比hotcopy更简单 – 然后在完全灾难之后进行同步和恢复可能更复杂,除非您使用增量备份在另一端构build完整的repo副本(而不仅仅是存储增量信息)。 尽pipe如此,build议在另一端重build仓库,但是,由于这是一种testing方式,所以您的备份实际上是有效的 – 即使使用其他技术,您也应该定期testing备份(口头上说:备份不是一个好备份,除非它已经过testing)。
总之 , 只要你没有备份一个当前处于活动状态的存储库 , rsync应该可以完美地用来备份一个svn仓库(就像很多其他的技术一样,但是我自己也是大部分使用情况下的rsync的粉丝)您需要停止某种forms的快照的服务或备份。
如何svnsync (svn的一部分)到另一台服务器也运行svn? 作为传输你可以使用ssh + svn。
直接复制一个活的svn仓库从来就不是一个好主意。
你可以看看svnadmin dump --incremental到一个文件夹和rsync的。 这样你只需要传输增量。
另一种方法是使用svnadmin hotcopy来制作一个相同的live repo副本,并且你使用rsync。
您可以使用rsync同时备份活动的SVN存储库,前提是:
复制交易/子目录的内容也没有意义,因为当前交易不能被可靠地复制。
以这种方式复制的存储库将保持一致,并且包含直到最后一次提交的数据,才能复制db / current文件。
(hotbackup的问题之一是,如果使用该选项来保留最less的备份,则所有夜间备份都将被同步,因为它们总是有一个新的数字,即使回购没有改变。)