【初心者向け】マイクラサーバーを再起動する方法!手動・自動の両方を解説
2026.10.04広告・PRを含む記事です
マイクラサーバーの自動バックアップ方法!cron・プラグイン・Windows対応

- 手動バックアップを取り忘れて、数日前のデータしか残っていない
- 荒らしや不具合に気づいたときには、壊れた状態のセーブデータしかなかった
- 自動バックアップの仕組みを作りたいけれど、設定が難しそうで手を出せていない
マイクラサーバーのバックアップと復元を手動で行っていると、どうしても更新忘れや、ワールド破損後のデータで上書きしてしまう事故が起こります。
大切なワールドを失わないためには、「サーバー停止・圧縮・世代保存」を毎日決まった時間に自動実行する仕組みを作っておくのが最も確実です。
この記事では、Linux(cron)やWindowsでの定期自動化から、プラグインを使った手軽な設定、復元テストの手順までをわかりやすく整理しました。
読み終えるころには、自分の環境に合った自動バックアップが稼働し、データの取り忘れに怯えることなく安心してマルチプレイを楽しめます。
結論:初心者はサーバーを止める自動バックアップから始める

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

僕のサーバーでも深夜に停止してバックアップしていますが、3分程度で完了します。
アーカイブのサイズはワールドが育つほど増えていき、1週間で1.1GBから1.3GB程度まで伸びました。

| 環境 | おすすめ方法 |
|---|---|
| Linux VPS | systemctlまたはscreenとcronで停止、圧縮、起動 |
| Windows自宅サーバー | PowerShellとタスクスケジューラ |
| Paper・Spigot | DriveBackupV2などのバックアッププラグイン |
| レンタルサーバー | 管理画面の自動バックアップと手動保存を併用 |
| 統合版サーバー | 停止コピー、慣れたらsave hold系を検討 |
迷ったら、毎日1回、7世代保存、サーバー外にも保存、月1回の復元テストから始めます。
凝った仕組みを作ることより、戻せるバックアップを残すことを優先します。
補足
この記事のコマンドは、基本的にコピペして使える形にしています。ただし、/opt/minecraft、server.jar、Minecraft、minecraftなどの名前は、自分の環境に合わせて置き換えます。
自動バックアップ前に確認する3つのこと
自動バックアップを作る前に、次の3つだけ確認します。
ここを先に把握しておくと、どの手順を使えばいいか迷いにくいです。
| 確認すること | 見るコマンド |
|---|---|
| サーバーフォルダの場所 | pwd、ls |
| 起動方法 | systemctlかscreenか |
| サーバーを動かしているユーザー | whoami、screen -list |
今いる場所がサーバーフォルダか確認するなら、次のコマンドを使います。
pwdlsserver.jar、world、server.propertiesが見えれば、そこがサーバーフォルダです。
systemdで管理しているかは、次のコマンドで確認します。
systemctl list-units --type=service | grep minecraftscreenで動かしている場合は、別のコマンドを使います。
screen -listサーバーを動かしているユーザーを確認するなら、次のコマンドです。
whoami自動バックアップで保存すべきファイル

