انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

النسخ الاحتياطي واستعادة خادم الألعاب

النسخ الاحتياطي التلقائي، تكوين cron، النسخ الاحتياطي عن بُعد باستخدام rsync.

وقت القراءة: 12 dk إعداد خادم الألعاب
نسخ احتياطياستعادةcronrsyncملفات العالمخادم ألعاب

جدول المحتويات

مقدمة

النسخ الاحتياطي لخادم الألعاب هو الخطوة الأكثر أهمية لمنع فقدان البيانات. يجب نسخ ملفات العوالم وبيانات اللاعبين وملفات التكوين وإعدادات التعديلات/الإضافات بشكل منتظم. يغطي هذا الدليل سكريبتات النسخ الاحتياطي التلقائي وتكوين cron والنسخ الاحتياطي عن بُعد باستخدام rsync وإدارة ملفات العوالم لخوادم الألعاب المختلفة.

استراتيجية النسخ الاحتياطي

قاعدة 3-2-1

  • 3 نسخ: الأصل + نسختان احتياطيتان
  • 2 وسائط مختلفة: قرص محلي + خادم بعيد
  • 1 خارج الموقع: نسخة احتياطية في موقع مختلف

أنواع النسخ الاحتياطي

النوعالوصفالميزةالعيب
كاملينسخ جميع الملفاتاستعادة سهلةحجم كبير
تزايديالملفات المتغيرة فقطحجم صغيراستعادة معقدة
تفاضليالتغييرات منذ آخر نسخة كاملةحجم متوسطتعقيد متوسط

سكريبت النسخ الاحتياطي التلقائي

نسخ احتياطي للأغراض العامة

hljs bash
nano ~/backup_gameserver.sh
hljs bash
#!/bin/bash
GAME_NAME=${1:-"gameserver"}
BACKUP_BASE="/home/steam/backups"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
LOG="/home/steam/backup.log"

declare -A SAVE_DIRS
SAVE_DIRS[minecraft]="/home/steam/minecraft/world /home/steam/minecraft/plugins"
SAVE_DIRS[rust]="/home/steam/rustserver/server/rust /home/steam/rustserver/oxide"
SAVE_DIRS[fivem]="/home/steam/fxserver/resources /home/steam/fxserver/server-data"
SAVE_DIRS[vrising]="/home/steam/vrising/save-data"
SAVE_DIRS[satisfactory]="/home/steam/satisfactory/.config/Epic/FactoryServer/Saved/SaveGames"
SAVE_DIRS[pz]="/home/steam/Zomboid/Saves /home/steam/Zomboid/Server"
SAVE_DIRS[enshrouded]="/home/steam/enshrouded/savegame"

BACKUP_DIR="$BACKUP_BASE/$GAME_NAME"
mkdir -p "$BACKUP_DIR"

echo "$(date): Starting $GAME_NAME backup..." >> $LOG

if [ -n "${SAVE_DIRS[$GAME_NAME]}" ]; then
    tar -czf "$BACKUP_DIR/${GAME_NAME}_${DATE}.tar.gz" ${SAVE_DIRS[$GAME_NAME]} 2>/dev/null
    if [ $? -eq 0 ]; then
        SIZE=$(du -h "$BACKUP_DIR/${GAME_NAME}_${DATE}.tar.gz" | cut -f1)
        echo "$(date): Backup successful - $SIZE" >> $LOG
    else
        echo "$(date): ERROR - Backup failed!" >> $LOG
    fi
else
    echo "$(date): ERROR - Unknown game: $GAME_NAME" >> $LOG
    exit 1
fi

find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
COUNT=$(find "$BACKUP_DIR" -name "*.tar.gz" | wc -l)
echo "$(date): Cleanup done. Current backup count: $COUNT" >> $LOG
hljs bash
chmod +x ~/backup_gameserver.sh

النسخ الاحتياطي التلقائي باستخدام Cron

تكوين Crontab

hljs bash
crontab -e
hljs cron
# نسخ احتياطي لـ Minecraft كل 4 ساعات
0 */4 * * * /home/steam/backup_gameserver.sh minecraft

# نسخ احتياطي لـ Rust كل 6 ساعات
0 */6 * * * /home/steam/backup_gameserver.sh rust

