目录
服务器地图大小限制
地图文件夹的目录结构🔗
Vanilla 服务端的地图目录结构🔗
一个典型的Java版世界存档文件夹内通常包含以下重要内容:
- level.dat: 这个文件存储了该世界的全局核心信息,如世界名称、种子、游戏时间、天气周期等。
- region/: 这个文件夹储存了主世界的区块数据(.mca文件),每个文件包含32x32个区块。
- DIM-1/: 这是下界(地狱) 维度的数据文件夹,其内部也包含相应的 region 等文件夹。
- DIM1/: 这是末地维度的数据文件夹。
- playerdata/: 存储玩家的数据信息,例如血量、经验值、物品栏等。
- data/: 存储一些其他世界数据,如村民信息、地图数据等。
- advancements/: 存储玩家的成就进度数据。
- stats/: 存储玩家在此世界的统计信息。
- poi/: (1.14+)存储世界内与村民工作站及探索点相关的数据。
PaperMC服务端的地图目录结构🔗
# 主世界
world
├── advancements
├── data
├── datapacks
├── entities
├── generated
├── playerdata
├── poi
├── region
└── stats
# 下界
world_nether
├── data
└── DIM-1
# 终末之地
world_the_end
├── data
└── DIM1
如何计算服务器地图占用磁盘的大小🔗
默认情况下,Minecraft 服务器配置文件 server.properties 中指定:
max-world-size=29999984 # 单位为方块,表示地图的最大半径
max-build-height=256 # 单位为方块,表示地图的最大高度
Minecraft 地图是正方形的,按 区块 (chunk) 为单位存储。一个区块的默认尺寸为 16x16x256(长 x 宽 x 高),也就是一个区块存放 65536 个方块。理论上地图总共会有:
((2 * max-world-size) ^ 2) * max-build-height = 921599016960262144
个方块,也就是 14062485000004 个区块。
按照一个高度为 256 的区块在磁盘中的存储大小约为 4MB 来计算,共需要磁盘空间约为 53,644,124 GB。
所以,要开一个可维护的 Minecraft 服务器,需要控制好磁盘使用,并设置磁盘容量上限。按目前云服务器一般配备 50GB 磁盘空间来算,除去 10GB 系统占用,可供开服存储地图的磁盘空间仅有 40GB。按地图默认高度 max-build-height=256 计算,地图最大半径值为 max-world-size=810(假设玩家会经过所有方块的理想情况)。显然这种计算不符合实际情况。假设玩家只会经过 10% 的区块,那么 max-world-size=2561。这同样无法反映实际情况,因此需要统计区块使用率,用来指导设置世界大小。
地图备份文件占用磁盘太大解决方案🔗
目前服务器托管平台,提供自动优化地图大小的能力。地图中玩家没有呆过的区块会被不定时的清理掉,保证地图文件的大小可控。 如果你的地图文件太大,可以使用工具 mcaselector 进行区域按条件筛选后, 进行删除,可以显著减小地图文件占用空间。
可以使用CLI命令行模式进行操作,参考文档: mcaselector CLI 模式
备份地图的命令:
# 仅导出玩家待了5分钟以上的方块
java -jar \
mcaselector-2.5.3.jar \
--mode export \
--query "InhabitedTime > 5min" \
--world <directory_of_world> \
--output-world <directory_for_backup>
# 在原始地图上直接操作,删除所有玩家没待满5分钟以上的方块
java -jar \
mcaselector-2.5.3.jar \
--mode delete \
--query "InhabitedTime <= 5min" \
--world <directory_of_world>
CLI命令使用参数速查图:
