経済サバイバルサーバー、参加者募集中

2026.09.15広告・PRを含む記事です

マイクラサーバーの自動バックアップ方法!cron・プラグイン・Windows対応

マイクラサーバーの自動バックアップとcron対応を示すサムネイル
  • 手動バックアップを取り忘れて、数日前のデータしか残っていない
  • 荒らしや不具合に気づいたときには、壊れた状態のセーブデータしかなかった
  • 自動バックアップの仕組みを作りたいけれど、設定が難しそうで手を出せていない

マイクラサーバーのバックアップと復元を手動で行っていると、どうしても更新忘れや、ワールド破損後のデータで上書きしてしまう事故が起こります。

大切なワールドを失わないためには、「サーバー停止・圧縮・世代保存」を毎日決まった時間に自動実行する仕組みを作っておくのが最も確実です。

この記事では、Linux(cron)やWindowsでの定期自動化から、プラグインを使った手軽な設定、復元テストの手順までを分かりやすく整理しました。

読み終えるころには、自分の環境に合った自動バックアップが稼働し、データの取り忘れに怯えることなく安心してマルチプレイを楽しめます。

管理人spaのアイコン
spaこの記事を書いた人

マイクラサーバーの構築と運用を繰り返して4年。今も経済サバイバル「spa77.works SMP」を運用中で、その経験をもとに記事100本以上を執筆。

結論:初心者はサーバーを止める自動バックアップから始める

自動バックアップの流れ。停止、圧縮、起動、外部保存、復元テストの順番で進めることを示している

最初におすすめしたいのは、サーバーを一度止めてからコピーする自動バックアップです。

稼働中のままバックアップを取る方法は、save-offsave-onの扱いを誤るとデータ破損の原因になります。初心者はサーバーを一度停止してからバックアップするのが最も安全です。

spa

僕のサーバーでも深夜に停止してバックアップしていますが、3分程度で完了します。

アーカイブのサイズはワールドが育つほど増えていき、1週間で1.1GBから1.3GB程度まで伸びました。

実際に僕が運用しているサーバーのバックアップ保存先。日付ごとのアーカイブファイルとサイズが並ぶ画面

環境おすすめ方法
Linux VPSsystemctlまたはscreencronで停止、圧縮、起動
Windows自宅サーバーPowerShellとタスクスケジューラ
Paper・SpigotDriveBackupV2などのバックアッププラグイン
レンタルサーバー管理画面の自動バックアップと手動保存を併用
統合版サーバー停止コピー、慣れたらsave hold系を検討

迷ったら、毎日1回、7世代保存、サーバー外にも保存、月1回の復元テストから始めます。

凝った仕組みを作ることより、戻せるバックアップを残すことを優先します。

補足

この記事のコマンドは、基本的にコピペして使える形にしています。 ただし、/opt/minecraftserver.jarMinecraftminecraftなどの名前は、自分の環境に合わせて置き換えます。

準備の話は後回しでいい、自分の環境のやり方だけ知りたい人は、ここから環境別の選び方へ飛んでください

自動バックアップ前に確認する3つのこと

自動バックアップを作る前に、次の3つだけ確認します。

ここを先に把握しておくと、どの手順を使えばいいか迷いにくいです。

確認すること見るコマンド
サーバーフォルダの場所pwdls
起動方法systemctlscreen
サーバーを動かしているユーザーwhoamiscreen -list

今いる場所がサーバーフォルダか確認するなら、次のコマンドを使います。

Terminal window
pwd
ls

server.jarworldserver.propertiesが見えれば、そこがサーバーフォルダです。

systemdで管理しているかは、次のコマンドで確認します。

Terminal window
systemctl list-units --type=service | grep minecraft

screenで動かしている場合は、別のコマンドを使います。

Terminal window
screen -list

サーバーを動かしているユーザーを確認するなら、次のコマンドです。

Terminal window
whoami

自動バックアップで保存すべきファイル

マイクラサーバーの自動バックアップで保存するファイルの違い。Java版はバニラとPaper・Spigotに分け、統合版はworldsなどの保存対象を示す図解

自動化する前に、保存対象を決めます。

ここを間違えると、毎日バックアップしていても復元時に困るので注意が必要です。

保存対象はエディションで変わります。

  • Java版で保存するもの
  • 統合版で保存するもの

自分が動かしている側だけ確認すれば十分です。

Java版で保存するもの

Java版は、サーバーソフトの種類によってネザーとエンドの保存場所が変わります。

保存対象もそれに合わせます。

サーバー保存対象
バニラ・Paper26.1以降worldserver.properties(Paperはpluginsも)
旧Paper・Spigotworldworld_netherworld_the_endserver.propertiesplugins
プラグイン運用共通ワールドと設定に加えてops.jsonwhitelist.jsonbanned-players.json

迷いやすいのはネザーとエンドの保存場所です。

旧PaperやSpigotでは、ネザーとエンドがworld_netherworld_the_endとして別フォルダに分かれています。一方、Paper26.1以降はworld/dimensions/配下に統合されているため、worldフォルダごと保存すれば抜けません。どちらの構造かわからないときは、worldの隣にworld_netherフォルダが存在するかどうかで判別できます。