自動化する前に、保存対象を決めます。
ここを間違えると、毎日バックアップしていても復元時に困るので注意が必要です。
保存対象はエディションで変わります。
- Java版で保存するもの
- 統合版で保存するもの
自分が動かしている側だけ確認すれば十分です。
Java版で保存するもの
Java版は、サーバーソフトの種類によってネザーとエンドの保存場所が変わります。
保存対象もそれに合わせます。
| サーバー・構成 | 保存対象の例 |
|---|---|
| バニラ | 使用中のworld全体とサーバー設定 |
| Paper26.1以降 | 使用中のworld全体、サーバー設定、plugins |
| Paper26.1より前 | world、world_nether、world_the_end、サーバー設定、plugins |
| Spigotの3フォルダ構成 | world、world_nether、world_the_end、サーバー設定、plugins |
| Java版共通 | 使用中の全ワールドに加え、server.properties、OP・許可リスト・BAN情報など必要な設定とデータ |
worldは初期名の例です。level-name、追加ワールド、保存先の設定に合わせて読み替えてください。
迷いやすいのはネザーとエンドの保存場所です。
Paper26.1より前や、Spigotの3フォルダ構成では、ネザーとエンドも別フォルダです。worldだけでなく、world_netherとworld_the_endも保存します。
Paper26.1以降の標準3次元は、world/dimensions/minecraft/配下にまとまります。バニラも26.1以降は同じ配下に3次元を保存します。
この構成ではworld全体を保存します。追加ワールドや外部に保存するデータまで含む、という意味ではありません。
サーバーソフトと版、level-name、実際に使用中の保存先を照合します。隣にworld_netherがあるかどうかだけでは、未生成の次元や退避済みの旧データを区別できません。
プラグインを使う場合は、本体・設定・データも保存します。LuckPermsなどは、設定によって外部データベースに情報を保存します。
pluginsだけで足りると判断せず、各プラグインの保存先とバックアップ方法を確認してください。
level-nameやserver-portなど、設定ファイルの中身はserver.propertiesの設定ガイドで先に把握しておくと迷いが減ります。
Paper、Spigot、Vanillaの違いで迷っている場合は、先にサーバーソフトの選び方を見ておくと判断しやすいです。
統合版で保存するもの
統合版サーバーでは、基本的にworldsフォルダを保存します。
許可リストや権限も戻したいなら、次のファイルも含めます。
| ファイル | 役割 |
|---|---|
worlds | ワールドデータ |
server.properties | サーバー設定 |
allowlist.json | 許可リスト |
permissions.json | 権限設定 |
resource_packs | リソースパック |
behavior_packs | ビヘイビアーパック |
統合版のフォルダ構造はJava版とは別です。
Java版のworld_netherのような感覚で探すと迷うので、最初はworldsを中心に確認します。
ホワイトリストやallowlistの設定まで一緒に戻したい場合は、参加制限の設定も確認しておくと迷いにくいです。
環境別に自動バックアップ方法を選ぶ