# نسخ احتياطي يومي لـ FiveM
0 3 * * * /home/steam/backup_gameserver.sh fivem

# نسخ احتياطي يومي لـ V Rising
0 4 * * * /home/steam/backup_gameserver.sh vrising

# نسخ احتياطي كامل أسبوعي (الأحد 02:00)
0 2 * * 0 /home/steam/backup_full.sh

دليل تعبيرات Cron

# دقيقة (0-59) | ساعة (0-23) | يوم (1-31) | شهر (1-12) | يوم الأسبوع (0-7)
# * * * * * أمر

النسخ الاحتياطي عن بُعد باستخدام rsync

تثبيت rsync

hljs bash
sudo apt install rsync -y

النسخ الاحتياطي إلى خادم بعيد

hljs bash
nano ~/remote_backup.sh
hljs bash
#!/bin/bash
REMOTE_HOST="backup.example.com"
REMOTE_USER="backup"
REMOTE_DIR="/backups/gameserver"
LOCAL_DIR="/home/steam/backups"
LOG="/home/steam/remote_backup.log"

echo "$(date): Starting remote backup..." >> $LOG

rsync -avz --delete \
  -e "ssh -p 22 -i /home/steam/.ssh/backup_key" \
  "$LOCAL_DIR/" \
  "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"

if [ $? -eq 0 ]; then
    echo "$(date): Remote backup successful." >> $LOG
else
    echo "$(date): ERROR - Remote backup failed!" >> $LOG
fi
hljs bash
chmod +x ~/remote_backup.sh
crontab -e
0 5 * * * /home/steam/remote_backup.sh

معاملات rsync

المعاملالوصف
-aوضع الأرشيف (يحفظ الأذونات والتواريخ)
-vإخراج مفصل
-zضغط
--deleteحذف الملفات غير الموجودة في المصدر من الوجهة
-eمعاملات اتصال SSH

إدارة ملفات العالم

ملفات عالم Minecraft

hljs bash
# أدلة العالم
~/minecraft/world/
~/minecraft/world_nether/
~/minecraft/world_the_end/

# حفظ قبل النسخ الاحتياطي
screen -S minecraft -p 0 -X stuff "save-all\n"
sleep 5
screen -S minecraft -p 0 -X stuff "save-off\n"
tar -czf ~/backups/minecraft/world_$(date +%Y%m%d).tar.gz ~/minecraft/world*
screen -S minecraft -p 0 -X stuff "save-on\n"

ملفات عالم Rust

hljs bash
~/rustserver/server/rust/
~/rustserver/server/rust/player.blueprints.5.db
~/rustserver/server/rust/proceduralmap.*.sav

الاستعادة

خطوات الاستعادة العامة

hljs bash
# 1. إيقاف الخادم
sudo systemctl stop gameserver

# 2. نسخ احتياطي للملفات الحالية (أمان)
mv ~/gameserver/save ~/gameserver/save_old

# 3. استعادة النسخة الاحتياطية
tar -xzf ~/backups/gameserver/gameserver_20250101_120000.tar.gz -C /

# 4. تشغيل الخادم
sudo systemctl start gameserver

# 5. فحص السجلات
sudo journalctl -u gameserver -f

استعادة ملفات محددة

hljs bash
# قائمة محتويات النسخة الاحتياطية
tar -tzf ~/backups/gameserver/gameserver_20250101_120000.tar.gz

# استخراج ملف محدد
tar -xzf ~/backups/gameserver/gameserver_20250101_120000.tar.gz home/steam/gameserver/config.ini

مراقبة النسخ الاحتياطي

hljs bash
# فحص أحجام النسخ الاحتياطية
du -sh ~/backups/*/

# قائمة النسخ الاحتياطية الأخيرة
ls -lht ~/backups/minecraft/ | head -10

# فحص استخدام القرص
df -h

الخلاصة

النسخ الاحتياطي المنتظم جزء أساسي من إدارة خادم الألعاب. باستخدام سكريبتات النسخ الاحتياطي التلقائي وجدولة cron والنسخ الاحتياطي عن بُعد باستخدام rsync، يمكنك الحفاظ على بياناتك آمنة. توفر البنية التحتية REXE VDS NVMe SSD عمليات نسخ احتياطي واستعادة سريعة.