【2025年8月最新】マイクラサーバー自動バックアップ完全攻略!rcloneでクラウド保存

【2025年8月最新】マイクラサーバー自動バックアップ完全攻略!rcloneでクラウド保存






【2025年8月最新】マイクラサーバー自動バックアップ完全攻略!rcloneでクラウド保存


【2025年8月最新】マイクラサーバー自動バックアップ完全攻略!

rcloneでクラウド保存・データ消失リスクを完全回避

2025年8月最新情報対応

※本記事は2025年8月時点の情報に基づいて執筆されています。内容の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。

「大切なワールドデータが消えたらどうしよう…」「手動バックアップは面倒くさい!」そんな不安を解消する自動バックアップシステムの構築方法を徹底解説します。rcloneを使ったクラウドバックアップで、データ消失リスクを完全に回避しましょう!

自動バックアップシステム構成図

画像出典: Vultr Docs – Automatic Backup System

目次

なぜ自動バックアップが必要なのか?

マインクラフトサーバーを運営していると、様々なリスクでデータが失われる可能性があります:

データ消失の主な原因

  • サーバークラッシュ – 突然の停止によるワールド破損
  • ストレージ故障 – HDDやSSDの物理的な故障
  • 人為的ミス – 誤操作によるファイル削除
  • マルウェア感染 – ランサムウェアなどの攻撃
  • 自然災害 – データセンターの被災

手動バックアップの問題点

  • 定期実行を忘れやすい
  • 作業量が多く継続困難
  • バックアップのタイミングがばらつく
  • ローカル保存のみでリスク分散不足

自動バックアップシステムの全体構成

今回構築するシステムの特徴:

機能 仕様 メリット
定期実行 cron/systemdによる自動化 手動作業不要
増分バックアップ 変更分のみ保存 ストレージ効率が良い
クラウド保存 Google Drive/AWS S3等 災害対策・リスク分散
世代管理 古いバックアップの自動削除 ストレージ容量管理
圧縮保存 tar.gz形式での保存 転送時間短縮

rcloneバックアップ構成

画像出典: Rad Web Hosting – VPS Backup with Rclone

ステップ1:rcloneのインストールと設定

1. rcloneのインストール

Ubuntu/Debian系の場合:

# 公式インストールスクリプト(推奨)
curl https://rclone.org/install.sh | sudo bash

# パッケージマネージャー経由
sudo apt update
sudo apt install rclone

CentOS/RHEL系の場合:

# EPELリポジトリ有効化
sudo yum install epel-release
sudo yum install rclone

# または直接ダウンロード
wget https://downloads.rclone.org/rclone-current-linux-amd64.rpm
sudo rpm -ivh rclone-current-linux-amd64.rpm

2. Google Driveとの連携設定

# rclone設定開始
rclone config

# 設定手順:
# n) New remote
# name> gdrive
# Storage> google drive
# client_id> (空白でEnter)
# client_secret> (空白でEnter)
# scope> 1 (Full access)
# root_folder_id> (空白でEnter)
# service_account_file> (空白でEnter)
# Edit advanced config? > n
# Use auto config? > y (ブラウザが開く)

3. 接続テスト

# Google Drive内容確認
rclone ls gdrive:

# テストフォルダ作成
rclone mkdir gdrive:minecraft-backups

# 動作確認
echo “test” > test.txt
rclone copy test.txt gdrive:minecraft-backups/
rclone ls gdrive:minecraft-backups/

ステップ2:基本バックアップスクリプトの作成

シンプルなバックアップスクリプト

#!/bin/bash
# minecraft_backup.sh

# 設定変数
MINECRAFT_DIR=”/opt/minecraft”
BACKUP_DIR=”/tmp/minecraft-backup”
RCLONE_REMOTE=”gdrive:minecraft-backups”
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME=”minecraft_backup_${DATE}”

# ログ設定
LOGFILE=”/var/log/minecraft-backup.log”
exec 1> >(tee -a “$LOGFILE”)
exec 2>&1

echo “=== Minecraft Backup Started: $(date) ===”

