来头 租 Minecraft 面板服和小伙伴们一起玩的时候,我希望至少存档数据能把握在自己手上,想找个备份插件来定时备份存档进行上传。但当时咱发现很多服务商会限制硬盘用量,而市面上很多成熟的备份插件都是先本地压缩打包再上传的模式,如果我存档数据本身已经有将近 10G ,而硬盘空间限制 10G ,那么打包过程中就已经会占满硬盘导致上传失败。
因此我决定还是自己写个插件,按自己的设想去加上必要的功能,PotatoSack 就这样诞生了。关于全量和增量备份 为了方便描述全量和增量备份,我将 [一个全量备份 + 其后的增量备份 (直至下一次全量备份前的)] 抽象成了一个“ 一组备份 ”的概念。
每产生一次全量备份就会新创建“一组备份”,随后直至下次全量备份前的增量备份都会算在这一组里。基本特性 PotatoSack 同时支持传统的备份模式以及 流式压缩+传输模式 ,后者会在内存中维护一个小缓冲区,边压缩数据边上传,这样就能几乎不占用额外的硬盘空间。
最开始这个插件是针对 OneDrive 来写的,而 OneDrive 很坑爹的一点是分块上传 API 要求提前知道文件大小,为此我采用了时间换空间思路,先模拟跑一遍压缩计算大小,再开始正式的压缩和传输流程。这个期间就算暂停世界自动保存,异步线程可能也会持续刷写剩下的区域文件,因此我也加入了文件完整性校验。
流式传输过程中还可能因为网络问题中断,期间的“兜底”处理我也尽量考虑到了,详见 备份机制说明文档 。时至今日,插件 目前已经支持 OneDrive, Dropbox 和兼容 S3 的对象存储服务 。
除此之外,插件还有这些特性: 支持 区块级 的变更追踪,有效减小增量备份压缩包的体积,详见 README - 概念介绍 ; 支持使用 Unix Cron 安排备份时间; 支持在没有玩家的时候暂停备份,节省空间; 支持 .potatosackignore 以类似 .gitignore 的语法忽略不需要备份的文件。项目信息 ✨ 开源地址,欢迎点 Star Orz: /ai-market-guide/ 📥 下载地址 (包含备份合并工具): /ai-market-guide/ 📄 中文文档: /ai-market-guide/ 这个插件也维护了好几年了,在咱的服务器上一直在发光发热,希望能多多少少帮助到大家吧。