また、プラグインを導入している場合はpluginsフォルダも必ず保存対象に含めます。LuckPermsの権限や経済データはワールド内ではなくプラグイン側に保持されているため、ワールドだけ戻しても設定が元に戻りません。

level-nameserver-portなど、設定ファイルの中身はserver.propertiesの設定ガイドで先に把握しておくと迷いが減ります。

Paper、Spigot、Vanillaの違いで迷っている場合は、先にサーバーソフトの選び方を見ておくと判断しやすいです。

統合版で保存するもの

統合版サーバーでは、基本的にworldsフォルダを保存します。

許可リストや権限も戻したいなら、次のファイルも含めます。

ファイル役割
worldsワールドデータ
server.propertiesサーバー設定
allowlist.json許可リスト
permissions.json権限設定
resource_packsリソースパック
behavior_packsビヘイビアーパック

統合版のフォルダ構造はJava版とは別です。

Java版のworld_netherのような感覚で探すと迷うので、最初はworldsを中心に確認します。

ホワイトリストやallowlistの設定まで一緒に戻したい場合は、参加制限の設定も確認しておくと迷いにくいです。

環境別に自動バックアップ方法を選ぶ

マイクラサーバーの自動バックアップ方法を環境別に選ぶ図解。Linux VPSはcron、Windowsはタスクスケジューラ、Paper・Spigotはプラグイン、レンタルサーバーは管理画面、統合版は停止コピーを選ぶ流れを示している

保存対象が決まったら、次は自分の環境に合う自動化方法を選びます。

VPS、自宅Windows、Paper・Spigot、レンタルサーバー、統合版では、使う道具がそれぞれ別です。

Linux VPSで毎日の自動バックアップを設定する

Linux VPSでは、シェルスクリプトを作ってcronで毎日実行します。

ここでは、サーバーを停止してからバックアップする方法を例にします。

補足

cronは、Linuxなどで、毎日午前3時にこのコマンドを実行すると指定できる仕組みです。 分、時、日、月、曜日の5項目で実行タイミングを決めます。

設定は次の順番で進めます。

  • 前提のフォルダ構成
  • systemdでサーバーを動かしている場合
  • screenでサーバーを動かしている場合
  • systemd版のバックアップスクリプトを作る
  • screen版のバックアップスクリプトを作る
  • スクリプトに実行権限を付けて手動確認する
  • 毎日3時に自動実行するよう登録する

systemdとscreenは、自分が使っているほうだけ読めば問題ありません。

前提のフォルダ構成

前提にするのは、このフォルダ構成です。

/opt/minecraft
├── server.jar
├── world
├── world_nether # 旧Paper・Spigotのみ。Paper26.1以降はworldの中に入る
├── world_the_end # 同上
├── plugins
└── server.properties
/opt/minecraft-backups

実際のフォルダ名は、自分のサーバーに合わせて変えます。

world_netherworld_the_endが見当たらないなら、Paper26.1以降の構造でworldの中にまとまっています。

/home/minecraft/serverで運用しているなら、スクリプト内のSERVER_DIRをそこに変更します。

補足

以降のLinux手順では、/opt/minecraftをサーバーフォルダ、/opt/minecraft-backupsをバックアップ保存先として進めます。 違う場所で運用している場合は、スクリプト内のSERVER_DIRBACKUP_DIRだけ直せばOKです。

systemdでサーバーを動かしている場合

VPSで運用しているなら、マイクラサーバーをsystemdのサービスとして動かしている人も多いです。

サービス名がminecraft.serviceなら、次のコマンドで停止と起動をします。

Terminal window
sudo systemctl stop minecraft
sudo systemctl start minecraft

サービス名が違う場合は、自分の環境に合わせます。

確認は次のコマンドです。

Terminal window
systemctl list-units --type=service | grep minecraft

screenでサーバーを動かしている場合

自宅サーバーやVPSでは、screenでマイクラサーバーを動かしている人もいます。

たとえば、次のように起動しているケースです。

Terminal window
cd /opt/minecraft
screen -dmS Minecraft java -Xms2G -Xmx2G -jar server.jar nogui

この場合は、次のコマンドでは止められません。

Terminal window
systemctl stop minecraft

screenセッションへsaystopを送って、サーバーが終了してからバックアップします。

screenセッション名の確認が必要です。

Terminal window
screen -list

Minecraftという名前で動いていれば、次のようにコマンドを送れます。

Terminal window
screen -S Minecraft -p 0 -X stuff "say バックアップのためサーバーを停止します$(printf '\r')"
screen -S Minecraft -p 0 -X stuff "save-all$(printf '\r')"
screen -S Minecraft -p 0 -X stuff "stop$(printf '\r')"

screenで運用している場合は、次のsystemd版ではなくscreen版のスクリプトが対象です。

systemd版のバックアップスクリプトを作る

次のスクリプトを/usr/local/bin/mc-backup.shに保存します。

SERVER_DIRBACKUP_DIRSERVICE_NAMEは環境に合わせて変更します。

初心者は、nanoでファイルを開くのがわかりやすいです。

Terminal window
sudo nano /usr/local/bin/mc-backup.sh

開いたら、次の内容をそのまま貼り付けます。

