7

目前我的 Minecraft 服务器,驻留在 CentOS 服务器上,使用 Git 作为版本控制和“灾难管理”的手段。除了两个问题之外,这非常有效:

  1. 它很大。因为服务器有一个中央存储库、主分支(服务器实际运行在其上)和一个测试服务器分支,每个分支都包含曾经做出的每一个已提交的更改,都会无限地填充 SSD(使用过去 1.5 个月的大约 70GB )

  2. 它很慢。在对象目录中存储了这么多数据之后,提交、推送和拉取都很慢,因为它会尝试压缩/解压缩和解析所有这些数据。

我正在寻找一种解决方案,让 Git 对这个应用程序更有效,或者寻找替代品。以下是我选择使用 Git 的一些原因:

  • 增量备份 - 每次我想备份时,我都不必保存整个 8GB 未压缩/2GB 压缩服务器!
  • Cherry-pick restore - 我需要能够轻松地恢复服务器的某些部分(例如特定的插件配置,而无需恢复人们对主要世界的更改)
  • 能够将项目克隆到家庭计算机以进行异地备份和测试
  • 能够为测试服务器创建一个分支以在推出之前尝试不稳定的功能

当我们过去使用精确的 tarballing bash 脚本来备份服务器时,我们通常会删除超过 2 周的备份。对于增量备份,这段时间应该是一个月或更长时间。

如果你不熟悉 Minecraft 的结构,它有点像这样:

.
|-- plugins
    |-- SomePlugin
        |-- config.yml
    |-- SomePlugin.jar
|-- world
    |-- region
        |-- (binary files of chunks, a 2000x2000 world is often 1GB in size)
    |-- mcmmo_data (third party plugin)
        |-- x coordinate
            |-- y coordinate
                |-- small flatfile
    |-- level.dat
|-- stuff.txt
|-- properties.yml
|-- server.jar

有什么想法吗?

4

1 回答 1

2

为了存储二进制/大文件,您可能会考虑的一种选择是git-annex,它是为管理 git 内部的大对象而设计的。它可以让您签入那些巨大的文件,而不会弄乱中央 git 数据库本身。但是,这需要重新考虑如何处理这些文件并让它们随着时间的推移而改变。它确实有一个不错的推/拉/备份组件,它可能会很好地工作,但你会遇到其他需要处理的“新思维方式”。当然,首先在测试系统上尝试一下。

于 2013-01-11T17:03:58.720 回答