# MinecraftサーバーにSave-allコマンド送信
if screen -list | grep -q “minecraft”; then
echo “Sending save-all command to server…”
screen -S minecraft -p 0 -X stuff “save-all$(printf \\r)”
screen -S minecraft -p 0 -X stuff “save-off$(printf \\r)”
sleep 10

SAVE_ENABLED=true
else
echo “Minecraft server not running in screen session”
SAVE_ENABLED=false
fi

# バックアップディレクトリ準備
mkdir -p “$BACKUP_DIR”
cd “$BACKUP_DIR”

# ワールドデータの圧縮
echo “Creating compressed backup…”
tar -czf “${BACKUP_NAME}.tar.gz” -C “$MINECRAFT_DIR” \
world world_nether world_the_end \
server.properties whitelist.json ops.json \
banned-players.json banned-ips.json

# セーブ機能を再有効化
if [ “$SAVE_ENABLED” = true ]; then
screen -S minecraft -p 0 -X stuff “save-on$(printf \\r)”
echo “Save enabled on server”
fi

# クラウドにアップロード
echo “Uploading to cloud storage…”
rclone copy “${BACKUP_NAME}.tar.gz” “$RCLONE_REMOTE” –progress

# ローカルの一時ファイル削除
rm -f “${BACKUP_NAME}.tar.gz”

echo “=== Backup Completed: $(date) ===”
echo “”

ステップ3:高度なバックアップスクリプト

機能充実版のスクリプト

#!/bin/bash
# advanced_minecraft_backup.sh

# 設定ファイル読み込み
CONFIG_FILE=”/etc/minecraft-backup/config.conf”
if [ -f “$CONFIG_FILE” ]; then
source “$CONFIG_FILE”
else
echo “Config file not found: $CONFIG_FILE”
exit 1
fi

# デフォルト設定
MINECRAFT_DIR=”${MINECRAFT_DIR:-/opt/minecraft}”
BACKUP_DIR=”${BACKUP_DIR:-/tmp/minecraft-backup}”
RCLONE_REMOTE=”${RCLONE_REMOTE:-gdrive:minecraft-backups}”
RETENTION_DAYS=”${RETENTION_DAYS:-30}”
MAX_BACKUP_SIZE=”${MAX_BACKUP_SIZE:-1000000000}” # 1GB
COMPRESSION_LEVEL=”${COMPRESSION_LEVEL:-6}”

# 関数定義
log_message() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” | tee -a “$LOGFILE”
}

send_discord_notification() {
local message=”$1″
local status=”$2″
local color=”65280″ # 緑色

if [ “$status” = “error” ]; then
color=”16711680″ # 赤色
elif [ “$status” = “warning” ]; then
color=”16776960″ # 黄色
fi

if [ -n “$DISCORD_WEBHOOK” ]; then
curl -H “Content-Type: application/json” \
-d “{\”embeds\”:[{\”color\”:$color,\”title\”:\”Minecraft Backup\”,\”description\”:\”$message\”}]}” \
“$DISCORD_WEBHOOK” &>/dev/null
fi
}

cleanup_old_backups() {
log_message “Cleaning up old backups…”

# ローカルの古いバックアップ削除
find “$BACKUP_DIR” -name “minecraft_backup_*.tar.gz” -mtime +7 -delete

# リモートの古いバックアップ削除
rclone delete “$RCLONE_REMOTE” –min-age “${RETENTION_DAYS}d” –include “minecraft_backup_*.tar.gz”

log_message “Cleanup completed”
}

check_disk_space() {
local required_space=”$1″
local available_space=$(df “$BACKUP_DIR” | awk ‘NR==2 {print $4}’)
available_space=$((available_space * 1024)) # KBをバイトに変換

if [ “$available_space” -lt “$required_space” ]; then
log_message “ERROR: Insufficient disk space. Required: $required_space, Available: $available_space”
return 1
fi
return 0
}

# メイン処理開始
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME=”minecraft_backup_${DATE}”
LOGFILE=”/var/log/minecraft-backup.log”