#!/bin/bash
set -euo pipefail
SERVER_DIR="/opt/minecraft"
BACKUP_DIR="/opt/minecraft-backups"
SERVICE_NAME="minecraft"
KEEP_DAYS=7
DATE="$(date '+%Y-%m-%d_%H-%M-%S')"
BACKUP_FILE="${BACKUP_DIR}/minecraft_${DATE}.tar.gz"
LOG_FILE="${BACKUP_DIR}/backup.log"
SERVER_STOPPED=0
TARGETS=(
world
world_nether # 旧Paper・Spigotのみ。Paper26.1以降は無く自動でスキップされる
world_the_end # 同上。26.1以降はworldの中に入るのでworldだけで足りる
plugins
server.properties
ops.json
whitelist.json
banned-players.json
)
cleanup() {
if [ "$SERVER_STOPPED" -eq 1 ]; then
systemctl start "$SERVICE_NAME" || true
fi
}
trap cleanup EXIT
mkdir -p "$BACKUP_DIR"
{
echo "[$(date '+%Y-%m-%d %H:%M:%S')] backup start"
systemctl stop "$SERVICE_NAME"
SERVER_STOPPED=1
EXISTING_TARGETS=()
for target in "${TARGETS[@]}"; do
if [ -e "$SERVER_DIR/$target" ]; then
EXISTING_TARGETS+=("$target")
fi
done
if [ "${#EXISTING_TARGETS[@]}" -eq 0 ]; then
echo "backup targets not found"
exit 1
fi
tar -czf "$BACKUP_FILE" -C "$SERVER_DIR" "${EXISTING_TARGETS[@]}"
systemctl start "$SERVICE_NAME"
SERVER_STOPPED=0
find "$BACKUP_DIR" -name 'minecraft_*.tar.gz' -mtime +"$KEEP_DAYS" -delete
echo "[$(date '+%Y-%m-%d %H:%M:%S')] backup done: $BACKUP_FILE"
} >> "$LOG_FILE" 2>&1

貼り付けたら、Ctrl + O、Enter、Ctrl + Xの順で保存すればOKです。

補足

systemd版で最低限書き換えるのは、SERVER_DIRBACKUP_DIRSERVICE_NAMEの3つです。 サービス名がminecraftではない場合、systemctl list-units --type=service | grep minecraftで出た名前に合わせます。

スクリプトが動く順番はこうです。

  1. バックアップ保存先を作る
  2. マイクラサーバーを停止する
  3. ワールド、設定、プラグインをtar.gzに圧縮する
  4. サーバーを起動する
  5. 7日より古いバックアップを削除する
  6. ログをbackup.logに残す

TARGETSに書いた候補のうち、実際に存在するファイルやフォルダだけを圧縮します。

バニラサーバーでpluginsops.jsonが無くても、そのせいで止まらないようにしています。

途中でtarが失敗しても、cleanupでサーバーを起動し直す形にしています。

バックアップ失敗でサーバーが止まりっぱなしになるのを避けるためです。

保存対象を確かめるには、自分のサーバーフォルダでlsを実行します。

Terminal window
ls /opt/minecraft

screen版のバックアップスクリプトを作る

screenで運用している場合、スクリプトの保存先は/usr/local/bin/mc-backup-screen.shです。

SCREEN_NAMESERVER_DIRBACKUP_DIR、起動時のメモリ量は自分の環境に合わせます。

screen版は、マイクラサーバーを起動しているユーザーで実行するのが基本です。

rootユーザーのcronから実行すると、一般ユーザー(minecraftなど)が起動したscreenセッションが見えず、停止コマンドが届きません。必ずサーバー起動と同じユーザーのcrontabで登録してください。

初心者

screenで起動しているのに、cronから見ると見つからないことがあるんですね!

screenを起動しているユーザーでファイルを開くのが原則です。

Terminal window
nano /usr/local/bin/mc-backup-screen.sh

権限エラーになる場合は、先に管理者権限で空ファイルを作って所有者を変えます。

Terminal window
sudo touch /usr/local/bin/mc-backup-screen.sh
sudo chown minecraft:minecraft /usr/local/bin/mc-backup-screen.sh
nano /usr/local/bin/mc-backup-screen.sh

minecraft:minecraftは、自分がサーバーを動かしているユーザー名に置き換えます。

貼り付ける中身はこれです。

