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