喵毛的方块/实体变动日志由 CoreProtect (后称 co)提供。此插件使用 Bukkit 的事件系统监听方块/实体变动,然后记录对应数据写入数据库中,于是就能提供查询和操作回滚等等功能。由于喵毛的活跃程度,co 插件每天会产生大量的记录数据。为了追溯破坏,这些数据会保存至少一年。如果各位近日有上线,大概会注意到,17 日下午 co 出现了功能异常。插件不再响应查询并且出现了日志丢失。调查以后问题的原因也很简单:
硬盘吃满了
这些记录数据存储一台专门的服务器上。数据实在太多,在这一天,co 吃光了所有的 800G 磁盘空间,然后歇菜了。在这期间碰巧有捣乱朋友造访毛线,造成的破坏就很遗憾地无法一键回滚。不过好在有各位的帮助,现在这些破坏已经几乎修复完成。我们对毛线的方块日志做了些分析,展示在这里:
方块日志数据统计
根据这次的统计,从大约 400 天前开始,记录的方块变更数据总共有 31 亿 1415 万 7701 条 (硬盘: 🙃)
| 总数 | 由玩家产生的数据 | 由方块产生的数据 |
数量(条) | 3114157701 | 175592468 | 2938565233 |
占比(%) | 100 | 5.64 | 94.36 |
其中按产生数据的数量排序,前 5 个条目为:
排名 | 名称 | 数量 | 占比(%) | 累计% |
1 | #lava | 1360265017 | 43.68 | 43.68 |
2 | #wither | 659901319 | 21.19 | 64.87 |
3 | #dispenser | 536171079 | 17.22 | 82.09 |
4 | #water | 279706002 | 8.98 | 91.07 |
5 | #bamboo | 40355009 | 1.30 | 92.37 |
可以看到,由玩家产生的数据实际只占很小一部分。而大部分日志来源于各种自动化的高速生产机器,比如排行前五的这五种记录,占掉了所有日志的 92%。
这些记录对服务器维护的帮助并不大,但吃掉了大量的存储空间。
同时还发现了肝帝:排行前 6-10 的条目,有四位都是玩家,操作的方块比所有的狐狸吃的果子加起来还要多。因为没有征求过同意,在这里隐去名字了。
排名 | 名称 | 数量 | 占比(%) | 累计% |
6 | ???????? | 22719347 | 0.73 | 93.09 |
7 | ????????? | 16566381 | 0.53 | 93.63 |
8 | ????????????? | 12635533 | 0.41 | 94.03 |
9 | #fox | 9832958 | 0.32 | 94.35 |
10 | ??????????? | 9288609 | 0.30 | 94.65 |
之后会如何做?
截至此时,卷已经购置了新机器并且把数据库服务迁移过去了。新机器配了 4T 可用空间存放 co 数据库,之后的很长一段时间应该不会再出现磁盘空间的问题。
同时,我们还设想对无用高频的记录做一些过滤,提高空间利用率。如果之后实装此功能,会在论坛告知大家。
此外,由于服务迁移,近期的回滚请求会受影响。如果发现有区域被损坏但查不到日志,应该是由于日志在迁移前产生,所以查不到了。如果这种情况发生,可以先尝试手动修复一下。如果需要材料或过于麻烦,可以发帖戳管理员寻求帮助。关于此问题当前活跃的帖子是 「申请多处建筑回滚」,可以在里面一并回复。