#!/bin/bash
set -euo pipefail
SERVER_DIR="/opt/minecraft"
BACKUP_DIR="/opt/minecraft-backups"
SCREEN_NAME="Minecraft"
KEEP_DAYS=7
START_COMMAND='java -Xms2G -Xmx2G -jar server.jar nogui'
DATE="$(date '+%Y-%m-%d_%H-%M-%S')"
BACKUP_FILE="${BACKUP_DIR}/minecraft_${DATE}.tar.gz"
LOG_FILE="${BACKUP_DIR}/backup.log"
SERVER_STOPPED=0
TARGETS=(
world
world_nether # 旧Paper・Spigotのみ。Paper26.1以降は無く自動でスキップされる
world_the_end # 同上。26.1以降はworldの中に入るのでworldだけで足りる
plugins
server.properties
ops.json
whitelist.json
banned-players.json
)
cleanup() {
if [ "$SERVER_STOPPED" -eq 1 ]; then
screen -dmS "$SCREEN_NAME" bash -c "cd \"$SERVER_DIR\" && exec $START_COMMAND" || true
fi
}
trap cleanup EXIT
mkdir -p "$BACKUP_DIR"
{
echo "[$(date '+%Y-%m-%d %H:%M:%S')] screen backup start"
if screen -list | grep -q "$SCREEN_NAME"; then
screen -S "$SCREEN_NAME" -p 0 -X stuff "say バックアップのためサーバーを停止します$(printf '\r')"
sleep 5
screen -S "$SCREEN_NAME" -p 0 -X stuff "save-all$(printf '\r')"
sleep 10
screen -S "$SCREEN_NAME" -p 0 -X stuff "stop$(printf '\r')"
for i in {1..60}; do
if ! screen -list | grep -q "$SCREEN_NAME"; then
break
fi
sleep 2
done
else
echo "screen session not found: $SCREEN_NAME"
exit 1
fi
if screen -list | grep -q "$SCREEN_NAME"; then
echo "server did not stop. backup aborted."
exit 1
fi
SERVER_STOPPED=1
EXISTING_TARGETS=()
for target in "${TARGETS[@]}"; do
if [ -e "$SERVER_DIR/$target" ]; then
EXISTING_TARGETS+=("$target")
fi
done
if [ "${#EXISTING_TARGETS[@]}" -eq 0 ]; then
echo "backup targets not found"
exit 1
fi
tar -czf "$BACKUP_FILE" -C "$SERVER_DIR" "${EXISTING_TARGETS[@]}"
screen -dmS "$SCREEN_NAME" bash -c "cd \"$SERVER_DIR\" && exec $START_COMMAND"
SERVER_STOPPED=0
find "$BACKUP_DIR" -name 'minecraft_*.tar.gz' -mtime +"$KEEP_DAYS" -delete
echo "[$(date '+%Y-%m-%d %H:%M:%S')] screen backup done: $BACKUP_FILE"
} >> "$LOG_FILE" 2>&1

貼り付けたら、Ctrl + O、Enter、Ctrl + Xで保存します。

補足

screen版で最低限書き換えるのは、SERVER_DIRBACKUP_DIRSCREEN_NAMESTART_COMMANDです。 特にSCREEN_NAME="Minecraft"は、screen -listで表示された名前と合わせます。

このスクリプトは、screen内のマイクラサーバーへsave-allstopを送ります。

screenセッションが消えたことを確認してから圧縮するのが手順です。

圧縮が終わったら、同じscreen名でサーバーを起動し直します。

server.jarの名前やメモリ量が違う場合は、START_COMMANDjava -Xms2G -Xmx2G -jar server.jar noguiを必ず直します。

保存対象を増やしたい場合は、systemd版と同じくTARGETSにフォルダ名やファイル名を追加するだけです。

スクリプトに実行権限を付けて手動確認する

スクリプトを実行できるようにします。

Terminal window
sudo chmod +x /usr/local/bin/mc-backup.sh

screen版のスクリプトにも、同じように実行権限が必要です。

Terminal window
sudo chmod +x /usr/local/bin/mc-backup-screen.sh

手動で一度動かします。

Terminal window
sudo /usr/local/bin/mc-backup.sh

screen版の場合は実行するコマンドが別です。

Terminal window
sudo /usr/local/bin/mc-backup-screen.sh

ただし、screenを一般ユーザーで起動している場合は、sudoを付けずに同じユーザーで試します。

Terminal window
/usr/local/bin/mc-backup-screen.sh

その場合、バックアップ保存先へ書き込める権限も必要です。

Terminal window
sudo mkdir -p /opt/minecraft-backups
sudo chown minecraft:minecraft /opt/minecraft-backups

minecraft:minecraftの部分は、自分がサーバーを動かしているユーザー名に変えます。

バックアップファイルができているか確認します。

Terminal window
ls -lh /opt/minecraft-backups

ログの確認も必要です。

Terminal window
tail -n 50 /opt/minecraft-backups/backup.log

この時点で失敗しているなら、cronに入れる前に原因を直します。

手動実行で失敗するものは、自動化しても同じ結果になるのが通例です。

毎日3時に自動実行するよう登録する

crontab -eを開きます。

Terminal window
sudo crontab -e

screen版で、一般ユーザーのscreenセッションを使っている場合はsudoを付けません。

Terminal window
crontab -e

毎日午前3時に実行するなら、次の1行を追加します。

0 3 * * * /usr/local/bin/mc-backup.sh

screen版なら、登録するスクリプト名を変えます。

0 3 * * * /usr/local/bin/mc-backup-screen.sh

screen版は、cronを登録したユーザーとscreenを起動したユーザーを一致させるのが条件です。

ここがズレると、screen session not foundで止まります。

cronの5項目は、左から分、時、日、月、曜日です。

0 3 * * *は、毎日3時0分という意味になります。

補足

cronに登録したら、翌日まで待たずに手動実行で確認します。 /usr/local/bin/mc-backup.shまたは/usr/local/bin/mc-backup-screen.shを直接実行して成功してから、cronに任せる流れが安全です。