log_message “=== Advanced Minecraft Backup Started ===”

# 前提条件チェック
if [ ! -d “$MINECRAFT_DIR” ]; then
log_message “ERROR: Minecraft directory not found: $MINECRAFT_DIR”
send_discord_notification “❌ Backup failed: Minecraft directory not found” “error”
exit 1
fi

# ディスク容量チェック
ESTIMATED_SIZE=$(du -sb “$MINECRAFT_DIR” | cut -f1)
if ! check_disk_space $((ESTIMATED_SIZE * 2)); then
send_discord_notification “❌ Backup failed: Insufficient disk space” “error”
exit 1
fi

# バックアップ処理…(省略)

log_message “=== Backup Process Completed ===”

ステップ4:設定ファイルの作成

バックアップ設定ファイル

# /etc/minecraft-backup/config.conf

# 基本設定
MINECRAFT_DIR=”/opt/minecraft”
BACKUP_DIR=”/tmp/minecraft-backup”
RCLONE_REMOTE=”gdrive:minecraft-backups”

# 保存期間設定(日数)
RETENTION_DAYS=30

# バックアップサイズ制限(バイト)
MAX_BACKUP_SIZE=2000000000 # 2GB

# 圧縮レベル(1-9、9が最高圧縮)
COMPRESSION_LEVEL=6

# 通知設定
DISCORD_WEBHOOK=”https://discord.com/api/webhooks/your-webhook-url”

# ログ設定
LOGFILE=”/var/log/minecraft-backup.log”

# 除外パターン
EXCLUDE_PATTERNS=”*.tmp,*.log,cache/*,temp/*”

ステップ5:自動実行の設定

cronによる定期実行設定

# crontab設定
sudo crontab -e

# 毎日午前2時にバックアップ実行
0 2 * * * /opt/scripts/advanced_minecraft_backup.sh

# 毎6時間ごとに実行(より頻繁なバックアップ)
0 */6 * * * /opt/scripts/advanced_minecraft_backup.sh

# 毎週日曜日の午前1時に完全バックアップ
0 1 * * 0 /opt/scripts/full_minecraft_backup.sh

systemdサービスによる管理

# /etc/systemd/system/minecraft-backup.service
[Unit]
Description=Minecraft Server Backup
After=network.target

[Service]
Type=oneshot
User=minecraft
Group=minecraft
ExecStart=/opt/scripts/advanced_minecraft_backup.sh
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/minecraft-backup.timer
[Unit]
Description=Minecraft Backup Timer
Requires=minecraft-backup.service

[Timer]
OnCalendar=daily
RandomizedDelaySec=1800
Persistent=true

[Install]
WantedBy=timers.target

サービス有効化コマンド

# サービス登録
sudo systemctl daemon-reload
sudo systemctl enable minecraft-backup.timer
sudo systemctl start minecraft-backup.timer

# 状態確認
sudo systemctl status minecraft-backup.timer
sudo systemctl list-timers minecraft-backup.timer

ステップ6:AWS S3との連携設定

S3バケットの設定

# rclone S3設定
rclone config

# 設定項目:
# name> s3backup
# Storage> Amazon S3
# provider> AWS
# env_auth> false
# access_key_id> YOUR_ACCESS_KEY
# secret_access_key> YOUR_SECRET_KEY
# region> ap-northeast-1
# endpoint> (空白)
# location_constraint> ap-northeast-1

S3用バックアップスクリプト

#!/bin/bash
# s3_backup_script.sh

# S3設定
S3_BUCKET=”s3backup:minecraft-backups-bucket”
S3_STORAGE_CLASS=”STANDARD_IA” # コスト削減

# ライフサイクル管理
upload_to_s3() {
local file=”$1″
local remote_path=”$2″

# ストレージクラス指定してアップロード
rclone copy “$file” “$remote_path” \
–s3-storage-class “$S3_STORAGE_CLASS” \
–transfers 8 \
–checkers 16 \
–progress
}

