CleanMCA · 安全边界与恢复
文档/cleanmca/CleanMCA · 安全边界与恢复

CleanMCA · 安全边界与恢复

说明停服、备份、测试副本、不可逆删除、Bash 确认缺陷和回滚方法。

这不是无损整理

CleanMCA 的核心动作是删除。不论你使用 Python、Bash 还是 Windows 批处理入口,工具都没有:

  • dry-run 或逐文件审批模式;
  • 回收站、撤销按钮或自动生成的恢复包;
  • 对世界是否正在运行的可靠检测;
  • 对白名单坐标是否合理的 Minecraft 语义检查;
  • .mca 内部区块、实体和 POI 的内容分析。

它只知道“这个目录中的文件名是否出现在白名单里”。管理员需要在工具之外承担保留策略、停服、备份和恢复责任。

生产执行前的安全顺序

推荐按以下顺序操作:

  1. 记录服务器版本、世界目录、目标维度、当前文件数量和本次白名单来源;
  2. 停止服务器,等待面板显示进程退出,并确认没有备份/同步任务仍在写世界;
  3. 备份整个服务器或至少整个世界目录,验证备份文件可以读取;
  4. 将世界复制到测试目录,在副本中执行 CleanMCA;
  5. 启动测试服务器,检查登录、区块加载、传送、村民 POI、实体和重要机器;
  6. 固定最终白名单、脚本版本和命令,把它们一起保存到运维记录;
  7. 再次停服并确认生产路径,优先使用 Python 版本执行;
  8. 清理后先看完整日志和关键区域,再开放玩家;
  9. 在确认稳定前不要删除旧备份。

特别注意 Bash 版本

当前 CleanMCA.sh 使用 read -p 显示确认问题,但后续代码没有判断变量或退出状态,随后直接处理三个目录。因此即使管理员输入 n,也不能把它视为可靠取消。这个行为属于当前脚本实现的安全缺陷,不是文档误译。

生产服应使用 CleanMCA.py,因为 Python 版本会在输入不是 yyes 时退出。即便如此,也不能省略备份和测试副本;确认机制只能降低误触概率,不能证明白名单正确。

清理范围的风险

一次运行的同一份白名单会作用于三个目录,而且 Python 实现会删除其中所有不在白名单里的普通文件,不局限于 .mca。以下内容必须在运行前特别检查:

  • 服务器或面板写入 regionpoientities 的额外文件;
  • 还没有列入白名单的公共建筑、交通设施、农场和管理区域;
  • 需要保留实体、村民 POI 或结构数据的区域;
  • 目标维度是否与生成白名单时使用的维度一致;
  • 同一坐标对应的文件是否在三个目录中存在不同情况。

不要用“文件数量减少了很多”作为成功标准。磁盘空间减少可能正是误删的结果。

恢复和回滚

发现文件范围错误、服务器启动异常或玩家重要区域缺失时,立即停止服务器,不要继续在已经变化的目录上运行其他清理命令。优先恢复清理前的完整世界备份;如果只备份了相关目录,则至少同时恢复 regionpoientities 的同一时间点副本。

一个需要根据实际备份路径调整的示例流程:

# 停止服务器后,先保留问题目录,避免覆盖现场
mv /srv/minecraft/world /srv/minecraft/world.after-cleanmca
cp -a /srv/backup/world-before-cleanmca /srv/minecraft/world

恢复后检查世界、配置和数据库是否来自同一时间点。若只恢复三个目录而没有恢复其他相关数据,可能出现世界文件和插件数据库不一致;高价值生产服应使用完整服务器备份或存储快照。

可重复运行与维护

同一白名单重复运行通常不会再次删除已经不存在的文件,但它也不会替你更新白名单。世界继续运行并生成新区域后,管理员需要重新生成或审核列表,再决定新文件是否保留。

保留以下记录有助于审计和回滚:

  • CleanMCA 仓库 commit 或下载时间;
  • 执行用户、服务器停止时间和目标维度;
  • 白名单文件原件及其来源;
  • 清理前的备份位置;
  • 执行命令、终端输出和清理后的验证结果。