設定後は、登録内容の確認が必要です。

Terminal window
sudo crontab -l

次の日に、バックアップファイルとログが増えているか確認します。

Terminal window
ls -lh /opt/minecraft-backups
tail -n 50 /opt/minecraft-backups/backup.log

サーバーを止めずに稼働中バックアップする方法

稼働中バックアップでsave-all flush、save-off、コピー、save-onを順番に実行し、save-onを忘れると保存停止が続くことを示した図解

サーバーを止めずにバックアップしたい場合は、save-allsave-offsave-onを使う方法もあります。

ただし、save-offを実行したあとにsave-onの再開コマンドを忘れると、以降のワールド保存が停止してしまうリスクがあります。

stopで止める安全な流れが不安なら、先に停止と再起動の基本を押さえておくと作業しやすいです。

マイクラサーバーを手動・自動で安全に再起動する方法を示すサムネイル

【初心者向け】マイクラサーバーを再起動する方法!手動・自動の両方を解説

扱うのは次の2点です。

  • Java版の保存系コマンド
  • 稼働中のサーバーへ保存コマンドを送る方法

コマンドの意味を押さえてから、送り方へ進んでください。

Java版の保存系コマンド

Java版の専用サーバーでは、保存に関係するコマンドを使います。

コマンド役割
save-allサーバーデータを保存する
save-all flushチャンクをすぐ保存するが、短時間止まることがある
save-offワールドファイルへの書き込みを止める
save-onワールドファイルへの書き込みを再開する

各コマンドは、サーバーのコンソールやRCON、screen経由で実行します。

サーバーを止めずに取るときの流れはこうです。

  1. チャンクをすぐ保存する
save-all flush
  1. ワールドファイルへの書き込みを止める
save-off
  1. ワールドと設定ファイルをコピーする
  2. ワールドファイルへの書き込みを再開する
save-on

各コマンドを正しい順番で自動実行させるスクリプトを用意します。

稼働中のサーバーへ保存コマンドを送る方法

screenでMinecraftというセッション名を使っているなら、次のようにコマンドを送れます。

Terminal window
screen -S Minecraft -p 0 -X stuff "save-all flush$(printf '\r')"
screen -S Minecraft -p 0 -X stuff "save-off$(printf '\r')"
screen -S Minecraft -p 0 -X stuff "save-on$(printf '\r')"

万一コピー処理の途中でエラーが発生しても確実にsave-onが実行されるよう、トラップ処理などを組み込んでおく必要があります。

バックアップをサーバー外の別ストレージへ転送する

同じVPS内に保存するだけだと、ディスク障害や誤削除に弱いです。

大事なワールドなら、外部ストレージにも逃がします。

逃がし先の選択肢は3つです。

  • 別のサーバーへ転送して保管する
  • 差分だけを同期して保管する
  • クラウドストレージを使う場合

別のサーバーを持っていないなら、クラウドストレージが一番手軽です。

別のサーバーへ転送して保管する

別VPSや自宅NASへSSH接続できる環境なら、scpでの転送も選べます。

Terminal window
scp "$BACKUP_FILE" [email protected]:/data/minecraft-backups/

これをバックアップスクリプトのtar後に入れます。

SSH鍵を設定してパスワードなしで転送できる状態にしておくと、cronでも動かしやすいです。

差分だけを同期して保管する

差分同期したいならrsyncも使えます。

Terminal window
rsync -av --ignore-existing /opt/minecraft-backups/ [email protected]:/data/minecraft-backups/

--ignore-existingを付けると、すでにあるファイルは上書きしません。

バックアップ先を壊したくない場合に扱いやすいです。

クラウドストレージを使う場合

Google DriveやS3互換ストレージへ送る場合は、rcloneのような同期ツールを使います。

そのかわり、認証設定や保存容量の管理が必要です。

初心者なら、まずサーバー内バックアップを作ってから外部転送を足す順番で進めます。

一気に全部やろうとすると、失敗したときに原因を切り分けにくくなるためです。

Windowsでタスクスケジューラ自動バックアップを作る

Windowsの自宅サーバーなら、PowerShellスクリプトとタスクスケジューラを使います。

ここで例にするのは、サーバーを停止してからZIPを作る方法です。

作業は次の4ステップです。

  • 前提のフォルダ構成
  • PowerShellスクリプトを作る
  • PowerShellを手動実行する
  • タスクスケジューラに登録する

手動実行で動くところまで確認してから、タスクへ登録します。

前提のフォルダ構成

この記事では、次の構成を例にします。

C:\MinecraftServer
C:\MinecraftBackups

実際のフォルダに合わせて変更してください。

PowerShellスクリプトを作る

作るファイルはC:\MinecraftServer\backup.ps1です。

