※本記事は2025年1月時点の情報に基づいて執筆されています。内容の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。
「大切なワールドデータが消えたらどうしよう…」「手動バックアップは面倒くさい!」そんな不安を解消する自動バックアップシステムの構築方法を徹底解説します。rcloneを使ったクラウドバックアップで、データ消失リスクを完全に回避しましょう!
画像出典:XServer GAMEs
なぜ自動バックアップが必要なのか?
マインクラフトサーバーを運営していると、様々なリスクでデータが失われる可能性があります:
データ消失の主な原因:
- サーバークラッシュ – 突然の停止によるワールド破損
- ストレージ故障 – HDDやSSDの物理的な故障
- 人為的ミス – 誤操作によるファイル削除
- マルウェア感染 – ランサムウェアなどの攻撃
- 自然災害 – データセンターの被災
手動バックアップの問題点:
- 定期実行を忘れやすい
- 作業量が多く継続困難
- バックアップのタイミングがばらつく
- ローカル保存のみでリスク分散不足
自動バックアップシステムの全体構成
今回構築するシステムの特徴:
機能 | 仕様 | メリット |
---|---|---|
定期実行 | cron/systemdによる自動化 | 手動作業不要 |
増分バックアップ | 変更分のみ保存 | ストレージ効率が良い |
クラウド保存 | Google Drive/AWS S3等 | 災害対策・リスク分散 |
世代管理 | 古いバックアップの自動削除 | ストレージ容量管理 |
圧縮保存 | tar.gz形式での保存 | 転送時間短縮 |
画像出典:XServer GAMEs
ステップ1:rcloneのインストールと設定
1. rcloneのインストール
Ubuntu/Debian系の場合:
Copy# 公式インストールスクリプト
curl https://rclone.org/install.sh | sudo bash
# パッケージマネージャー経由
sudo apt update
sudo apt install rclone
CentOS/RHEL系の場合:
Copy# 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との連携設定
Copy# 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. 接続テスト
Copy# 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:基本バックアップスクリプトの作成
シンプルなバックアップスクリプト
Copy#!/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:高度なバックアップスクリプト
機能充実版のスクリプト
Copy#!/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
}
backup_database() {
# プラグインのデータベースバックアップ
if [ -f "$MINECRAFT_DIR/plugins/*/database.db" ]; then
log_message "Backing up plugin databases..."
find "$MINECRAFT_DIR/plugins" -name "*.db" -exec cp {} "$BACKUP_DIR/" \;
fi
}
# メイン処理開始
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
# バックアップディレクトリ準備
mkdir -p "$BACKUP_DIR"
cd "$BACKUP_DIR"
# Minecraftサーバーの一時停止処理
SCREEN_SESSION=$(screen -list | grep minecraft | awk '{print $1}')
if [ -n "$SCREEN_SESSION" ]; then
log_message "Pausing Minecraft server for backup..."
screen -S "$SCREEN_SESSION" -p 0 -X stuff "say §eBackup starting in 10 seconds...$(printf \\r)"
sleep 5
screen -S "$SCREEN_SESSION" -p 0 -X stuff "say §eBackup starting in 5 seconds...$(printf \\r)"
sleep 5
screen -S "$SCREEN_SESSION" -p 0 -X stuff "save-all$(printf \\r)"
screen -S "$SCREEN_SESSION" -p 0 -X stuff "save-off$(printf \\r)"
sleep 3
SAVE_ENABLED=true
log_message "Server paused for backup"
else
log_message "Minecraft server not running"
SAVE_ENABLED=false
fi
# データベースバックアップ
backup_database
# メインバックアップ作成
log_message "Creating compressed backup (compression level: $COMPRESSION_LEVEL)..."
START_TIME=$(date +%s)
tar --exclude='*.tmp' --exclude='*.log' \
-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 \
plugins/*/config.yml plugins/*/data
END_TIME=$(date +%s)
BACKUP_SIZE=$(stat -c%s "${BACKUP_NAME}.tar.gz")
COMPRESSION_TIME=$((END_TIME - START_TIME))
log_message "Backup created: Size $(numfmt --to=iec $BACKUP_SIZE), Time ${COMPRESSION_TIME}s"
# サーバー再開
if [ "$SAVE_ENABLED" = true ]; then
screen -S "$SCREEN_SESSION" -p 0 -X stuff "save-on$(printf \\r)"
screen -S "$SCREEN_SESSION" -p 0 -X stuff "say §aBackup completed! Server resumed.$(printf \\r)"
log_message "Server resumed"
fi
# サイズチェック
if [ "$BACKUP_SIZE" -gt "$MAX_BACKUP_SIZE" ]; then
log_message "WARNING: Backup size exceeds limit ($MAX_BACKUP_SIZE bytes)"
send_discord_notification "⚠️ Backup created but size is larger than expected" "warning"
fi
# クラウドアップロード
log_message "Uploading to cloud storage: $RCLONE_REMOTE"
UPLOAD_START=$(date +%s)
if rclone copy "${BACKUP_NAME}.tar.gz" "$RCLONE_REMOTE" --progress --transfers 4; then
UPLOAD_END=$(date +%s)
UPLOAD_TIME=$((UPLOAD_END - UPLOAD_START))
log_message "Upload completed in ${UPLOAD_TIME}s"
send_discord_notification "✅ Backup completed successfully\nSize: $(numfmt --to=iec $BACKUP_SIZE)\nTime: ${COMPRESSION_TIME}s + ${UPLOAD_TIME}s" "success"
else
log_message "ERROR: Upload failed"
send_discord_notification "❌ Backup upload failed" "error"
exit 1
fi
# 古いバックアップの削除
cleanup_old_backups
# 一時ファイル削除
rm -f "${BACKUP_NAME}.tar.gz"
log_message "=== Backup Process Completed ==="
ステップ4:設定ファイルの作成
バックアップ設定ファイル
Copy# /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による定期実行設定
Copy# 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サービスによる管理
Copy# /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
Copy# /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
サービス有効化:
Copy# サービス登録
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バケットの設定
Copy# 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用バックアップスクリプト
Copy#!/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:バックアップの検証と復元
バックアップ整合性チェック
Copy#!/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
}
# 最新バックアップの検証
LATEST_BACKUP=$(rclone ls "$RCLONE_REMOTE" | grep "minecraft_backup_" | sort | tail -n 1 | awk '{print $2}')
if [ -n "$LATEST_BACKUP" ]; then
rclone copy "$RCLONE_REMOTE/$LATEST_BACKUP" /tmp/
verify_backup "/tmp/$LATEST_BACKUP"
rm -f "/tmp/$LATEST_BACKUP"
fi
災害復旧用の復元スクリプト
Copy#!/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"
# 設定ファイルの確認
if [ -f "$MINECRAFT_DIR/server.properties" ]; then
echo "✓ server.properties restored"
else
echo "⚠ server.properties missing - manual configuration required"
fi
echo "=== Recovery Completed ==="
echo "Please verify the restoration and restart the server manually"
# 一時ファイル削除
rm -f "$backup_file"
}
# 使用方法
if [ $# -eq 0 ]; then
echo "Usage: $0 <backup_date>"
echo "Example: $0 20250101_120000"
echo ""
echo "Available backups:"
rclone ls "$BACKUP_SOURCE" | grep "minecraft_backup_" | awk '{print $2}' | sed 's/minecraft_backup_//g' | sed 's/.tar.gz//g'
exit 1
fi
restore_from_backup "$1"
ステップ8:監視とアラート機能
バックアップ監視スクリプト
Copy#!/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
# メール通知(Postfixが設定されている場合)
if command -v mail >/dev/null 2>&1; then
echo "$message" | mail -s "Minecraft Backup Alert" admin@yourdomain.com
fi
}
# メイン処理
check_recent_backup
# バックアップサイズの監視
monitor_backup_sizes() {
local size_threshold=5000000000 # 5GB
local recent_backups=$(rclone ls "$BACKUP_REMOTE" | grep "minecraft_backup_" | sort -k2 | tail -n 5)
echo "$recent_backups" | while read -r size date time filename; do
if [ "$size" -gt "$size_threshold" ]; then
send_alert "⚠️ Large backup detected: $filename ($(numfmt --to=iec $size))"
fi
done
}
monitor_backup_sizes
ステップ9:パフォーマンス最適化
高速バックアップのための最適化
Copy#!/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
}
# デデュープリケーション機能
deduplicate_backup() {
local backup_dir="$1"
# 重複ファイルの検出と削除
find "$backup_dir" -type f -exec sha256sum {} \; | sort | uniq -d -w 64 | while read -r hash file; do
echo "Duplicate found: $file"
# 重複ファイルをハードリンクに置換
find "$backup_dir" -type f -exec sha256sum {} \; | grep "^$hash" | tail -n +2 | cut -d' ' -f3- | while read -r dup_file; do
ln -f "$file" "$dup_file"
done
done
}
ステップ10:トラブルシューティング
よくある問題と解決方法
Q: rcloneでGoogle Driveの認証エラーが発生する A: トークンの有効期限切れが原因です。rclone config reconnect gdrive:
で再認証してください。
Q: バックアップファイルが破損している A: 圧縮中にサーバーがクラッシュした可能性があります。save-offコマンドを確実に実行してからバックアップを取得してください。
Q: アップロード速度が遅い A: rcloneの--transfers
と--checkers
オプションを調整してください。また、圧縮レベルを下げることも検討してください。
Q: ディスク容量不足でバックアップが失敗する A: 古いローカルバックアップの削除間隔を短くするか、直接クラウドにアップロードする設定に変更してください。
緊急時の手動復元手順
Copy# 緊急時の最小限復元手順
# 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 – 自動バックアップ機能標準装備
- ConoHa for GAME – 高速SSDと安定したネットワーク
コスト効率重視なら:
- さくら VPS – 大容量オプション豊富
- KAGOYA CLOUD VPS – 柔軟な容量拡張
これらのサービスなら、大容量のバックアップデータも安心して保存できます。
まとめ
自動バックアップシステムの構築により、マインクラフトサーバーのデータ保護は完璧になります。rcloneを活用したクラウドバックアップなら、災害やハードウェア障害からも確実にデータを守れます。
重要なポイント:
- 定期的なバックアップの自動実行
- 複数の保存先でのリスク分散
- バックアップの整合性確認
- 迅速な復元手順の準備
設定は複雑ですが、一度構築すれば長期間安心してサーバー運営を続けられます。大切なワールドデータを守るために、ぜひ導入を検討してください!