修复损坏的 level.dat

支持 Minecraft 基岩版和 Java 版,也支持两者所有常见或少见的服务端核心:Vanilla、Paper、Spigot、Purpur、Folia、Fabric、Forge、NeoForge、Mohist、Sponge、Bedrock Dedicated Server、PocketMine-MP、Nukkit、PowerNukkitX、Cloudburst、Dragonfly、Endstone、LeviLamina 等。完整列表。

世界拒绝加载通常有四种原因:保存期间崩溃导致 level.dat 被截断、手动编辑后压缩方式错误、基岩版文件头长度损坏,或标签类型被修改。将文件拖入下方;编辑器会准确报告解析停止的位置,几秒内即可将范围缩小到其中一种。

诊断level.dat_old文件头压缩截断

将level.dat 或 level.dat_old拖放到这里

level.dat · .nbt · .mcstructure · .schem · .schematic · .dat · 区块转储数据

实际损坏原因

现象原因修复方法
编辑器报告“数据意外结束”文件被截断:进程在保存中途终止,或磁盘已满恢复 level.dat_old 或备份;缺失的字节无法找回
游戏提示世界损坏,但编辑器可正常加载其他工具写入了错误的压缩方式或字节序在此按对应版本的正确格式重新保存
基岩版世界未出现在列表中文件头长度不再与负载匹配在此打开并保存,长度会自动重新计算
服务器加载时记录类型转换或类型错误手动修改了标签类型(需要 Int 的位置使用了 Byte)将标签恢复为游戏要求的类型
世界能加载,但玩家出现在全新的世界中level.dat 被新生成的文件替换恢复备份;region/ 或 db/ 中的区块通常仍完好
所有文件都无法解析,包括 _old存储故障:文件系统为两个文件都返回了零或无效数据从其他机器上的备份恢复;确认磁盘正常后再继续使用该主机

没有 level.dat 时抢救世界

世界的地形、箱子和玩家不保存在 level.dat 中,而是在 region/(Java)或 db/(基岩版)中。如果元数据文件已无法修复,请使用相同版本和设置创建新世界,再将区块数据移入其中,并在新文件中设置 LevelName、出生点坐标和游戏规则。丢失的是元数据,而非建筑。请先确认版本:Java 世界包含 DataVersion,新生成的文件不得比待导入区块的版本更旧。

防止再次损坏

  • 复制或编辑前停止服务器。多数损坏源于文件仍在写入时被复制。
  • 按计划创建快照并保存到其他机器。与世界同盘的备份无法抵御引发本次问题的存储故障。
  • 在线快照前后使用 save-off / save-all,确保复制时世界处于静止状态。
  • 监控磁盘空间。磁盘写满会静默截断存档,而 level.dat 最后写入。
  • 只编辑值,不改结构。重命名标签或修改其类型是游戏无法容忍的编辑。

常见问题

level.dat_old 是什么?

它是上一次存档。Minecraft 在写入新文件前会将当前文件重命名为 level.dat_old,因此它是一份保留一个版本的备份,应当首先尝试。

NBT 编辑器能修复被截断的文件吗?

它可以准确指出数据在哪里中断,但无法重建缺失的字节。只能部分解析意味着需要使用备份。

我的建筑会丢失吗?

仅 level.dat 损坏不会导致建筑丢失。区块位于 region/ 或 db/ 中,同版本的新世界文件可以接管这些区块。

服务器认为 level.dat 正常,但世界是空的。

这说明问题在区块存储而非元数据。检查复制时是否包含 region/ 或 db/,并确认 level.dat 中的出生点坐标指向预期位置。

相关工具