Terminal window
$ServerDir = "C:\MinecraftServer"
$BackupDir = "C:\MinecraftBackups"
$KeepDays = 7
$Date = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$BackupFile = Join-Path $BackupDir "minecraft_$Date.zip"
$LogFile = Join-Path $BackupDir "backup.log"
New-Item -ItemType Directory -Force -Path $BackupDir | Out-Null
"[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] backup start" | Add-Content $LogFile
# 注意:javaの強制終了はデータ破損リスクがあるため、安全に運用するなら後述のDriveBackupV2プラグインを推奨します
Get-Process -Name "java" -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 10
$Targets = @(
"world",
"world_nether",
"world_the_end",
"plugins",
"server.properties",
"ops.json",
"whitelist.json",
"banned-players.json"
)
$ExistingTargets = $Targets | ForEach-Object {
$Path = Join-Path $ServerDir $_
if (Test-Path $Path) { $Path }
}
Compress-Archive -Path $ExistingTargets -DestinationPath $BackupFile -Force
Start-Process -FilePath "java" -ArgumentList "-Xms2G -Xmx2G -jar server.jar nogui" -WorkingDirectory $ServerDir
Get-ChildItem $BackupDir -Filter "minecraft_*.zip" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$KeepDays) } |
Remove-Item -Force
"[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] backup done: $BackupFile" | Add-Content $LogFile

この例は、javaプロセスを止めてからZIPを作ります。

Stop-Process -Forceによる強制終了は、書き込み途中で切断されワールドが破損する危険があります。またPC上の他のJavaアプリも終了してしまうため、事前にコンソールでstopを実行して正常終了させてからバックアップを行ってください。

PaperやSpigotを動かしているなら、プロセスを停止せずに自動バックアップできる後述のDriveBackupV2プラグインを使うのが最も安全です。

補足

PowerShellのCompress-Archiveは手軽ですが、ワールドが大きくなるほどZIP作成に時間がかかります。 数GB規模まで育ったら、7-Zipなどの圧縮ツールへ切り替えてください。

PowerShellを手動実行する

管理者権限のPowerShellで試してください。

Terminal window
powershell -ExecutionPolicy Bypass -File "C:\MinecraftServer\backup.ps1"

C:\MinecraftBackupsにZIPファイルができているか確認します。

手動で動かないうちは、タスクスケジューラに入れない方がいいです。

タスクスケジューラに登録する

コマンドで登録するなら、schtasksを使えます。

毎日3時に実行する例です。

Terminal window
schtasks /Create /SC DAILY /ST 03:00 /TN "Minecraft Backup" /TR "powershell -ExecutionPolicy Bypass -File C:\MinecraftServer\backup.ps1"

登録できたら、すぐ手動実行して確認します。

Terminal window
schtasks /Run /TN "Minecraft Backup"

結果を見る場所は、タスクスケジューラの履歴またはC:\MinecraftBackups\backup.logです。

Paper・Spigotはバックアッププラグインで自動化する

PaperやSpigotを使っているなら、バックアッププラグインで自動化する方法もあります。

代表例は、DriveBackupV2です。

DriveBackupV2は、Google Drive、OneDrive、Dropbox、FTP、WebDAV、S3互換ストレージなどへの保存に対応しています。

Paper、Spigot、Bukkit系サーバーで使えるのが特徴です。

プラグイン方式で押さえるのは次の3点です。

  • プラグイン方式が向いている人
  • DriveBackupV2の基本手順
  • プラグイン方式でも確認すること

導入自体は簡単ですが、保存先の設定だけは自分で確認してください。

プラグイン方式が向いている人

プラグイン方式は、次の人に向いています。

  • PaperやSpigotで運用している
  • コマンドライン操作に慣れていない
  • Google Driveなどへ直接保存したい
  • バックアップの世代管理をプラグイン側でやりたい

一方で、バニラサーバーや統合版サーバーでは使えません。

プラグインを入れられるサーバーかどうかを先に確認します。

Paperの導入前なら、PaperMCの導入手順を先に見ておくとプラグイン方式を選びやすいです。

DriveBackupV2の基本手順

DriveBackupV2は、次の順番で設定します。

  1. DriveBackupV2のjarをダウンロードする
  2. pluginsフォルダへ入れる
  3. サーバーを再起動する
  4. plugins/DriveBackupV2/config.ymlを確認する
  5. 保存先を設定する
  6. 1回手動バックアップを実行する
  7. 復元できるか確認する

配布ページは、DriveBackupV2のCurseForgeページ です。

Google Driveへ連携する場合は、サーバー内で次のようなコマンドを実行して認証します。

/drivebackup linkaccount googledrive

OneDriveなら次のコマンドです。

/drivebackup linkaccount onedrive

Dropboxを使う場合は、指定するサービス名が変わります。

/drivebackup linkaccount dropbox

ローカル保存だけで始めるなら、plugins/DriveBackupV2/config.ymllocal-keep-countを見ます。

local-keep-countは、サーバー内に残すバックアップ数です。

初期値が0の場合、クラウドなどへアップロードするまでの一時保存として扱われます。

サーバー内にも7世代残したいなら、次のように設定します。

local-keep-count: 7

Google DriveやOneDriveなど、リモート側の世代数はkeep-countが設定箇所です。

たとえば20世代まで残すなら、次のようにします。

keep-count: 20

旧PaperやSpigotでworld_netherworld_the_endがわかれている場合は、backup-listへの追加が必要です。

Paper26.1以降はこの2つがworldの中に入るので、worldを入れておけば足ります。

