Minecraft 区块一经生成就不会自动消失——世界体积只涨不跌,备份成本随之失控。
玩家探索、跑图、飞行会永久生成大量区块。其中绝大部分是"路过但从未建设"的区块,却与真正建设过的区块占用相同存储。
世界体积只增不减,备份文件随之膨胀。存储成本、传输耗时、恢复时长全部被动上升,备份保留策略被迫越来越稀疏。
当只剩「优化备份 + 更早的全量备份」时,直接同名覆盖会造成地图空洞或地形回退——需要一个安全的合并恢复手段。
merge 子命令以 chunk 槽位粒度合并,恢复"全量最新"地图。
对同一真实 PaperMC 26.2 恢复合并世界(28,451 文件 / 18,637.6 MB / 3,162,906 区块),仅改变 -t
阈值各跑一次完整备份,其余参数一致(--copy-misc --parallelism 4,HDD 实测)。
| 阈值 | 耗时 | 输出大小 | 保留区块 | 剔除区块 | 剔除率 | 节省 MB | 压缩率 |
|---|---|---|---|---|---|---|---|
| 0 秒(从未访问) | 27.2 分 | 6,863.3 MB | 908,260 | 2,254,646 | 71.3% | 11,774.3 | 63.2% |
| 1 分钟 (60s) | 26.1 分 | 2,591.2 MB | 276,381 | 2,886,525 | 91.3% | 16,046.4 | 86.1% |
| 2 分钟 (120s) | 24.0 分 | 2,348.2 MB | 250,054 | 2,912,852 | 92.1% | 16,289.4 | 87.4% |
| 3 分钟 (180s) | 15.4 分 | 2,256.2 MB | 240,290 | 2,922,616 | 92.4% | 16,381.4 | 87.9% |
| 4 分钟 (240s) | 21.9 分 | 2,207.6 MB | 235,262 | 2,927,644 | 92.6% | 16,430.0 | 88.2% |
| 默认5 分钟 (300s) | 17.9 分 | 2,178.3 MB | 232,067 | 2,930,839 | 92.7% | 16,459.3 | 88.3% |
-t 0 适合激进归档(仅保留玩家真实访问过的区块),运营者默认 60–120 秒即可。数据来源:threshold-benchmark-report.md(逐字节验证:0 新文件 / 0 槽位伪造 / 0 锁步违规 / removedChunks 与槽位差严格吻合)
面向服务端运营的备份优化,把"安全"放在第一位。
按玩家累计活跃时间(严格 >)逐区块保留;-t 0 可移除从未被访问的区块。
自动解析并保留出生点 / 区块加载器所在区块,兼容新旧格式(chunk_tickets.dat → chunks.dat)。
region / entities / poi 按同一决策同步重写,杜绝"有地形无实体 / POI"的数据错位。
整区被剔除的 region 不生成空文件;幸存区块逐字节不变。
兼容 dimensions/ 嵌套结构(PaperMC 26.1+ / Vanilla),自动递归发现维度。
优化备份 + 全量备份按 chunk 槽位粒度合并,patch 优先、base 填空槽;损坏 patch 自动回退 base。
一条可并行、可审计的优化管道。
递归扫描,兼容 26.1+ 的 dimensions/ 嵌套结构
统计全部 MCA 文件中的区块总数
chunk_tickets.dat / chunks.dat 自动探测坐标
强制加载列表 + InhabitedTime 阈值联合判定保留
region + entities + poi 按同一决策重写 .mca
复制杂项文件 / ZIP 打包 / 原地替换 / 生成报告
patch 有该槽 ? patch : base 有该槽 ? base : 空 决定来源;entities / poi 与 region 锁步;
仅 base 存在的 region 原样复制。真实案例:18.64 GB 全量 + 2.18 GB 优化 → 约 18 GB 完整恢复。
JDK 17-29 环境,一条命令构建 CLI fat JAR。
./gradlew :app:shadowJar --no-daemon
java -jar app/build/libs/backup.jar /path/to/world /path/to/out -t 300 --zip-output
java -jar app/build/libs/backup.jar merge BASE PATCH OUTPUT --report --progress-mode Global
提示:先用 --dry-run --report 预览将剔除的区块量;-t 0 会移除所有未被访问的区块,
建议保留一份全量备份以便需要时 merge 恢复。
从功能梳理到真实案例分析,一站式了解。