【PR】本記事にはプロモーション(広告)が含まれます。広告リンク経由でお申し込みがあった場合、当サイトが報酬を受け取ることがあります。検証結果や評価の内容は広告の有無で変えていません。詳しくは広告表記をご覧ください。
マイクラサーバーのバックアップをLinuxで自動化する手順(RCON+tar)実際に復元まで試した
マイクラのサーバーで一番困るのは、ワールドが壊れたり消えたりすることです。この記事では、サーバーを動かしたままワールドを安全にバックアップするスクリプトを作り、実際にワールドを消してから復元できるかまで試しました。
この記事でやったこと/やっていないこと
- やった: RCON を使ったバックアップ(2回)、ワールドを失った状態からの復元、起動の確認
- やっていない: cron による定期実行(検証機に cron が入っていないため。書き方の例だけ載せます)
仕組み
動いているサーバーは、ワールドを少しずつディスクに書き込んでいます。書き込みの途中でコピーすると、壊れたバックアップになるおそれがあります。そこで、次の順番でコマンドを送ります。
save-off… 自動保存を一時的に止めるsave-all flush… まだ書き込んでいない分を、すべてディスクに書き切るtarで world フォルダを圧縮するsave-on… 自動保存を元に戻す
外からサーバーにコマンドを送るために、RCON(コンソールのコマンドをネットワーク経由で送る機能)を使います。
手順1:RCON を有効にする(自分のマシンからだけ)
server.properties を次のようにします。
server-ip=127.0.0.1
enable-rcon=true
rcon.port=25575
rcon.password=(長いランダムな文字列)
当サイトの検証で起動したときのログです。
[Server thread/INFO]: RCON running on 127.0.0.1:25575
ss -ltnp でも、待ち受けは 127.0.0.1:25575 と 127.0.0.1:25565 だけでした。RCON のポートは、外に公開しないでください。 パスワードを間違えると認証に失敗することも確認しました。
手順2:バックアップのスクリプト
RCON のクライアントには、当サイトで書いた Python の小さなプログラム(約20行、標準ライブラリだけ)を使いました。mcrcon などの既製のツールでも同じことができますが、当サイトでは試していません。
#!/bin/bash
set -euo pipefail
SRV=/path/to/server # server.jar があるフォルダ
DEST=/path/to/backups
KEEP=7 # 残すバックアップの数
RCON="python3 rcon.py" # RCON_PASS 環境変数でパスワードを渡す
mkdir -p "$DEST"
TS=$(date +%Y%m%d-%H%M%S)
$RCON save-off
trap '$RCON save-on >/dev/null' EXIT # 途中で失敗しても自動保存を戻す
$RCON save-all flush
tar -czf "$DEST/world-$TS.tar.gz" -C "$SRV" world
$RCON save-on; trap - EXIT
ls -1t "$DEST"/world-*.tar.gz | tail -n +$((KEEP+1)) | xargs -r rm --
実行したときの出力(実際のもの)です。
Automatic saving is now disabled
Saving the game (this may take a moment!)Saved the game
Automatic saving is now enabled
backup ok: .../world-20261020-223511.tar.gz (3.2M)
実測: world フォルダは 8.6MB(256チャンクを読み込んだ小さなワールド)、圧縮後は 3.2MB でした。スクリプトの実行時間は 0.37秒と 0.19秒です(2回実行)。ワールドが大きくなるほど、時間とサイズは増えます。
手順3:実際に復元してみる
- サーバーを止める(
stop) - world フォルダを world.broken という名前に変える(ワールドを失った状態を再現)
- 最新のバックアップを展開する:
tar -xzf world-YYYYMMDD-HHMMSS.tar.gz -C /path/to/server - 起動する → ログに
Done (0.201s)!と出て、RCON のlistにも応答しました
注意点として、復元されるのはバックアップした時点のワールドです。今回は、バックアップの後に stop でもう一度保存したので、止める前のワールドとはファイルの中身が少し違っていました。バックアップの後に遊んだ分は戻りません。
定期実行(cron の書き方の例・当サイトでは未実行)
毎日 4:00 に実行し、ログを残す場合の書き方の例です(crontab -e で登録します)。
0 4 * * * RCON_PASS='(パスワード)' /path/to/backup.sh >> /path/to/backup.log 2>&1
※当サイトの検証機には cron が入っていないため、この行での定期実行は試していません。
まとめ
save-off→save-all flush→tar→save-onの順番なら、サーバーを止めずにバックアップできました。- RCON は 127.0.0.1 だけで待ち受けて、外に公開しないこと。
- バックアップは、復元できることを一度試しておくと安心です。
関連記事: マイクラJava版サーバーの立て方(Linux)/server.properties の解説
参照URL
- Minecraft Java Edition サーバー(公式): https://www.minecraft.net/en-us/download/server
- Minecraft EULA: https://aka.ms/MinecraftEULA
- GNU tar マニュアル: https://www.gnu.org/software/tar/manual/
- 検証の記録(当サイト内、非公開): lab/README.md(記録 #003)、lab/backup/