ワールドだけでなく設定も戻したいなら、少なくとも次のものをバックアップ対象に入れておくと扱いやすいです。

  • world
  • world_nether(旧Paper・Spigotのみ)
  • world_the_end(旧Paper・Spigotのみ)
  • plugins
  • server.properties
  • ops.json
  • whitelist.json
  • banned-players.json

backup-listは、次のように、バックアップするフォルダやファイルと、作るZIP名を並べます。

backup-list:
- path: "world"
format: "Backup-world-%FORMAT.zip"
create: true
# 次の2つは旧Paper・Spigot向け。Paper26.1以降はworldに含まれるので不要
- path: "world_nether"
format: "Backup-world_nether-%FORMAT.zip"
create: true
- path: "world_the_end"
format: "Backup-world_the_end-%FORMAT.zip"
create: true
- path: "plugins"
format: "Backup-plugins-%FORMAT.zip"
create: true
- path: "server.properties"
format: "Backup-server-properties-%FORMAT.zip"
create: true

%FORMATには日時が入り、古いバックアップと新しいバックアップを見分けられます。

pluginsフォルダにはプラグイン本体のjarも含まれています。

jarまでバックアップすると容量が大きくなりやすいので、設定ファイルだけで十分な場合はblacklist*.jarを外します。

- path: "plugins"
format: "Backup-plugins-%FORMAT.zip"
create: true
blacklist:
- "**/*.jar"

設定を書き換えた後は、サーバーを再起動するか、次のコマンドでの設定反映が必要です。

/drivebackup reloadconfig

初心者が最初に見るべき設定項目は、次の4つで十分です。

見る項目何を決めるか
backup-list何をバックアップするか
local-keep-countサーバー内に何世代残すか
keep-countクラウド側に何世代残すか
local-save-directoryサーバー内の保存先

プラグイン方式でも確認すること

プラグインを入れても、最初の1回は中身まで開きます。

  • ネザーとエンドのデータも入っているか(旧構造はworld_nether等)
  • pluginsフォルダ内の設定も含まれているか
  • 古いバックアップが自動削除されるか
  • クラウド保存に失敗していないか
  • 手動で復元できるか

バックアッププラグインは便利ですが、設定ミスを見逃すと毎日同じミスが続くのが難点です。

作られたZIPを開いて、ワールド、ネザー、エンド、プラグイン設定が入っていれば、毎日の自動バックアップに任せやすくなります。

レンタルサーバーは管理画面の自動バックアップを確認する

ConoHaやXServer GAMEsなどのマイクラ向けレンタルサーバーでは、管理画面から自動バックアップを設定できます。

初心者なら、この方法が一番楽です。

とはいえ、管理画面バックアップだけに頼り切るのは少し不安です。

バックアップ機能の有無、保存期間、世代数は、サービスや契約プランによって変わります。

使う前に、契約中プランの公式ヘルプや管理画面で現在の条件を確認します。

管理画面で見るのは、バックアップまわりの設定です。

  • 自動バックアップの有無
  • 保存頻度
  • 保存期間
  • 保存世代数
  • 復元時に上書きされる範囲
  • 手動ダウンロードできるか

大きなアップデート前、MODやプラグイン追加前、大型建築イベント前は、自分でも手動バックアップを取ります。

管理画面のバックアップ機能を重視してサーバーを選ぶなら、レンタルサーバー比較も見ておくと候補を絞りやすいです。

マイクラ向けレンタルサーバー3社を比較するサムネイル

【初心者向け】マイクラ用レンタルサーバー比較!おすすめ3社を人数・MOD・料金で選ぶ

cronやスクリプトを書かずに自動化したい場合は、バックアップ機能を持つ管理画面から始めるほうが早いです。

PLAYHUB! 長期割引パスの新規申込が時間課金の月額上限より最大76%OFF。10月9日17時まで

4GBは1ヶ月1,292円。Minecraft managerの自動バックアップなら、cronの設定を書かずに済みます

管理画面でバックアップできるプランを確認する

統合版サーバーの自動バックアップ方法

統合版のBedrock Dedicated Serverでは、Java版とは保存コマンドが違います。

統合版では、バックアップ準備にsave holdsave querysave resumeを使います。

コマンド役割
save holdワールドファイルへの書き込みを一時停止する
save queryバックアップ対象ファイルの情報を確認する
save resumeワールドファイルへの書き込みを再開する

ただし、統合版でも初心者は停止コピーから始める方がわかりやすいです。

サーバーを止めて、worldsserver.propertiesallowlist.jsonpermissions.jsonをコピーします。

稼働中バックアップをする場合は、次の流れです。

  1. save holdを実行する
  2. save queryでバックアップ対象を確認する
  3. 対象ファイルをコピーする
  4. save resumeを必ず実行する

save resumeを忘れると危険なので、最初はテスト環境で試します。

統合版のバックアップは、Java版の記事やプラグイン情報をそのまま当てはめない方が安全です。

自動バックアップの保存頻度と世代数の目安

バックアップは、頻度と保存世代を決めておかないと容量を圧迫します。

迷ったら、次の目安で始めます。

