Useful Links
› Minecraft Wiki
› 合成配方
SomeBottle
V2EX  ›  Minecraft

PotatoSack - 支持区块级粒度、可几乎不占用额外硬盘空间来利用 OneDrive / Dropbox / S3 增量备份世界数据的 Bukkit 系插件

  •  
  •   SomeBottle · 9h 21m ago · 266 views

    logo

    来头

    租 Minecraft 面板服和小伙伴们一起玩的时候,我希望至少存档数据能把握在自己手上,想找个备份插件来定时备份存档进行上传。但当时咱发现很多服务商会限制硬盘用量,而市面上很多成熟的备份插件都是先本地压缩打包再上传的模式,如果我存档数据本身已经有将近 10G ,而硬盘空间限制 10G ,那么打包过程中就已经会占满硬盘导致上传失败。因此我决定还是自己写个插件,按自己的设想去加上必要的功能,PotatoSack 就这样诞生了。

    关于全量和增量备份

    为了方便描述全量和增量备份,我将 [一个全量备份 + 其后的增量备份 (直至下一次全量备份前的)] 抽象成了一个“一组备份”的概念。每产生一次全量备份就会新创建“一组备份”,随后直至下次全量备份前的增量备份都会算在这一组里。

    基本特性

    PotatoSack 同时支持传统的备份模式以及流式压缩+传输模式,后者会在内存中维护一个小缓冲区,边压缩数据边上传,这样就能几乎不占用额外的硬盘空间。

    最开始这个插件是针对 OneDrive 来写的,而 OneDrive 很坑爹的一点是分块上传 API 要求提前知道文件大小,为此我采用了时间换空间思路,先模拟跑一遍压缩计算大小,再开始正式的压缩和传输流程。这个期间就算暂停世界自动保存,异步线程可能也会持续刷写剩下的区域文件,因此我也加入了文件完整性校验。流式传输过程中还可能因为网络问题中断,期间的“兜底”处理我也尽量考虑到了,详见备份机制说明文档。

    时至今日,插件目前已经支持 OneDrive, Dropbox 和兼容 S3 的对象存储服务。


    除此之外,插件还有这些特性:

    1. 支持区块级的变更追踪,有效减小增量备份压缩包的体积,详见 README - 概念介绍;
    2. 支持使用 Unix Cron 安排备份时间;
    3. 支持在没有玩家的时候暂停备份,节省空间;
    4. 支持 .potatosackignore 以类似 .gitignore 的语法忽略不需要备份的文件。

    项目信息

    这个插件也维护了好几年了,在咱的服务器上一直在发光发热,希望能多多少少帮助到大家吧。

    1 replies  •  2026-09-29 18:21:46 +08:00
    Tory12138
        1
    Tory12138  
       8h 44m ago   ❤️ 1
    这个项目不错
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   980 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:06 · PVG 03:06 · LAX 12:06 · JFK 15:06
    ♥ Do have faith in what you're doing.