マイクラのワールドを効率よくバックアップする
概要
規模の大きなワールド(20万チャンク程度)をバックアップする方法を試した
git でリージョンファイルの差分をバックアップするのが良さそう
さらに、リージョンファイル(*.mca)をチャンクに分割すると効率が良かった
背景
普通に region ディレクトリを zip すると、一回あたり 1GB 以上になるのでファイル容量が大変になっていた
AutoBackup というサーバー mod を使っていた
自動バックアップが行われるタイミングでサーバー側の処理が一時的に止まるので、クライアント側がタイムアウトして接続断、またはロールバックとなることがあった
AutoBackup は諦めて別のバックアップ方法を試すことにした
試した方法の概要
git を使う
リージョンファイル *.mca はバックアップしない
一つのリージョンファイルには、32 x 32 = 1024 個のチャンクが格納されている。これをチャンクごとに分解したものをバックアップする
リージョンファイルのうち、実際に更新されたチャンクだけをバックアップすることができる
リージョンファイルにチャンクを格納する時、チャンクの先頭が 4096 byte の倍数になるように格納されている。隙間の分の容量も多少減らせていると思う
分解したチャンクごとのファイルを、リージョンファイルに戻すツールも作った
定期的にログインユーザー数を確認する。プレイヤーが誰かログインしている時、または前回確認時から人数が 0 人に減った時にバックアップする
その他アイディア
リージョンを分解している処理の途中で、サーバーがリージョンを保存した時は?
特に何もしていない
こうすれば良さそう
code:command
save-off
save-all flush
// ここでリージョンファイルを分解する処理を行う
save-on
スポーンチャンクの範囲を狭くする
ワールドの利用目的も考えて狭くするのはありかもしれない
サーバーが起動している限りスポーンチャンクは更新され続ける。スポーンチャンクから遠く離れた位置にプレイヤーがいても、スポーンチャンクのファイルには差分が出る