适量备份 (JEB)

适量备份 (JEB)

备份模组,通过自动和手动备份确保你的世界安全,并带有便捷的游戏内界面来创建、管理和恢复备份。

管理

Just Enough Backups Banner

Just Enough Backups 是一个 Fabric 模组,添加了服务端世界备份功能,并提供可在游戏内使用的工作流程。

它支持:

  • 完整、部分和差异备份
  • 通过命令和 UI 进行手动备份
  • 自动计划备份
  • 可配置的公开备份/恢复公告
  • 按备份数量保留
  • 按每个世界的备份总大小保留
  • 从备份浏览器准备恢复
  • 可配置的客户端 HUD 弹窗,带实时预览
  • 并行(多线程)扫描、压缩和恢复提取
  • 可选的 Mod Menu 集成

该模组的设计目标是将实际备份逻辑保留在服务端,同时通过客户端 UI 提供管理和配置功能。

功能

备份类型

  • 完整:存储世界的完整快照。
  • 部分:存储相对于基础备份的更改。
  • 差异:存储相对于基础备份的更改,同时与部分备份保持独立的保留桶。

备份之间的依赖关系会被追踪。保留和删除操作会遵循这些依赖关系,因此当较新的部分或差异备份仍依赖它们时,所需的基础备份会被保留。

自动备份

自动备份由每种类型的调度器(FULL、DIFFERENTIAL、PARTIAL)驱动,并可配置为:

  • 根据每种备份类型配置的间隔独立运行
  • 在自动备份开始前发送可选的公开警告
  • 自上次备份以来没有玩家在线时暂停
  • 在服务器启动时运行
  • 在服务器停止时运行

公开公告可以发送到聊天栏、发送到动作栏,或禁用。

保留策略

可以同时以两种方式配置保留:

  • 基于数量的保留
    • 保留最新的 X 个完整备份
    • 保留最新的 X 个部分备份
    • 保留最新的 X 个差异备份
  • 每个世界的空间上限
    • 可选地硬性限制一个世界备份文件夹的总大小
    • 应用于最终发布的备份集
    • 遵循依赖链

如果即使删除了所有允许删除的备份后,新备份仍会超过配置的空间上限,则创建会失败,而不是发布一个无效的最终状态。

性能:并行处理

备份和恢复使用多个工作线程来加速大型世界:

  • 扫描 / 哈希:世界快照扫描在 threadCount 个线程上运行(最多每个 CPU 核心一个),并行读取和哈希文件
  • 压缩:ZIP 归档使用并行压缩写入
  • 恢复提取:备份 ZIP 文件在 threadCount 个线程上提取

线程数由配置中的 threadCount 控制,可设置为 1 到最大 CPU 线程数之间(默认:CPU 核心数减二)。较低的值会降低 CPU 使用率;较高的值会加速大型世界。

备份管理 UI

备份浏览器包括:

  • 刷新
  • 创建备份
  • 重命名备份
  • 删除备份
  • 恢复备份
  • 依赖感知的内联详情
  • 搜索/过滤

手动创建备份支持从命令行和 UI 自定义文件名。

配置 UI 和弹窗预览

配置屏幕公开以下内容:

  • 备份模式和调度器选项
  • 保留规则
  • 权限等级
  • 完整性模式
  • 备份目录和临时备份目录
  • 排除路径
  • 弹窗文本、颜色、频道和布局

弹窗预览屏幕让你在保存前移动并预览 HUD 状态。

在专用服务器上,配置屏幕仅在客户端生效:它显示 HUD 和 Preview 选项卡(这些选项卡仅本地应用于弹窗),服务器设置需在服务器的 config/justenoughbackups.json 文件中编辑,然后执行 /jeb config reload。在单人游戏中,整个配置是共享的,并可从屏幕中编辑。

命令

根命令是:

/jeb

可用命令:

/jeb now
/jeb now <name>

/jeb create full
/jeb create full <name>
/jeb create partial
/jeb create partial <name>
/jeb create differential
/jeb create differential <name>

/jeb list
/jeb next
/jeb restore <backup>
/jeb config reload

注意:

  • <name> 是可选的,经过清理后会成为实际的 .zip 文件名。
  • <backup> 是可见的备份名称,带或不带 .zip 后缀。Tab 补全会建议可见名称。
  • 恢复会异步准备,然后服务器会关闭,以便在下次启动时安全地应用恢复。
  • /jeb next 显示一个多计划摘要,展示所有已配置备份类型的剩余时间和准确执行时间戳,并按临近程度排序。
  • 命令访问遵循配置的权限等级。

默认按键绑定

客户端按键绑定:

  • B:打开备份管理
  • N:打开配置屏幕

这些是常规的 Minecraft 按键绑定,可以在“控制”中更改。

配置

该模组将其配置文件写入:

config/justenoughbackups.json

主要配置区域:

  • backupMode
  • automaticBackupsEnabled
  • pauseAutomaticBackupsWithoutPlayers
  • backupOnServerStart
  • backupOnServerStop
  • automaticIntervalMinutes
  • automaticBackupWarningEnabled
  • automaticBackupWarningMinutes
  • commandPermissionLevel
  • messageChannel
  • integrityMode
  • minimumFreeSpaceReserveMb
  • threadCount
  • backupDirectory
  • tempBackupDirectory
  • excludedPaths
  • retention
    • full
    • incremental
    • differential
    • maxTotalSizeMb
  • popup

backupDirectory 可以是相对于游戏目录的路径,也可以是绝对路径。

tempBackupDirectory 控制备份 ZIP 在被移动到 backupDirectory 之前压缩到的位置。它可以是相对于游戏目录的路径,也可以是绝对路径。将其留空以在备份目录内压缩(默认)。当备份存储在缓慢或网络驱动器上时,建议将其指向本地驱动器,因为这样只会将完成的 ZIP 传输到备份位置。

excludedPaths 使用相对于世界根目录的路径。文件夹条目会排除该完整子树,而文件条目只会排除该特定文件。

threadCount 控制并行扫描、压缩和恢复提取,并被限制在 1 和 CPU 线程数之间。

示例:

voxy
voxy/cache.db

在创建备份之前,该模组还会检查备份目标文件系统上的可用磁盘空间。检查是保守的,并要求:

(current world size * 2) + minimumFreeSpaceReserveMb

如果该空间不可用,备份创建会在写入临时 ZIP 之前中止。

备份命名

手动备份支持自定义名称:

  • 通过命令:/jeb now My backup
  • 通过备份 UI 中的创建对话框

如果未提供自定义名称,该模组会使用基于类型和时间戳的自动命名方案。

重命名使用与手动创建相同的清理规则,以保持命名行为一致。

许可证

本项目根据 MIT License 授权。