Хранение резервных копий игровых миров на том же VPS или физическом диске, где запущен игровой процесс — распространённая ошибка начинающих администраторов. Выход из строя накопителя, сбой гипервизора или заражение сервера вредоносным ПО могут одновременно уничтожить и живой сервер, и локальную папку бэкапов. Надёжная стратегия аварийного восстановления требует отправки холодных снапшотов во внешнее независимое объектное хранилище (S3, Cloudflare R2, Wasabi или Backblaze B2).
В этом практическом руководстве мы настроим утилиту rclone, организуем потоковое сжатие миров алгоритмом Zstandard и автоматизируем 14-дневную ротацию архивов в S3-бакете.
Архитектура удалённого резервного копирования и защита от сбоев VPS#
Классический пайплайн резервного копирования состоит из четырёх обязательных этапов:
- Кратковременная фиксация дискового состояния игрового мира (сброс кэша памяти через RCON).
- Создание плотного архива с использованием многопоточного сжатия
zstd, минимизирующего нагрузку на CPU во время игры. - Передача зашифрованного архива по TLS во внешнее S3-хранилище.
- Автоматическая очистка старых архивов старше 14 дней для контроля расходов на облачное хранилище.
Установите необходимые утилиты rclone и zstd:
sudo apt-get update && sudo apt-get install -y rclone zstd
rclone version | head -n 2
Настройка rclone и защищённого подключения к S3-совместимому хранилищу#
Создайте профиль подключения к S3-бакету в конфигурационном файле ~/.config/rclone/rclone.conf:
mkdir -p ~/.config/rclone
cat << 'EOF' > ~/.config/rclone/rclone.conf
[s3-backups]
type = s3
provider = Other
env_auth = false
access_key_id = YOUR_S3_ACCESS_KEY
secret_access_key = YOUR_S3_SECRET_KEY
endpoint = s3.storage.provider.net
acl = private
EOF
chmod 600 ~/.config/rclone/rclone.conf
Проверьте доступность облачного бакета:
rclone lsd s3-backups:
Права chmod 600 защищают секретные ключи доступа от чтения другими непривилегированными системными пользователями.
Скрипт создания снапшотов с компрессией Zstandard и ротацией#
Создадим производственный скрипт /opt/scripts/backup_to_s3.sh, защищённый файловой блокировкой flock от повторного одновременного запуска:
cat << 'EOF' > /opt/scripts/backup_to_s3.sh
#!/usr/bin/env bash
set -euo pipefail
LOCKFILE="/tmp/gamehost_backup.lock"
exec 200>"$LOCKFILE"
flock -n 200 || exit 0
BACKUP_DIR="/tmp/backups"
SOURCE_DIR="/opt/game-servers"
DATE=$(date +%Y-%m-%d_%H%M%S)
ARCHIVE_NAME="gameserver_backup_${DATE}.tar.zst"
REMOTE_BUCKET="s3-backups:game-backups-prod"
mkdir -p "$BACKUP_DIR"
# Сжатие данных с алгоритмом Zstandard (быстро и с высокой степенью компрессии)
tar -I 'zstd -T4 -3' -cf "${BACKUP_DIR}/${ARCHIVE_NAME}" -C "$SOURCE_DIR" .
# Загрузка архива в S3-хранилище
rclone copy "${BACKUP_DIR}/${ARCHIVE_NAME}" "${REMOTE_BUCKET}/daily/"
# Удаление локального временного файла
rm -f "${BACKUP_DIR}/${ARCHIVE_NAME}"
# Ротация: удаление архивов в S3 старше 14 дней
rclone delete --min-age 14d "${REMOTE_BUCKET}/daily/"
EOF
chmod +x /opt/scripts/backup_to_s3.sh
Параметр zstd -T4 -3 запускает сжатие в 4 параллельных потока с умеренным уровнем 3, что обеспечивает архивацию 10 ГБ мира менее чем за 40 секунд без просадок тиков у подключённых игроков.
Автоматизация запуска через Cron и проверка восстановления#
Запланируйте запуск скрипта резервного копирования каждую ночь в 04:00 по серверному времени:
(crontab -l 2>/dev/null; echo "0 4 * * * /opt/scripts/backup_to_s3.sh >> /var/log/gamehost_backup.log 2>&1") | crontab -
crontab -l | grep backup_to_s3
Для проверки аварийного восстановления достаточно скачать свежий архив и распаковать его в тестовую директорию:
rclone copy $(rclone lsf s3-backups:game-backups-prod/daily/ | tail -n 1) /tmp/restore/
tar -I zstd -xf /tmp/restore/*.tar.zst -C /tmp/restore_test/
Если вы хотите получить автоматическое геораспределённое резервное копирование в S3 с возможностью отката сервера к любой точке за 30 дней в один клик, надёжный хостинг игровых серверов берёт на себя всю инфраструктурную рутину и защиту ваших данных.




