我们有 500 多个 Hg 存储库,并且正在寻找快速有效的备份需求。是否有我们可以用来备份这些存储库的脚本或工具。我们尝试了 Hg bundle、hg clone 和常规文件系统备份,但它们没有帮助。
Hg 存储库备份策略是否有标准做法或一些文档?
一个后续问题,当用户正在推送变更集并且我们开始备份时会发生什么?
我们确实使用 RhodeCode 来发布 Hg 存储库。谢谢
我们有 500 多个 Hg 存储库,并且正在寻找快速有效的备份需求。是否有我们可以用来备份这些存储库的脚本或工具。我们尝试了 Hg bundle、hg clone 和常规文件系统备份,但它们没有帮助。
Hg 存储库备份策略是否有标准做法或一些文档?
一个后续问题,当用户正在推送变更集并且我们开始备份时会发生什么?
我们确实使用 RhodeCode 来发布 Hg 存储库。谢谢
没有标准。在推送期间拍摄的真正 FS 级快照会很好,但非即时镜像操作(递归复制)可能最终导致损坏的存储库,尽管它可以修复到推送前状态。
在过去,我做了一些简单的事情:
for repo in $(find /srv/repos -type d -name .hg | sed 's/\.hg$//') ; do
hg --cwd $repo --repository $repo push ssh://backupserver/$(basename $repo)
done
这会将所有存储库以增量方式推送到远程 ssh 服务器,并具有完全更新同时推送的完整性,并在必要时创建它们。
我有一个有点类似的从备份服务器克隆/拉取的解决方案,但我在 hg 挂钩上触发了备份。
在主服务器 globalhgrc
中,我有:
changegroup.backup = .../backup.sh
和类似的backup.sh
东西:
REPO=`hg root`
ts sshpass -p '...' ssh hg@backupserver "~/bin/pull.exp $REPO" 2>> $LOG
Ts(任务假脱机程序)允许操作异步发生。expect 脚本正在处理存储库可能是新的(因此执行hg clone --noupdate
)或已经存在的(因此执行hg pull
)的事实,并且还可以在请求时为 ssh 密钥提供密码。
只允许备份钩子推送第二台服务器,因此不会发生多头或需要强制的问题。
我发现这种实时备份的有趣之处在于,在主服务器崩溃的情况下,切换到备份服务器应该会快得多。