2020年8月1日土曜日

Minecraft Bedrock Server でDBStorage chain is invalidが出て起動できない

[2020-08-01 01:53:51 ERROR] DBStorage chain is invalid. Possibly encryption-related, or bad DBStorageConfig passed. Reason: Unable to decipher/decrypt LevelDB.
[2020-08-01 01:53:51 ERROR] Network port occupied, can't start server.
Minecraftサーバを起動すると上記のようなエラーが発生し起動できません。
最近サーバ機自体がハングってたりしたので、その影響なのかは不明です。
先に言ってしまうとPortがどうとか言ってますが関係ありません。
なお本環境はUbuntuです。

で、解決策はこちら
 
英語だし長いので簡単に修復方法は以下の通り。
  1. 最新DBファイルの確認
    MinecraftのDBファイルを参照します。
    $ ls ~/minecraft/worlds/Bedrock level/db
    (前略) 255684.ldb 255686.ldb 261601.log CURRENT MANIFEST-255686

    DBについては詳しくはよく分かりませんが、DB実ファイルと管理用?のファイル:CURRENTとMANIFEST-XXXXXXXの不整合が問題のようです。
    これらは0byteになってました。

  2. MANIFESTファイルのリネーム
    MANIFEST-XXXXXXを最新の.ldbにリネームします。
    私の環境では一致してたので不要でした。

  3. CURRENTファイルにMANIFESTファイル名記載
    CURRENTファイルをvim等で開き、MANIFESTファイル名(私の環境では MANIFEST-255686)を記載して保存します。

  4. 起動
    これで./bedrock_serverで起動すると自動的にDB修復をして起動してくれます。
    [2020-08-01 02:13:37 INFO] opening worlds/Bedrock level/db
    [2020-08-01 02:13:37 WARN] LevelDB worlds/Bedrock level/db status NOT OK(Corruption: no meta-nextfile entry in descriptor). Trying repair.

ちなみに、修復後は以下のようなDBファイル構成になってました。
-rw-rw-r-- 1 user group 1482948 Aug  1 12:21 261937.ldb
-rw-rw-r-- 1 user group       0 Aug  1 12:27 261938.log
-rw-rw-r-- 1 user group     246 Aug  1 12:27 261939.ldb
-rw-rw-r-- 1 user group      16 Aug  1 11:17 CURRENT
-rw-rw-r-- 1 user group   47892 Aug  1 12:27 MANIFEST-261764