ここ最近の話ですが、私が運営しているMinecraftのマルチ鯖でマップが過去のデータに戻る現象が何度かありました。
うちの鯖では非公式拡張バージョンのbukkitを利用しているのですが、ログを見ても原因が特定できませんでした。
ただ、過去のデータが読み込まれる直前に友人が整地(TNTやエンチャント装備での高速伐採など)をやっていたということから、鯖に負荷がかかったのが原因ではないかと推測できます。
ネットで調べたところ、Minecraftはバックアップデータを1つだけ用意する作りになっており、非常事態の場合はこのデータをロードするとの記述がいくつか見られました。
うちの鯖もこれに該当するのかなぁと思います。
で、定期的に手動でバックアップすることにしたのですが、毎回マニュアルでのバックアップは面倒なのでスクリプトを書いてみました。
今回書いたのは以下のようなスクリプト。
#!/bin/sh # 現在の時刻を取得します。 day=`date +"%Y%m%d%k%M%S"`; directory="bkp/""bkp_"$day; # バックアップ保存用のディレクトリを作成します。 mkdir $directory; # worldのコピーを作成します。 cp -r world $directory; # world_netherのコピーを作成します。 cp -r world_nether $directory; # world_the_endのコピーを作成します。 cp -r world_the_end $directory; # ディレクトリをZIP圧縮します。 zip -r $directory".zip" $directory; # 作成したバックアップ保存用ディレクトリを削除します。 rm -rf $directory; # 変数の開放 unset directory; unset day;
内容はコメントを見てもらえば分かりますが、ワールドデータを一つのZIPファイルにして保存しようというものです。
動作は確認済みで、ちゃんとZIPファイルが生成されます。
こちらに置きましたので、興味のある方は使ってみてください。
既存の終了スクリプトに組み込んでしまうのも良いかもしれませんね。
私は終了スクリプトにも上記プログラムを移植して使うようにしました。
あと、本スクリプトを実行する前に「bkp」ディレクトリを先に作ってください。
Linuxだと、「mkdir bkp」で作ることができます。
本スクリプトはマルチ鯖が停止中に実行することを前提に作っていますので、起動中には絶対に実行しないでください。
最悪の場合、ワールドデータが破損して復旧できない可能性があります。
コメント