
Advanced Backups — Minecraft Java Edition 1.7.10 – 1.21.4
依赖项: · 加载器:Forge, NeoForge, Fabric, Quilt, Spigot, Paper · Minecraft 版本:1.7.10 - 1.21.4 · 模组版本:3.7.1 Minecraft Java Edition…
依赖项: · 加载器:Forge, NeoForge, Fabric, Quilt, Spigot, Paper · Minecraft 版本:1.7.10 - 1.21.4 · 模组版本:3.7.1 Minecraft Java Edition 中的标准备份机制存在严重的局限性。在原版游戏中,备份的创建需要通过菜单手动执行,或者需要停止服务器以复制文件。这些操作在游戏主线程中执行,从而导致在将数 GB 数据写入磁盘期间出现游戏进程卡
依赖项:
· 加载器:Forge, NeoForge, Fabric, Quilt, Spigot, Paper
· Minecraft 版本:1.7.10 - 1.21.4
· 模组版本:3.7.1
Minecraft Java Edition 中的标准备份机制存在严重的局限性。在原版游戏中,备份的创建需要通过菜单手动执行,或者需要停止服务器以复制文件。这些操作在游戏主线程中执行,从而导致在将数 GB 数据写入磁盘期间出现游戏进程卡顿、延迟或服务器临时不可用。除此之外,标准方法仅创建世界的完整副本,很快就会用重复数据填满存储设备。Advanced Backups 模组解决了这些问题,提供了按计划进行的异步备份,支持差异和增量压缩模型、灵活清理过期归档,以及用于恢复数据的内置工具。
备份机制:Zip、Differential 和 Incremental
该工具提供三种世界文件处理模式,它们决定了执行速度、所用磁盘空间量与恢复可靠性之间的平衡:
· Zip(完整副本):其工作原理是将整个世界文件夹归档为一个 .zip 文件。此方式最耗费资源,且需要存储设备上最多的可用空间,因为每个备份都包含所有文件,无论它们是否被更改。其优点是恢复简单——只需解压所需的文件即可。
· Differential(差异备份):基于创建一个基准完整归档("full")以及后续的部分归档("partial")。部分归档仅记录自基准完整归档创建以来发生更改的文件。中间备份的体量大幅减少。要将世界恢复到某一特定时刻的状态,只需要两个文件:基准完整归档以及该日期之前的最后一个部分归档。
· Incremental(增量备份):同样使用完整归档和部分归档的概念。然而,每个部分归档仅包含自上一个部分归档创建以来发生的更改。这将磁盘子系统的负载降至最低,并最大限度地节省可用空间。其缺点是数据丢失的风险升高:如果增量副本链中哪怕只有一个文件损坏,在创建新的完整备份之前,将无法恢复后续的副本。恢复过程也是最慢的,因为它需要对整个文件链进行顺序合并。
新链的创建由参数 config.advancedbackups.chains.length 和 config.advancedbackups.chains.maxpercent 进行调节。第一个参数确定在强制创建新的完整归档之前,链中部分副本的最大数量。第二个参数执行大小检查:如果部分归档中累积的更改量超过完整归档大小的设定百分比,系统将自动重置该链并创建新的完整备份。
自动清理系统(Purging)与链的处理
为防止磁盘被填满,该模组实现了三种自动删除过期数据的标准:
· 按保存天数(config.advancedbackups.purge.days)。
· 按备份文件夹的总体量(以 GB 计)(config.advancedbackups.purge.size)。
· 按副本文件的总数(config.advancedbackups.purge.count)。
在使用差异或增量副本时,无法从链中删除单个文件,因为这会破坏数据的完整性。模组以整条链(chains)为单位进行操作。只有当链的所有组成部分(包括基准完整备份及所有相关的部分归档)都符合清理标准时,该链才被视为过期并被删除。借助参数 config.advancedbackups.purge.incrementalchains,可以设定系统无论其他清理限制如何都必须保留的完整链的最小数量。此外,用户还可以创建"快照"(snapshots)——这是世界的静态副本,受保护而不会被自动删除。
配置文件 AdvancedBackups.properties 的设置
备份系统的运行参数存储在 AdvancedBackups.properties 文件中,该文件在首次启动时于 config 目录下创建。主要的配置键:
参数 | 默认值 | 说明 |
| true | 允许完全启用(true)或禁用(false)自动创建备份。 |
| true | 确定在执行复制之前是否需要强制将世界保存到磁盘。 |
| true | 在创建副本期间关闭标准自动保存,并在过程完成后将其开启。 |
| 1048576 | 输入输出缓冲区的大小(以字节计)。超过内存上限的值可能导致 OutOfMemoryError 崩溃。 |
| false | 强制清空磁盘写入缓存。在早于 1.16 的 Minecraft 版本中不使用。 |
| true | 玩家活跃度检查。如果自上次备份以来服务器上没有玩家,则跳过副本的创建。 |
| differential | 备份类型。可选值:zip(完整副本)、differential(差异备份)、incremental(增量备份)。 |
| session.lock,*_old | 以逗号分隔的排除列表,列出世界文件夹中不添加到归档的文件(允许使用诸如 * 的通配符)。 |
| ./backups | 用于保存已完成备份的目录路径(相对或绝对)。 |
| 0.25 | 备份之间允许的最小间隔(以小时计)。防止重复。0 — 禁用。 |
| 24.0 | 最大间隔(以小时计),如果没有其他成功的副本,超过此间隔后将强制启动备份。 |
| true | 调度器的基准:计算服务器运行时间(true)或操作系统的实际天文时间(false)。 |
| 1:00 | 创建副本的间隔列表(例如,每小时备份用 1:00,或精确的实际时间 04:00,16:00)。 |
| false | 在服务器停止或关闭期间强制创建世界备份。遵守 frequency.min 限制。 |
| false | 在服务器启动期间创建世界备份。遵守 frequency.min 限制。 |
| 30 | 服务器开启后启动备份的延迟启动时间(以秒计)。最小值为 5 秒。 |
| ops | 游戏内有关归档过程的 toasts 通知的接收者类别(ops — 管理员,all — 所有人,none — 无人)。 |
| 500 | 向玩家发送进度数据包的频率(以毫秒计)。值越低,网络负载越高。 |
| true | 允许将详细的百分比归档进度输出到服务器的系统控制台。 |
| 5000 | 将备份执行进度记录到控制台的间隔(以毫秒计)。 |
| 50.0 | 副本文件夹总体量的限制(以 GB 计)。超出时删除最旧的副本。0 — 禁用。 |
| 0 | 备份的保存期限(以天计)。较旧的将被删除。0 — 禁用。 |
| 0 | 磁盘上允许的最大副本数量。较旧的将被删除。0 — 禁用。 |
| true | 允许在按体量清理时删除增量链。如果为 false,则增量副本永不被清理。 |
| 1 | 清理在任何情况下都必须在磁盘上保留的增量链的最小数量。 |
| 4 | ZIP 归档的压缩级别(从 1 到 9)。较大的值可节省空间,但会增加 CPU 负担。 |
| 50 | 在创建新的完整归档之前,部分备份(差异/增量)的最大数量。 |
| true | 允许压缩链内的基准完整副本以及后续的中间副本。 |
| true | 智能重置链。如果所有世界文件都被更改,副本将自动成为完整副本。 |
| 50.0 | 部分备份相对于完整备份的大小限制(以百分比计)。如果超出,则创建完整备份。 |
备份管理命令
模组的管理通过控制台命令进行,这些命令需要管理员访问级别(为了更好地与命令方块兼容,命令选项在 3.7 版本中通过将所需权限级别降至 2 进行了更新):
· /backup start — 以异步模式启动备份过程。该命令会考虑计划、最小间隔和玩家活跃度的所有设置。
· /backup force — 强制启动复制过程,忽略玩家活跃度检查和时间限制 frequency.min。
· /backup snapshot <name> — 以指定名称在子文件夹 snapshots 中创建完整备份(快照)。该归档在自动清理过期备份时不予考虑,系统永远不会自动删除它。
· /backup reload-config — 从 AdvancedBackups.properties 文件重新加载参数,无需重启服务器或游戏客户端。在 2.2 之前的模组版本中,使用替代命令 /advancedbackups reload 来实现此功能。
· /backup check — 分析调度器的当前状态,并输出有关距离下一次按计划安排的备份还剩多少时间的信息。
· /backup reset — 重置当前增量或差异副本链的计数器。下一次按计划安排或手动启动的备份将被强制创建为完整归档("full")。
将命令的权限级别降至 2,可以使用 Command Blocks 和第三方调度器插件来自动化创建副本,这些插件以服务器的名义调用控制台命令。
控制台恢复工具(Command Line Restoration)
由于差异和增量备份由大量相互关联的更改文件组成,因此手动恢复它们是一个复杂的过程。为解决此任务,模组的 JAR 文件中内置了一个专用的控制台工具。
在首次创建副本时,模组会自动在备份所在的目录中生成辅助脚本:
· restore-bootstrap.bat 用于 Windows 操作系统。
· restore-bootstrap.sh 用于 Linux 和 macOS 操作系统。
这些脚本会启动内置于 JAR 文件中的恢复向导。要通过终端手动启动恢复界面,使用以下命令:
|
(JAR 文件的名称必须与已安装模组的版本完全一致)。
该工具的控制台界面以交互模式运行:
1. 启动对备份文件夹的扫描,以分析可用的链和快照。
2. 显示可用恢复点的列表,并注明日期、时间和副本类型(Full、Diff、Inc)。
3. 检查所选归档的链的完整性。如果是增量副本,该工具将自动检查从基准完整备份到所选点之间的所有中间部分是否齐全。
4. 请求解压的目标文件夹。该工具将执行文件的顺序合并和替换,重建所选副本创建时刻的世界精确状态。
在开始恢复之前,必须完全停止 Minecraft 服务器。尝试在正在运行的服务器上恢复文件将导致世界数据库和区域文件(.mca)损坏。
在不同平台上的运行特点与优化
该模组根据所选安装平台的不同而具有架构上的差异:
· 客户端 toasts 通知:关于备份创建开始和完成的可视化弹出通知是通过原版 toasts 系统实现的。要在客户端显示它们,必须安装兼容的模组(Forge、NeoForge 或 Fabric)。在 Spigot 或 Paper 服务器上使用该模组时,未安装该模组的客户端将看不到可视化通知,而只会在聊天中收到普通的文本消息(如果日志设置允许的话)。
· 1.7.10 版本:由于旧版游戏引擎的技术限制,用于 Minecraft 1.7.10 的模组版本不支持图形化的 toasts 通知系统。取而代之的是,复制进度直接以简单文本叠加层的形式显示在游戏画面之上。
· 内存分配控制:异步压缩操作需要在 JVM 中分配内存缓冲区。如果在内存有限的服务器上(例如 2-4 GB),将参数 config.advancedbackups.buffer 设置得过大(超过 10-20 MB),并将压缩级别 config.advancedbackups.zips.compression 设置得过高(8-9 级),这可能会引发堆(JVM Heap)溢出,并使服务器以 OutOfMemoryError 错误紧急停止运行。为了在资源有限的服务器上稳定运行,建议保持 1 MB 的标准缓冲区大小以及不高于 4 的压缩级别。
结论
Advanced Backups 是一款用于确保 Minecraft Java Edition 中游戏世界得以保存的综合性工具解决方案。与 Simple Backups 或原版工具等简单替代方案不同,得益于增量链的使用,这款模组能够以最小的磁盘空间消耗部署一套完善的备份策略。该模组的主要局限在于缺乏内置的云服务提供商来将归档自动上传至外部存储(例如直接从模组上传到 Google Drive 或 FTP 服务器),这就需要设置外部脚本来同步 ./backups 文件夹。该模组推荐安装在中等规模的公共和私人服务器上,在这些服务器上,确保在不停止游戏进程的情况下防止数据丢失至关重要。
安装
一次典型安装大约 5 分钟。流程相同,只是 Loader 和对应构建不同。
- 1Stop your Minecraft server.
- 2Drop the plugin .jar into the server /plugins folder.
- 3Start the server once so the plugin generates its config files.
- 4Edit /plugins/<name>/config.yml as needed, then run /reload confirm or restart.