# 古いバックアップをGlacierに移動
archive_old_backups() {
local days_old=30

rclone ls “$S3_BUCKET” | while read -r size date time filename; do
file_date=$(echo “$filename” | grep -o ‘[0-9]\{8\}’)
if [ -n “$file_date” ]; then
file_timestamp=$(date -d “$file_date” +%s)
current_timestamp=$(date +%s)
days_diff=$(( (current_timestamp – file_timestamp) / 86400 ))

if [ $days_diff -gt $days_old ]; then
log_message “Moving $filename to Glacier storage”
# S3のライフサイクルポリシーで自動処理される
fi
fi
done
}

ステップ7:バックアップの検証と復元

バックアップ整合性チェック

#!/bin/bash
# backup_verification.sh

verify_backup() {
local backup_file=”$1″
local temp_dir=”/tmp/backup_verify_$$”

echo “Verifying backup: $backup_file”

# 一時ディレクトリ作成
mkdir -p “$temp_dir”

# アーカイブの整合性確認
if tar -tzf “$backup_file” > /dev/null 2>&1; then
echo “✓ Archive integrity OK”
else
echo “✗ Archive corrupted”
return 1
fi

# 展開テスト
cd “$temp_dir”
if tar -xzf “$backup_file” > /dev/null 2>&1; then
echo “✓ Extraction test OK”

# 重要ファイルの存在確認
if [ -d “world” ] && [ -f “server.properties” ]; then
echo “✓ Essential files present”
else
echo “✗ Missing essential files”
rm -rf “$temp_dir”
return 1
fi
else
echo “✗ Extraction failed”
rm -rf “$temp_dir”
return 1
fi

# 一時ファイル削除
rm -rf “$temp_dir”
echo “✓ Backup verification completed”
return 0
}

災害復旧用の復元スクリプト

#!/bin/bash
# disaster_recovery.sh

MINECRAFT_DIR=”/opt/minecraft”
BACKUP_SOURCE=”gdrive:minecraft-backups”
RECOVERY_DIR=”/opt/minecraft-recovery”

restore_from_backup() {
local backup_date=”$1″
local backup_file=”minecraft_backup_${backup_date}.tar.gz”

echo “=== Disaster Recovery Started ===”
echo “Target backup: $backup_file”

# 既存データのバックアップ
if [ -d “$MINECRAFT_DIR” ]; then
echo “Creating safety backup of current data…”
tar -czf “/tmp/pre_recovery_backup_$(date +%Y%m%d_%H%M%S).tar.gz” -C “$MINECRAFT_DIR” .
fi

# リカバリディレクトリ準備
mkdir -p “$RECOVERY_DIR”
cd “$RECOVERY_DIR”

# バックアップファイルのダウンロード
echo “Downloading backup file…”
if ! rclone copy “$BACKUP_SOURCE/$backup_file” . –progress; then
echo “ERROR: Failed to download backup file”
exit 1
fi

# バックアップの検証
if ! tar -tzf “$backup_file” > /dev/null 2>&1; then
echo “ERROR: Backup file is corrupted”
exit 1
fi

# Minecraftサーバー停止
if screen -list | grep -q minecraft; then
echo “Stopping Minecraft server…”
screen -S minecraft -p 0 -X stuff “stop$(printf \\r)”
sleep 10
fi

# データ復元
echo “Restoring data…”
mkdir -p “$MINECRAFT_DIR”
tar -xzf “$backup_file” -C “$MINECRAFT_DIR”

# 権限修正
chown -R minecraft:minecraft “$MINECRAFT_DIR”
chmod -R 755 “$MINECRAFT_DIR”

echo “=== Recovery Completed ===”
echo “Please verify the restoration and restart the server manually”

# 一時ファイル削除
rm -f “$backup_file”
}

ステップ8:監視とアラート機能

バックアップ監視スクリプト

#!/bin/bash
# backup_monitor.sh

BACKUP_REMOTE=”gdrive:minecraft-backups”
ALERT_HOURS=26 # 26時間以内にバックアップがない場合アラート
LOG_FILE=”/var/log/backup-monitor.log”