保存対象が決まったら、次は自分の環境に合う自動化方法を選びます。
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 # Paper26.1より前や、Spigotの3フォルダ構成の例├── world_the_end # 同上├── plugins└── server.properties
/opt/minecraft-backups実際のフォルダ名は、自分のサーバー環境に合わせて指定してください。
world_netherやworld_the_endが見当たらないだけでは、保存構造は確定できません。サーバーソフトと版、level-name、使用中の保存先を確認してください。
/home/minecraft/serverで運用しているなら、スクリプト内のSERVER_DIRをそのパスに変更します。
補足
保存先が異なる場合は、スクリプト内のSERVER_DIRとBACKUP_DIRを自分の環境に合わせて書き換えます。
systemdでサーバーを動かしている場合
VPSで運用しているなら、マイクラサーバーをsystemdのサービスとして動かしている人も多いです。
サービス名がminecraft.serviceなら、次のコマンドで停止と起動をします。
sudo systemctl stop minecraftsudo systemctl start minecraftサービス名が違う場合は、自分の環境に合わせます。
確認は次のコマンドです。
systemctl list-units --type=service | grep minecraftscreenでサーバーを動かしている場合
自宅サーバーやVPSでは、screenでマイクラサーバーを動かしている人もいます。
たとえば、次のように起動しているケースです。
cd /opt/minecraftscreen -dmS Minecraft java -Xms2G -Xmx2G -jar server.jar noguiこの場合は、次のコマンドでは止められません。
systemctl stop minecraftscreenセッションへsayやstopを送って、サーバーが終了してからバックアップします。
screenセッション名の確認が必要です。
screen -listMinecraftという名前で動いていれば、次のようにコマンドを送れます。
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_DIR、BACKUP_DIR、SERVICE_NAMEは環境に合わせて変更します。
初心者は、nanoでファイルを開くのがわかりやすいです。
sudo nano /usr/local/bin/mc-backup.sh開いたら、次の内容をそのまま貼り付けます。
#!/bin/bashset -euo pipefail
SERVER_DIR="/opt/minecraft"BACKUP_DIR="/opt/minecraft-backups"SERVICE_NAME="minecraft"KEEP_DAYS=7DATE="$(date '+%Y-%m-%d_%H-%M-%S')"BACKUP_FILE="${BACKUP_DIR}/minecraft_${DATE}.tar.gz"LOG_FILE="${BACKUP_DIR}/backup.log"SERVER_STOPPED=0WORLD_DIRS=( world # server.propertiesのlevel-nameと同じ名前にする # world_nether # 旧Paper・Spigotの3フォルダ構成なら先頭の#を外す # world_the_end # 同上。追加ワールドもここに並べる)EXTRA_TARGETS=( 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"
# ワールドが1つでも見つからなければ、サーバーを止める前に中止する for world in "${WORLD_DIRS[@]}"; do if [ ! -d "$SERVER_DIR/$world" ]; then echo "world not found: $world. backup aborted." exit 1 fi done
EXISTING_TARGETS=("${WORLD_DIRS[@]}") for target in "${EXTRA_TARGETS[@]}"; do if [ -e "$SERVER_DIR/$target" ]; then EXISTING_TARGETS+=("$target") fi done
systemctl stop "$SERVICE_NAME" SERVER_STOPPED=1
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です。
補足
書き換える項目はSERVER_DIR、BACKUP_DIR、SERVICE_NAME(サービス名)、WORLD_DIRSの4点です。
WORLD_DIRSには、使っているワールドのフォルダをすべて書きます。level-nameを変えたサーバーでworldのままにすると、ワールドが見つからずバックアップは中止されます。
スクリプトが動く順番はこうです。
- バックアップ保存先を作る
WORLD_DIRSのワールドがすべてあるか確かめる- マイクラサーバーを停止する
- ワールド、設定、プラグインを
tar.gzに圧縮する - サーバーを起動する
- 作成から8日以上たったバックアップを削除する
- ログを
backup.logに残す
findの-mtime +7は、経過日数の端数を切り捨てて7より大きいものを選びます。そのため消えるのは、ちょうど7日ではなく8日以上たったファイルです。
削除は日数で決まるので、残るバックアップの数が7個とは限りません。バックアップの失敗が続いても古いものは消えていくため、backup.logのbackup doneも時々確かめてください。
ワールドは必須の対象です。1つでも欠けていれば、サーバーを止める前にworld not foundをログに残して中止します。
設定ファイルやプラグインのEXTRA_TARGETSは、実際にあるものだけを圧縮します。バニラサーバーでpluginsやops.jsonがなくても、エラーで止まりません。
途中でtarが失敗したときはcleanupでサーバーを起動し直し、サーバーが停止したまま放置されるのを防ぎます。
保存対象を確かめるには、自分のサーバーフォルダでlsを実行します。
ls /opt/minecraftscreen版のバックアップスクリプトを作る
screenで運用している場合、スクリプトの保存先は/usr/local/bin/mc-backup-screen.shです。
SCREEN_NAME、SERVER_DIR、BACKUP_DIR、WORLD_DIRS、起動時のメモリ量は自分の環境に合わせます。
screen版は、マイクラサーバーを起動しているユーザーで実行するのが基本です。
rootユーザーのcronから実行すると、一般ユーザー(minecraftなど)が起動したscreenセッションが見えず、停止コマンドが届きません。必ずサーバー起動と同じユーザーのcrontabで登録してください。

screenで起動しているのに、cronから見ると見つからないことがあるんですね!
screenを起動しているユーザーでファイルを開くのが原則です。
nano /usr/local/bin/mc-backup-screen.sh権限エラーになる場合は、先に管理者権限で空ファイルを作って所有者を変えます。
sudo touch /usr/local/bin/mc-backup-screen.shsudo chown minecraft:minecraft /usr/local/bin/mc-backup-screen.shnano /usr/local/bin/mc-backup-screen.shminecraft:minecraftは、自分がサーバーを動かしているユーザー名に置き換えます。
貼り付ける中身はこれです。
#!/bin/bashset -euo pipefail
SERVER_DIR="/opt/minecraft"BACKUP_DIR="/opt/minecraft-backups"SCREEN_NAME="Minecraft"KEEP_DAYS=7START_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=0WORLD_DIRS=( world # server.propertiesのlevel-nameと同じ名前にする # world_nether # 旧Paper・Spigotの3フォルダ構成なら先頭の#を外す # world_the_end # 同上。追加ワールドもここに並べる)EXTRA_TARGETS=( 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"
# ワールドが1つでも見つからなければ、サーバーを止める前に中止する for world in "${WORLD_DIRS[@]}"; do if [ ! -d "$SERVER_DIR/$world" ]; then echo "world not found: $world. backup aborted." exit 1 fi done
EXISTING_TARGETS=("${WORLD_DIRS[@]}") for target in "${EXTRA_TARGETS[@]}"; do if [ -e "$SERVER_DIR/$target" ]; then EXISTING_TARGETS+=("$target") fi done
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
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_NAMEは、screen -listで表示されるセッション名に合わせて指定します。
このスクリプトは、screen内のマイクラサーバーへsave-allとstopを送ります。
screenセッションが消えたことを確認してから圧縮するのが手順です。
圧縮が終わったら、同じscreen名でサーバーを起動し直します。
server.jarの名前やメモリ量が違う場合は、START_COMMANDのjava -Xms2G -Xmx2G -jar server.jar noguiを必ず直します。
ワールドを増やしたらWORLD_DIRSへ、設定ファイルやMODのフォルダを増やしたらEXTRA_TARGETSへ追加します。systemd版と同じ分け方です。
スクリプトに実行権限を付けて手動確認する
スクリプトを実行できるようにします。
sudo chmod +x /usr/local/bin/mc-backup.shscreen版のスクリプトにも、同じように実行権限が必要です。
sudo chmod +x /usr/local/bin/mc-backup-screen.sh手動で一度動かします。
sudo /usr/local/bin/mc-backup.shscreen版の場合は実行するコマンドが別です。
sudo /usr/local/bin/mc-backup-screen.shただし、screenを一般ユーザーで起動している場合は、sudoを付けずに同じユーザーで試します。
/usr/local/bin/mc-backup-screen.shその場合、バックアップ保存先へ書き込める権限も必要です。
sudo mkdir -p /opt/minecraft-backupssudo chown minecraft:minecraft /opt/minecraft-backupsminecraft:minecraftの部分は、自分がサーバーを動かしているユーザー名に変えます。
バックアップファイルができているか確認します。
ls -lh /opt/minecraft-backupsログの確認も必要です。
tail -n 50 /opt/minecraft-backups/backup.logこの時点で失敗しているなら、cronに入れる前に原因を直します。
手動実行で失敗するものは、自動化しても同じ結果になるのが通例です。
毎日3時に自動実行するよう登録する
crontab -eを開きます。
sudo crontab -escreen版で、一般ユーザーのscreenセッションを使っている場合はsudoを付けません。
crontab -e毎日午前3時に実行するなら、次の1行を追加します。
0 3 * * * /usr/local/bin/mc-backup.shscreen版なら、登録するスクリプト名を変えます。
0 3 * * * /usr/local/bin/mc-backup-screen.shscreen版は、cronを登録したユーザーとscreenを起動したユーザーを一致させるのが条件です。
ここがズレると、screen session not foundで止まります。
cronの5項目は、左から分、時、日、月、曜日です。
0 3 * * *は、毎日3時0分という意味になります。
補足
cron登録後はスクリプトを直接手動実行し、バックアップが正常に作成されるか確認します。
設定後は、登録内容の確認が必要です。
sudo crontab -l次の日に、バックアップファイルとログが増えているか確認します。
ls -lh /opt/minecraft-backupstail -n 50 /opt/minecraft-backups/backup.logサーバーを止めずに稼働中バックアップする方法

稼働中のバックアップは、使うサーバーソフト・版・追加機能に合わせた仕組みが必要です。初心者は、この記事の前半で紹介した完全停止後のバックアップを選んでください。
以下はJava版の保存コマンドを使う実装例の説明です。統合版にはそのまま使えません。MOD・プラグイン・外部データベースの保存まで、同じコマンドで止まるとは限りません。
stopで止める流れが不安なら、先に停止と再起動の基本を確認してください。
Java版の保存系コマンド
| コマンド | 役割と注意 |
|---|---|
save-off | ワールドの自動保存を無効にする。サーバー全体の書き込み停止を保証するものではない |
save-all | ワールドなどの保存を指示する。自動保存とは別の処理 |
save-all flush | 保存に加えてディスクへの反映を指示する。処理中に負荷がかかる場合がある |
save-on | ワールドの自動保存を再開する。送信だけでなく成功も確認する |
itzgのJava版向けバックアップ実装の既定設定では、RCONでsave-off、save-all flush、バックアップ処理、save-onの順に進みます。save-offの成功後に、スクリプト終了時も保存再開を試みる処理を登録しています。
この順番だけで、どの構成でも安全にコピーできるとは断定できません。Paper公式フォーラムの管理者による説明(2022年)でも、save-offだけではディスク上のデータ変更を完全には防げないとされています。古い版についての説明なので、現在の全バージョンに同じ待ち時間を当てはめないでください。
稼働中の方式を選ぶなら、利用する版と追加機能に対応したバックアップツールの手順に従い、少なくとも次を確認します。
save-offが成功したことを確認し、エラーや中断時にもsave-onへ戻す処理を用意するsave-all flushの成功・保存完了を確認する。固定の秒数待ちだけで完了したと判断しない- 対象データをコピーし、処理結果を確認する。失敗したコピーを正常なバックアップとして扱わない
- コピーの成否にかかわらず
save-onの成功を確認する。再開できなければ管理者へ通知し、放置しない
終了時の処理を用意しても、強制終了や通信断などでは実行・成功しない場合があります。通知と復旧方法も必要です。コピーしたデータは別環境で復元を試し、ワールドだけでなく必要な追加機能のデータも戻るか確認してください。
稼働中のサーバーへ保存コマンドを送る方法
サーバーのコンソールやRCONでは、コマンドの返答を確認しながら進めます。screenのstuffは文字列を送るだけなので、そのコマンドの成功や保存完了を確認する仕組みにはなりません。
次は、screenのMinecraftセッションへ保存再開を送る送信方法だけの例です。バックアップ処理は含みません。
screen -S Minecraft -p 0 -X stuff "save-on$(printf '\r')"送信後はサーバーのコンソールやログで、自動保存が再開したことを確認します。save-off・保存・コピー・save-onを確認なしで連続送信するだけの自動化は避けてください。成功確認や失敗時の復旧を用意できない場合は、完全停止してコピーする方式を使いましょう。
バックアップをサーバー外の別ストレージへ転送する
同じVPS内に保存するだけだと、ディスク障害や誤削除に弱いです。
大事なワールドなら、外部ストレージにも逃がします。
逃がし先の選択肢は3つです。
- 別のサーバーへ転送して保管する
- 差分だけを同期して保管する
- クラウドストレージを使う場合
別のサーバーを持っていないなら、クラウドストレージが一番手軽です。
別のサーバーへ転送して保管する
別VPSや自宅NASへSSH接続できる環境なら、scpでの転送も選べます。
これをバックアップスクリプトのtar後に入れます。
SSH鍵を設定してパスワードなしで転送できる状態にしておくと、cronでも動かしやすいです。
差分だけを同期して保管する
差分同期したいならrsyncも使えます。
--ignore-existingを付けると、すでにあるファイルは上書きしません。
バックアップ先を壊したくない場合に扱いやすいです。
クラウドストレージを使う場合
Google DriveやS3互換ストレージへ送る場合は、rcloneのような同期ツールを使います。
そのかわり、認証設定や保存容量の管理が必要です。
初心者なら、まずサーバー内バックアップを作ってから外部転送を足す順番で進めます。
一気に全部やろうとすると、失敗したときに原因を切り分けにくくなるためです。
Windowsでタスクスケジューラ自動バックアップを作る
Windowsの自宅サーバーなら、PowerShellスクリプトとタスクスケジューラを使います。
ここで例にするのは、RCONでサーバーへstopを送り、正常に終了したのを確かめてからZIPを作る方法です。
作業は次の5ステップです。
- 前提のフォルダ構成
- RCONを有効にしてmcrconを置く
- PowerShellスクリプトを作る
- PowerShellを手動実行する
- タスクスケジューラに登録する
手動実行で動くところまで確認してから、タスクへ登録します。
前提のフォルダ構成
この記事では、次の構成を例にします。
C:\MinecraftServerC:\MinecraftBackups実際のフォルダに合わせて変更してください。
RCONを有効にしてmcrconを置く
タスクスケジューラから動くスクリプトは、サーバーのコンソールへ直接入力できません。そこでRCONを使い、コンソールと同じstopを送ります。
サーバーを止めた状態でserver.propertiesを開き、次の3行を設定します。
enable-rcon=truercon.port=25575rcon.password=推測されにくい長いパスワードRCONの25575番ポートは、ルーターでポート開放しないでください。スクリプトは同じPCの中から接続するので、外へ開ける必要はありません。
送信には、コマンドラインのRCONクライアントmcrconを使います。mcrcon-0.7.2-windows-x86-64.zipを展開し、mcrcon.exeをC:\MinecraftServerに置いてください。
PowerShellスクリプトを作る
作るファイルはC:\MinecraftServer\backup.ps1です。
$ServerDir = "C:\MinecraftServer"$BackupDir = "C:\MinecraftBackups"$Mcrcon = "C:\MinecraftServer\mcrcon.exe"$RconPort = 25575$RconPassword = "server.propertiesのrcon.passwordと同じ値"$ServerPort = 25565 # server.propertiesのserver-port$StartArgs = "-Xms2G -Xmx2G -jar server.jar nogui"$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"$WorldDirs = @( "world" # server.propertiesのlevel-nameと同じ名前にする # "world_nether" # 旧Paper・Spigotの3フォルダ構成なら先頭の#を外す # "world_the_end" # 同上。追加ワールドもここに並べる)$ExtraTargets = @( "plugins", "server.properties", "ops.json", "whitelist.json", "banned-players.json")
function Write-Log($Message) { "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] $Message" | Add-Content $LogFile}
New-Item -ItemType Directory -Force -Path $BackupDir | Out-NullWrite-Log "backup start"
# ワールドが1つでも見つからなければ、サーバーを止める前に中止するforeach ($World in $WorldDirs) { if (-not (Test-Path (Join-Path $ServerDir $World) -PathType Container)) { Write-Log "world not found: $World. backup aborted." exit 1 }}
# server-portで待ち受けているプロセスを、このサーバーとして特定する$ServerPids = @(Get-NetTCPConnection -LocalPort $ServerPort -State Listen -ErrorAction SilentlyContinue | Select-Object -ExpandProperty OwningProcess -Unique)
if ($ServerPids.Count -gt 1) { Write-Log "multiple processes on port $ServerPort. backup aborted." exit 1}
$WasRunning = $ServerPids.Count -eq 1
if ($WasRunning) { $ServerPid = $ServerPids[0]
# コンソールと同じstopをRCONで送り、ワールドを保存して終了させる & $Mcrcon -H 127.0.0.1 -P $RconPort -p $RconPassword -w 5 "say Server will stop for backup." "stop" $RconExit = $LASTEXITCODE
Wait-Process -Id $ServerPid -Timeout 120 -ErrorAction SilentlyContinue
# 終了しなければ強制終了せず、圧縮もしないで中止する if (Get-Process -Id $ServerPid -ErrorAction SilentlyContinue) { Write-Log "server did not stop (mcrcon exit code: $RconExit). backup aborted." exit 1 }}
$Paths = @($WorldDirs + $ExtraTargets | ForEach-Object { Join-Path $ServerDir $_ } | Where-Object { Test-Path $_ })
try { Compress-Archive -Path $Paths -DestinationPath $BackupFile -Force -ErrorAction Stop
# 圧縮に成功したときだけ古いバックアップを削除する Get-ChildItem $BackupDir -Filter "minecraft_*.zip" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$KeepDays) } | Remove-Item -Force
Write-Log "backup done: $BackupFile"}catch { Write-Log "backup failed: $_"}finally { # 動いていたサーバーだけ起動し直す if ($WasRunning) { Start-Process -FilePath "java" -ArgumentList $StartArgs -WorkingDirectory $ServerDir }}止める相手は、server-portで待ち受けているプロセスだけです。JAR名では探さないので、別フォルダで同じserver.jarを動かすサーバーを巻き込みません。
stopを送ってから120秒たってもサーバーが終了しなければ、強制終了せずにバックアップを中止します。このときサーバーは動いたままなので、backup.logを見て原因を確かめてください。
$StartArgsは、ふだんサーバーを起動するときのJAR名とメモリ量に合わせて直します。
Stop-ProcessやタスクマネージャーでJavaを終了させる止め方は、ワールドを保存せずにプロセスを終わらせます。書き込み途中で止まるとワールドが壊れるので、バックアップの自動化には使わないでください。
PaperやSpigotを動かしているなら、サーバーを止めずに自動バックアップできる後述のDriveBackupV2プラグインも選べます。
補足
PowerShellのCompress-Archiveは、2GBを超えるファイルを圧縮できず、隠し属性のファイルやフォルダは黙って飛ばします。ワールドやプラグインのフォルダに該当するファイルがあるなら、7-Zipなどの圧縮ツールへ切り替えてください。
どのツールでも、できたZIPを別の場所に展開し、ワールドが入っているかを確かめておきます。
PowerShellを手動実行する
管理者権限のPowerShellで試してください。
powershell -ExecutionPolicy Bypass -File "C:\MinecraftServer\backup.ps1"C:\MinecraftBackupsにZIPファイルができているか確認します。
手動で動かないうちは、タスクスケジューラに入れない方がいいです。
タスクスケジューラに登録する
コマンドで登録するなら、schtasksを使えます。
毎日3時に実行する例です。
schtasks /Create /SC DAILY /ST 03:00 /TN "Minecraft Backup" /TR "powershell -ExecutionPolicy Bypass -File C:\MinecraftServer\backup.ps1"登録できたら、すぐ手動実行して確認します。
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は、次の順番で設定します。
- DriveBackupV2のjarをダウンロードする
pluginsフォルダへ入れる- サーバーを再起動する
plugins/DriveBackupV2/config.ymlを確認する- 保存先を設定する
- 1回手動バックアップを実行する
- 復元できるか確認する
配布ページは、DriveBackupV2のCurseForgeページ です。
Google Driveへ連携する場合は、サーバー内で次のようなコマンドを実行して認証します。
/drivebackup linkaccount googledriveOneDriveなら次のコマンドです。
/drivebackup linkaccount onedriveDropboxを使う場合は、指定するサービス名が変わります。
/drivebackup linkaccount dropboxローカル保存だけで始めるなら、plugins/DriveBackupV2/config.ymlのlocal-keep-countを見ます。
local-keep-countは、サーバー内に残すバックアップ数です。
初期値が0の場合、クラウドなどへアップロードするまでの一時保存として扱われます。
サーバー内にも7世代残したいなら、次のように設定します。
local-keep-count: 7Google DriveやOneDriveなど、リモート側の世代数はkeep-countが設定箇所です。
たとえば20世代まで残すなら、次のようにします。
keep-count: 20旧PaperやSpigotでworld_nether、world_the_endがわかれている場合は、backup-listへの追加が必要です。
Paper26.1以降はこの2つがworldの中に入るので、worldを入れておけば足ります。
ワールドだけでなく設定も戻したいなら、少なくとも次のものをバックアップ対象に入れておくと扱いやすいです。
worldworld_nether(旧Paper・Spigotのみ)world_the_end(旧Paper・Spigotのみ)pluginsserver.propertiesops.jsonwhitelist.jsonbanned-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やプラグイン追加前、大型建築イベント前は、自分でも手動バックアップを取ります。
管理画面のバックアップ機能を重視してサーバーを選ぶなら、レンタルサーバー比較も見ておくと候補を絞りやすいです。
cronやスクリプトを書かずに自動化したい場合は、バックアップ機能を持つ管理画面から始めるほうが早いです。
統合版サーバーの自動バックアップ方法
統合版のサーバーでは、Java版とは保存コマンドが違い、書き込みを止めてからコピーし、再開するまでを3つのコマンドで行います。
| コマンド | 役割 |
|---|---|
save hold | ワールドファイルへの書き込みを一時停止する |
save query | バックアップ対象ファイルの情報を確認する |
save resume | ワールドファイルへの書き込みを再開する |
ただし、統合版でも初心者は停止コピーから始めるほうがわかりやすいです。
サーバーを止めて、worlds、server.properties、allowlist.json、permissions.jsonをコピーします。
稼働中バックアップをする場合は、次の流れです。
save holdを実行するsave queryでバックアップ対象を確認する- 対象ファイルをコピーする
save resumeを必ず実行する
save resumeを忘れると危険なので、最初はテスト環境で試します。
統合版のバックアップは、Java版の記事やプラグイン情報をそのまま当てはめない方が安全です。
自動バックアップの保存頻度と世代数の目安
バックアップは、頻度と保存世代を決めておかないと容量を圧迫します。
迷ったら、次の目安で始めます。
| サーバーの状態 | 頻度 | 保存世代 |
|---|---|---|
| たまに遊ぶ少人数サーバー | 1日1回 | 7世代 |
| 毎日遊ぶサーバー | 1日1回 | 7から14世代 |
| 建築イベント中 | 作業前後に追加 | イベント終了まで残す |
| MOD・プラグイン変更前 | 作業前に1回 | 成功確認まで残す |
| バージョンアップ前 | 作業前に1回 | しばらく残す |
最新1世代のみの保存運用は非常に危険です。
荒らし被害やワールド破損に気づくのが遅れた場合、すでに壊れた状態のデータで上書きされて元の正常なデータへ戻せなくなります。最低でも7世代は残してください。
最初は7世代を目安にし、ディスク容量に余裕があれば14世代まで増やすと安心です。
復元テストで自動バックアップが戻せるか確認する

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

一度でもテスト用フォルダへ戻して起動しておくと、本当にワールドが壊れた日に「この手順で戻せる」とわかった状態で作業できます!
自動化したら、月1回はテスト用フォルダへ戻しての確認が必要です。
本番サーバーへいきなり上書きする必要はなく、別フォルダで起動して最低限次を見ます。
復元テストをしていないバックアップは、まだ半分の状態です。
壊れてから初めて試すと、ファイル名・置き場所・権限・起動コマンドのどこで詰まっているのかわかりにくくなります。
自動バックアップでよくある失敗と対策
ここからは、自動化したあとに見落としやすいところを確認します。
よくある失敗は5つです。
- サーバー内にしか保存していない
- ネザーとエンドが抜けている
- pluginsフォルダを保存していない
- 自動実行はされているのに中身が空になっている
- 古いバックアップを消しすぎている
どれも設定した直後は気づきにくく、復元しようとした日に発覚します。
サーバー内にしか保存していない
同じVPSや同じPCの中だけに保存していると、ディスク故障や誤削除に弱いです。
昨日の状態に戻すだけなら便利ですが、あなたのVPSごと消えたときには一緒に失います。
大事なワールドなら、別サーバー、外付けSSD、クラウドストレージにも逃がします。

バックアップをサーバーと同じディスクにだけ置くと、ディスクが壊れた日にワールドと一緒に消えます。上の外付けHDDや別サーバーへコピーしておきましょう。
ネザーとエンドが抜けている
旧PaperやSpigotでは、world_netherとworld_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パスワードが入る場合があり、プラグイン設定にも認証情報が含まれることがあります。必要なワールドだけを分けるか、暗号化して共有先を限定します。
まとめ:自動バックアップは毎日作る、別に逃がす、復元するまでやる
毎日の自動バックアップが動き、壊れた日に昨日のワールドへ戻せれば完成です。
最初の1本は、サーバーを止めてZIPを作る形で十分です。翌朝、保存先にその日のZIPが増え、中にワールドのフォルダが入っていれば自動化は動いています。
動き出したら、最低7世代を残してサーバーの外にもコピーし、月に1回は実際に戻してみてください。戻せると確かめたら、次はセキュリティのチェックリストの9分野から、まだ手をつけていない項目を探す番です。
cronやタスクスケジューラを自分で書くのが負担なら、管理画面で自動バックアップを設定できるレンタルサーバーに任せると、スクリプトなしで毎日のバックアップが残ります。









