目前我的 Minecraft 服务器,驻留在 CentOS 服务器上,使用 Git 作为版本控制和“灾难管理”的手段。除了两个问题之外,这非常有效:
它很大。因为服务器有一个中央存储库、主分支(服务器实际运行在其上)和一个测试服务器分支,每个分支都包含曾经做出的每一个已提交的更改,都会无限地填充 SSD(使用过去 1.5 个月的大约 70GB )
它很慢。在对象目录中存储了这么多数据之后,提交、推送和拉取都很慢,因为它会尝试压缩/解压缩和解析所有这些数据。
我正在寻找一种解决方案,让 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
有什么想法吗?