サーバーの状態頻度保存世代
たまに遊ぶ少人数サーバー1日1回7世代
毎日遊ぶサーバー1日1回7から14世代
建築イベント中作業前後に追加イベント終了まで残す
MOD・プラグイン変更前作業前に1回成功確認まで残す
バージョンアップ前作業前に1回しばらく残す

最新1世代のみの保存運用は非常に危険です。荒らし被害やワールド破損に気づくのが遅れた場合、すでに壊れた状態のデータで上書きされて元の正常なデータへ戻せなくなります。最低でも7世代は残してください。

最初は7世代を目安にし、ディスク容量に余裕があれば14世代まで増やすと安心です。

復元テストで自動バックアップが戻せるか確認する

マイクラサーバーのバックアップを毎日作り、サーバー外へ保管し、月1回復元テストする流れを示した図解

バックアップは、復元できて初めて意味が出ます。

spa

ここ、面倒に見えるんですが一度だけでも試しておくと本番でかなり落ち着けます!

自動化したら、月1回はテスト用フォルダへ戻しての確認が必要です。

本番サーバーへいきなり上書きする必要はなく、別フォルダで起動して最低限次を見ます。

  • サーバーが起動するか
  • ワールドに入れるか
  • ネザーとエンドも戻っているか
  • OP権限やホワイトリストが戻っているか
  • プラグイン設定が反映されているか
  • コンソールに大きなエラーが出ていないか

復元テストをしていないバックアップは、まだ半分の状態です。

壊れてから初めて試すと、ファイル名・置き場所・権限・起動コマンドのどこで詰まっているのかわかりにくくなります。

自動バックアップでよくある失敗と対策

ここからは、自動化したあとに見落としやすいところを確認します。

よくある失敗は5つです。

  • サーバー内にしか保存していない
  • ネザーとエンドが抜けている
  • pluginsフォルダを保存していない
  • 自動実行はされているのに中身が空になっている
  • 古いバックアップを消しすぎている

どれも設定した直後は気づきにくく、復元しようとした日に発覚します。

サーバー内にしか保存していない

同じVPSや同じPCの中だけに保存していると、ディスク故障や誤削除に弱いです。

昨日の状態に戻すだけなら便利ですが、あなたのVPSごと消えたときには一緒に失います。

大事なワールドなら、別サーバー、外付けSSD、クラウドストレージにも逃がします。

spa

サーバー本体が故障したときに巻き込まれないよう、別サーバーや外部ストレージへ退避させておくのが安全です。

ネザーとエンドが抜けている

旧PaperやSpigotでは、world_netherworld_the_endが別フォルダに分かれます。

この構造でworldだけを圧縮すると、通常世界だけ戻って、ネザーやエンドの建築が抜けます。

Paper26.1以降はこの2つがworldの中に入るため、worldをまるごと保存すれば抜けません。

最初のバックアップ後に、ZIPやtarの中身を開いて確認します。

pluginsフォルダを保存していない

プラグインサーバーでは、設定やデータの保存先がpluginsフォルダです。

権限、保護、経済、チャット連携のデータは、ワールドではなくpluginsフォルダの中に保存されます。

ワールドだけ戻すと、建物は戻ったのに権限や保護設定が空っぽ、という戻し方になりやすいです。

自動実行はされているのに中身が空になっている

cronに登録できても、スクリプトが成功しているとは限りません。

止まりがちなのは、パスの違い、権限不足、容量不足、サービス名のズレです。

ログを残し、最初の数日はバックアップファイルが増えているか確認します。

古いバックアップを消しすぎている

容量を節約しようとして、最新1個だけにするのは危険です。

荒らしに気づくのが翌日なら、最新バックアップも荒らされた後です。

最低7世代は残す前提で、容量が足りないなら保存先や圧縮方法を見直します。

よくある質問

QMySQL・MariaDBを使うプラグインのデータも、サーバーフォルダの自動バックアップに入りますか?
A

外部データベースへ保存しているデータは入りません。プラグインの接続先を確認し、mariadb-dumpなどでデータベースも別に書き出して、サーバーファイルと同じ世代として保管します。

QサーバーのバックアップZIPを友達へそのまま渡しても大丈夫ですか?
A

おすすめしません。server.propertiesにはRCONパスワードが入る場合があり、プラグイン設定にも認証情報が含まれることがあります。必要なワールドだけを分けるか、暗号化して共有先を限定します。

まとめ:自動バックアップは毎日作る、別に逃がす、復元するまでやる

マイクラサーバーの自動バックアップは、難しい仕組みを作ることが目的ではありません。

いざ壊れたときに戻せる状態を残すのが目的です。

  • Linux VPSはcron、Windowsはタスクスケジューラで自動化する
  • Paper・Spigotはバックアッププラグインも候補にする
  • 統合版はworldssave hold系の違いに注意する
  • 最低7世代を残し、サーバー外にも保存する
  • 月1回は復元テストをする

最初の1本は、サーバーを止めてZIPを作る方法から始めます。

確認するのは難しい仕組みではなく、昨日のワールドに戻せるファイルがあるかだけです。

そこまで確認できたら、Google Driveや別サーバーへの保存、世代数の調整、復元テストを追加します。

バックアップが回り出したら、セキュリティの確認項目で他の穴も一度見ておくと、公開してから慌てずに済みます。