【问题标题】:How can I backup a 13 GB SVN repository? The dump is 100+ GB如何备份 13 GB 的 SVN 存储库?转储为 100+ GB
【发布时间】:2012-09-12 04:41:44
【问题描述】:

我在文件系统上有大约 12 个存储库,大小为 1 GB 到 10 GB,我需要为所有存储库设置自动备份(当计算机出现故障时,我们的旧备份脚本会丢失)使用我们的XP 64 位机器。

在阅读this question 关于备份 SVN 存储库的最佳方法后,我开始转储我们拥有的最大存储库,大约 13 GB。该命令已经执行了约 2.5 小时,目前正在转储 300+ 中的约 200 个修订版。

svnadmin --deltas \\path\to\repo\folder > \\path\to\backup\folder\dump.svn

转储文件超过 100 GB 并且还在增加。我知道我可以对这个傻瓜进行 7-zip 压缩,但是 100 GB?! ... o_O

存储库包含大量二进制数据,这可能是问题的一部分,但就目前而言,切换到更高效的版本控制系统(假设有)是不现实的; SVN 是这里生活的一部分。

我曾考虑使用占用更少空间的 hotcopy,但我尝试使用我们旧的 hotcopy 备份之一,而 subversion 1.7 找不到它需要的一堆文件。看来我必须安装最初热复制存储库的 SVN 版本,然后转储该存储库以将其放入更新的 SVN。此声明似乎验证了我在使用 hotcopy 时遇到的问题:http://svn.haxx.se/users/archive-2005-05/0842.shtml

我觉得我只是得到失去了一些东西。也许有一些转储标志可以神奇地使转储大小变成原来的 1/5...

我还有其他选择吗?


更新:最新版本#327 刚刚被转储。转储文件的最终大小为 127 GB。这是来自 13.5 GB 的存储库。我的所有存储库加起来可能大约是 3 倍。

【问题讨论】:

    标签: windows svn backup visualsvn-server


    【解决方案1】:

    对于日常备份,我想说您真的不需要svnadmin dump。如果您要将存储库转移到可能运行不同 SVN 版本和操作系统的新服务器,我会使用转储方法,因为它是转储存储库的最便携方式,但它不是很节省空间。

    我建议使用该链接中提到的热复制方法。这将保证文件系统的状态是一致的,并且还会复制配置文件和挂钩脚本(顺便说一下,svnadmin 转储不会复制这些,所以你最终会得到一个不完整的备份)。因为它只是存储库的直接副本,所以大小相同,因此备份应该更易于管理。

    在紧急情况下,如果您需要从 hotcopy 恢复备份,那么您只需要一台具有相同主要版本的 SVN(例如 1.6 或 1.7)的机器,并且为了安全起见,使用相同的操作系统。您应该然后能够直接使用此存储库,或者此时您可以执行svnadmin dump 以转移到新服务器。

    编辑:svnsync 和 hotcopy 的比较:

    共同点:

    • 在备份期间安全地处理存储库写入
    • 备份大小 = 存储库大小

    热拷贝的优点:

    • 更容易设置
    • 备份挂钩和配置文件

    svnsync的优点:

    • 允许备份到不同的机器上
    • 仅写入自上次同步以来的新修订,因此同步速度非常快,这意味着您可以进行非常紧凑的增量备份

    【讨论】:

    • 对 bahrep 的建议有何评论? svnsync vs hotcopy?
    • 我最终选择了svnsync。看我的回答。
    【解决方案2】:

    感谢 bahrep 和 the_mandrill 的建议,我决定为这些存储库使用 svnsync。我能够很容易地设置它,并且由于我们没有任何挂钩或配置文件,因此没有其他需要备份的东西。由于我在使用 hotcopy 时遇到的问题(感谢 the_mandrill 为这些问题提出了解决方案),我决定 svnsync 对我们来说是更简单的解决方案。

    除了the_mandrill指出的,svnsync还有其他优点:

    • 如果主存储库出现故障,用户只要有链接就可以从备份存储库下载。
    • 备份是完全版本控制的。我的老板要求我每晚做一次备份,但只保留一周前的备份。要使用 hotcopy 做到这一点,我必须编写一个脚本。有了 svnsync,我就不用担心这些了。

    要设置 svnsync,我必须完成以下步骤。原谅任何错别字。我们所有的存储库都使用 VisualSVN 服务器托管。

    1. 创建一个新的空存储库:

      svnadmin create \\computerB\C$\repositories\mirror

    2. 创建文件\mirror\hooks\pre-revprop-change.bat。唯一的内容就是这一行:

      exit 0

    3. 初始化同步

      svnsync init https://computerB.domain.net/svn/mirror https://computerA.domain.net/svn/repo

    4. 同步两个repos

      svnsync synchronize https://computerB.domain.net/svn/mirror https://computerA.domain.net/svn/repo

    【讨论】:

      【解决方案3】:

      从 VisualSVN Server 3.6 开始,您可以使用Backup-SvnRepository PowerShell cmdlet 来备份 Subversion 存储库。要恢复 来自备份的存储库,使用Restore-SvnRepository cmdlet。

      更重要的是,服务器的企业版提供了scheduled backup feature。内置计划备份supports several backup types including incremental backups,在存储空间和备份所需时间方面非常有效。

      【讨论】:

        猜你喜欢
        • 2010-09-07
        • 2010-09-29
        • 2011-07-26
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 2018-12-01
        • 1970-01-01
        相关资源
        最近更新 更多