check_recent_backup() {
local current_time=$(date +%s)
local alert_threshold=$((current_time – (ALERT_HOURS * 3600)))

# 最新バックアップの取得
local latest_backup=$(rclone ls “$BACKUP_REMOTE” | grep “minecraft_backup_” | sort -k2 | tail -n 1)

if [ -z “$latest_backup” ]; then
send_alert “❌ No backups found in remote storage!”
return 1
fi

# バックアップ日時の解析
local backup_name=$(echo “$latest_backup” | awk ‘{print $2}’)
local backup_date=$(echo “$backup_name” | grep -o ‘[0-9]\{8\}_[0-9]\{6\}’)
local backup_timestamp=$(date -d “${backup_date:0:8} ${backup_date:9:2}:${backup_date:11:2}:${backup_date:13:2}” +%s)

if [ $backup_timestamp -lt $alert_threshold ]; then
local hours_old=$(( (current_time – backup_timestamp) / 3600 ))
send_alert “⚠️ Latest backup is ${hours_old} hours old! Check backup system.”
return 1
else
echo “[$(date)] Latest backup check: OK” >> “$LOG_FILE”
return 0
fi
}

send_alert() {
local message=”$1″
echo “[$(date)] ALERT: $message” >> “$LOG_FILE”

# Discord通知
if [ -n “$DISCORD_WEBHOOK” ]; then
curl -H “Content-Type: application/json” \
-d “{\”content\”:\”🚨 **Minecraft Backup Alert**\\n$message\”}” \
“$DISCORD_WEBHOOK”
fi
}

# メイン処理
check_recent_backup

ステップ9:パフォーマンス最適化

高速バックアップのための最適化

#!/bin/bash
# optimized_backup.sh

# 並列処理によるバックアップ最適化
parallel_backup() {
local minecraft_dir=”$1″
local backup_dir=”$2″
local backup_name=”$3″

# 複数のワールドを並列で圧縮
{
tar -czf “${backup_name}_overworld.tar.gz” -C “$minecraft_dir” world &
tar -czf “${backup_name}_nether.tar.gz” -C “$minecraft_dir” world_nether &
tar -czf “${backup_name}_end.tar.gz” -C “$minecraft_dir” world_the_end &
tar -czf “${backup_name}_config.tar.gz” -C “$minecraft_dir” server.properties whitelist.json ops.json &
wait
}

# 統合アーカイブの作成
tar -czf “${backup_name}.tar.gz” “${backup_name}”_*.tar.gz
rm -f “${backup_name}”_*.tar.gz
}

# rsyncを使用した増分バックアップ
incremental_backup() {
local source_dir=”$1″
local backup_base=”/backup/minecraft”
local current_backup=”$backup_base/current”
local date_backup=”$backup_base/$(date +%Y%m%d_%H%M%S)”

# 現在のバックアップが存在する場合は増分バックアップ
if [ -d “$current_backup” ]; then
rsync -av –delete –link-dest=”$current_backup” “$source_dir/” “$date_backup/”
else
rsync -av “$source_dir/” “$date_backup/”
fi

# 現在のバックアップシンボリック更新
rm -f “$current_backup”
ln -s “$date_backup” “$current_backup”

# 圧縮してクラウドにアップロード
tar -czf “${date_backup}.tar.gz” -C “$backup_base” “$(basename “$date_backup”)”
rclone copy “${date_backup}.tar.gz” “$RCLONE_REMOTE” –transfers 8
}

最適化のポイント

  • 並列処理:複数のワールドファイルを同時に圧縮
  • 増分バックアップ:変更されたファイルのみをバックアップ
  • 圧縮レベル調整:速度重視なら低圧縮、容量重視なら高圧縮
  • 転送並列化:rcloneの–transfersオプションで高速化

ステップ10:トラブルシューティング

よくある問題

Q: rcloneでGoogle Driveの認証エラー

A: トークンの有効期限切れが原因です。rclone config reconnect gdrive:で再認証してください。

Q: バックアップファイルが破損している

A: 圧縮中にサーバーがクラッシュした可能性があります。save-offコマンドを確実に実行してからバックアップを取得してください。

Q: アップロード速度が遅い

A: rcloneの--transfers--checkersオプションを調整してください。

緊急時の手動復元

# 緊急時の最小限復元手順
# 1. サーバー停止
sudo systemctl stop minecraft

# 2. 現在のデータを退避
mv /opt/minecraft /opt/minecraft.backup.$(date +%Y%m%d)

# 3. 最新バックアップをダウンロード
rclone copy gdrive:minecraft-backups /tmp/ \
–include “minecraft_backup_*.tar.gz” \
–order-by modtime –max-age 24h

# 4. 最新ファイルを特定
LATEST=$(ls -t /tmp/minecraft_backup_*.tar.gz | head -n 1)

# 5. 展開
mkdir -p /opt/minecraft
tar -xzf “$LATEST” -C /opt/minecraft

# 6. 権限修正
chown -R minecraft:minecraft /opt/minecraft

# 7. サーバー再起動
sudo systemctl start minecraft

おすすめのサーバーホスティングサービス

自動バックアップシステムを安定運用するには、信頼性の高いサーバー環境が重要です:

XServer VPS for Game

ゲーム特化型のVPSサービスで、マインクラフトテンプレートが標準装備。高速SSDと大容量メモリでFabricサーバーも快適に動作します。

  • CPU: 最新AMD EPYC
  • メモリ: 8GB~64GB
  • ストレージ: 高速NVMe SSD
  • 価格: 月額1,150円~

XServer VPS for Game 公式サイト

ConoHa for GAME

マインクラフトマネージャーが標準搭載され、Fabricサーバーの管理が簡単。時間単位課金でコストを抑えられます。

  • CPU: Intel Xeon
  • メモリ: 1GB~64GB
  • ストレージ: SSD
  • 価格: 時間課金対応

ConoHa for GAME 公式サイト

さくら VPS

老舗のVPSサービスで安定性抜群。大容量オプション豊富でバックアップデータも安心して保存できます。

  • CPU: Intel Xeon
  • メモリ: 1GB~32GB
  • ストレージ: SSD
  • 価格: 月額880円~

さくら VPS 公式サイト

KAGOYA CLOUD VPS

高い可用性を誇るクラウドVPS。柔軟な容量拡張が可能で、成長するサーバーにも対応できます。

  • CPU: Intel Xeon
  • メモリ: 1GB~56GB
  • ストレージ: SSD
  • 価格: 月額660円~

KAGOYA CLOUD VPS 公式サイト

サーバー選びのポイント

  • 十分なストレージ容量:バックアップデータの保存に必要
  • 安定したネットワーク:クラウドアップロードの信頼性
  • 管理機能の充実:自動バックアップやテンプレート機能
  • 24時間サポート:トラブル時の迅速な対応
  • スケーラビリティ:将来的な容量拡張への対応

まとめ

自動バックアップシステムの構築により、マインクラフトサーバーのデータ保護は完璧になります。rcloneを活用したクラウドバックアップなら、災害やハードウェア障害からも確実にデータを守れます。

重要なポイント

  • 定期的なバックアップの自動実行
  • 複数の保存先でのリスク分散
  • バックアップの整合性確認
  • 迅速な復元手順の準備

システムの利点

  • 完全自動化による手間の削減
  • クラウド保存による災害対策
  • 圧縮・世代管理によるコスト最適化
  • 異常時の自動アラート機能

設定は複雑ですが、一度構築すれば長期間安心してサーバー運営を続けられます。大切なワールドデータを守るために、ぜひ導入を検討してください!

最終確認事項

  • バックアップスクリプトの実行権限設定を確認
  • クラウドストレージの容量制限を確認
  • 定期的な復元テストの実施
  • ログファイルの定期確認とローテーション設定

© 2025 マインクラフトサーバー運用完全ガイド

大切なワールドデータを守り、安心してマイクラを楽しみましょう!


目次