Настройка автоматических бэкапов Bedrock сервера

Материал из ARK-HOSTER.RU | Документация хостинга
Версия от 10:17, 3 ноября 2025; Admin (обсуждение | вклад) (Новая страница: «= Настройка автоматических бэкапов Bedrock сервера = == 1. Подготовка системы == * Войдите в си…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Настройка автоматических бэкапов Bedrock сервера

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что Bedrock сервер установлен и работает на Ubuntu 24.04 LTS.
  • Проверьте наличие свободного места для бэкапов (рекомендуется минимум 50GB).
  • Убедитесь, что у вас есть доступ к серверу через SSH.

2. Установка необходимых пакетов

Обновление системы

1. Обновите систему:

sudo apt update
sudo apt upgrade -y

2. Установите необходимые пакеты:

sudo apt install -y rsync tar gzip zip unzip cron

3. Проверьте установку:

which rsync
which tar
which gzip

Настройка cron

1. Убедитесь, что cron запущен:

sudo systemctl start cron
sudo systemctl enable cron

2. Проверьте статус:

sudo systemctl status cron

3. Создание структуры для бэкапов

Создание директорий

1. Создайте основную директорию для бэкапов:

sudo mkdir -p /backup/bedrock

2. Создайте поддиректории:

sudo mkdir -p /backup/bedrock/worlds
sudo mkdir -p /backup/bedrock/configs
sudo mkdir -p /backup/bedrock/addons
sudo mkdir -p /backup/bedrock/logs

3. Установите права доступа:

sudo chown -R bedrock:bedrock /backup/bedrock
sudo chmod -R 755 /backup/bedrock

Проверка свободного места

1. Проверьте доступное место:

df -h /backup

2. Создайте отдельный раздел для бэкапов (опционально):

\# Рекомендуется использовать отдельный диск или раздел
\# для бэкапов

4. Создание скрипта бэкапа

Базовый скрипт бэкапа

1. Создайте основной скрипт:

sudo nano /usr/local/bin/bedrock-backup.sh

2. Добавьте содержимое:

\#!/bin/bash

\# Настройки бэкапа
BACKUP_DIR="/backup/bedrock"
SERVER_DIR="/opt/bedrock"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/bedrock-backup.log"
RETENTION_DAYS=7

\# Функция логирования
log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

\# Проверка доступности сервера
if [ ! -d "$SERVER_DIR" ]; then
    log_message "ERROR: Server directory not found: $SERVER_DIR"
    exit 1
fi

log_message "Starting Bedrock server backup..."

\# Создание директории для бэкапа
BACKUP_PATH="$BACKUP_DIR/$DATE"
mkdir -p "$BACKUP_PATH"

\# Остановка сервера для консистентного бэкапа
log_message "Stopping Bedrock server..."
sudo systemctl stop minecraft-bedrock

\# Ожидание полной остановки
sleep 5

\# Бэкап миров
log_message "Backing up worlds..."
if [ -d "$SERVER_DIR/worlds" ]; then
    tar -czf "$BACKUP_PATH/worlds.tar.gz" -C "$SERVER_DIR" worlds/
    log_message "Worlds backed up: $(du -h "$BACKUP_PATH/worlds.tar.gz" | cut -f1)"
fi

\# Бэкап конфигурации
log_message "Backing up configuration files..."
tar -czf "$BACKUP_PATH/configs.tar.gz" -C "$SERVER_DIR" \
    server.properties \
    permissions.json \
    allowlist.json \
    valid_known_packs.json 2>/dev/null

\# Бэкап дополнений
log_message "Backing up addons..."
if [ -d "$SERVER_DIR/behavior_packs" ] || [ -d "$SERVER_DIR/resource_packs" ]; then
    tar -czf "$BACKUP_PATH/addons.tar.gz" -C "$SERVER_DIR" \
        behavior_packs/ resource_packs/ 2>/dev/null
fi

\# Бэкап логов
log_message "Backing up logs..."
if [ -d "$SERVER_DIR/logs" ]; then
    tar -czf "$BACKUP_PATH/logs.tar.gz" -C "$SERVER_DIR" logs/ 2>/dev/null
fi

\# Полный бэкап всего сервера (опционально)
log_message "Creating full backup..."
tar -czf "$BACKUP_PATH/full-backup.tar.gz" -C "$SERVER_DIR" . \
    --exclude='*.log' \
    --exclude='crash-reports' \
    2>/dev/null

\# Запуск сервера
log_message "Starting Bedrock server..."
sudo systemctl start minecraft-bedrock

\# Подсчет размера бэкапа
BACKUP_SIZE=$(du -sh "$BACKUP_PATH" | cut -f1)
log_message "Backup completed successfully. Size: $BACKUP_SIZE"

\# Удаление старых бэкапов
log_message "Cleaning up old backups (older than $RETENTION_DAYS days)..."
find "$BACKUP_DIR" -type d -name "20*" -mtime +$RETENTION_DAYS -exec rm -rf {} \;

\# Подсчет оставшихся бэкапов
BACKUP_COUNT=$(find "$BACKUP_DIR" -type d -name "20*" | wc -l)
log_message "Total backups remaining: $BACKUP_COUNT"

\# Проверка места на диске
DISK_USAGE=$(df -h "$BACKUP_DIR" | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 80 ]; then
    log_message "WARNING: Disk usage is ${DISK_USAGE}%. Consider cleaning up old backups."
fi

log_message "Backup process completed!"
exit 0

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/bedrock-backup.sh

4. Тестирование:

sudo /usr/local/bin/bedrock-backup.sh

5. Настройка автоматического бэкапа

Настройка cron

1. Откройте crontab:

sudo crontab -e

2. Добавьте задачи для автоматического бэкапа:

\# Бэкап каждый час

0 * * * * /usr/local/bin/bedrock-backup.sh

\# Бэкап каждые 6 часов

0 */6 * * * /usr/local/bin/bedrock-backup.sh

\# Бэкап каждые 12 часов

0 */12 * * * /usr/local/bin/bedrock-backup.sh

\# Бэкап ежедневно в 3:00

0 3 * * * /usr/local/bin/bedrock-backup.sh

3. Пример полной конфигурации:

\# Бэкап каждый день в 3:00 ночи
0 3 * * * /usr/local/bin/bedrock-backup.sh >> /var/log/bedrock-backup-cron.log 2>&1

Проверка задач cron

1. Просмотр задач:

sudo crontab -l

2. Проверка логов cron:

sudo tail -f /var/log/syslog | grep CRON

6. Расширенный скрипт бэкапа

Скрипт с инкрементальными бэкапами

1. Создайте расширенный скрипт:

sudo nano /usr/local/bin/bedrock-backup-advanced.sh

2. Добавьте содержимое:

\#!/bin/bash

BACKUP_DIR="/backup/bedrock"
SERVER_DIR="/opt/bedrock"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/bedrock-backup.log"
RETENTION_DAYS=7
INCREMENTAL=false

\# Парсинг аргументов
while [[ $# -gt 0 ]]; do
    case $1 in
        --incremental)
            INCREMENTAL=true
            shift
            ;;
        --full)
            INCREMENTAL=false
            shift
            ;;
        *)
            echo "Unknown option: $1"
            exit 1
            ;;
    esac
done

log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

\# Функция инкрементального бэкапа
incremental_backup() {
    log_message "Starting incremental backup..."
    
    \# Поиск последнего бэкапа
    LAST_BACKUP=$(ls -td "$BACKUP_DIR"/20* 2>/dev/null | head -1)
    
    if [ -z "$LAST_BACKUP" ]; then
        log_message "No previous backup found, creating full backup..."
        incremental_backup=false
        return
    fi
    
    \# Инкрементальный бэкап только измененных файлов
    log_message "Using rsync for incremental backup..."
    rsync -av --link-dest="$LAST_BACKUP" \
        "$SERVER_DIR/worlds/" \
        "$BACKUP_DIR/$DATE/worlds/" \
        --exclude='*.log' \
        --exclude='cache'
    
    log_message "Incremental backup completed"
}

\# Основной процесс бэкапа
if [ "$INCREMENTAL" = true ]; then
    incremental_backup
else
    \# Полный бэкап (используйте базовый скрипт)
    /usr/local/bin/bedrock-backup.sh
fi

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-backup-advanced.sh

7. Настройка ротации бэкапов

Скрипт ротации

1. Создайте скрипт ротации:

sudo nano /usr/local/bin/bedrock-backup-rotation.sh

2. Добавьте содержимое:

\#!/bin/bash

BACKUP_DIR="/backup/bedrock"
RETENTION_DAYS=7
LOG_FILE="/var/log/bedrock-backup-rotation.log"

log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

log_message "Starting backup rotation..."

\# Удаление старых бэкапов
DELETED=$(find "$BACKUP_DIR" -type d -name "20*" -mtime +$RETENTION_DAYS -exec rm -rf {} \; -print | wc -l)

log_message "Deleted $DELETED old backup(s)"

\# Подсчет оставшихся бэкапов
REMAINING=$(find "$BACKUP_DIR" -type d -name "20*" | wc -l)
TOTAL_SIZE=$(du -sh "$BACKUP_DIR" | cut -f1)

log_message "Remaining backups: $REMAINING"
log_message "Total backup size: $TOTAL_SIZE"

\# Проверка места на диске
DISK_USAGE=$(df -h "$BACKUP_DIR" | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 90 ]; then
    log_message "WARNING: Critical disk usage: ${DISK_USAGE}%"
    \# Удаление самых старых бэкапов
    find "$BACKUP_DIR" -type d -name "20*" -exec ls -dt {} + | tail -n +6 | xargs rm -rf
    log_message "Emergency cleanup performed"
fi

log_message "Rotation completed!"

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-backup-rotation.sh

4. Добавьте в cron (выполняется ежедневно в 4:00):

sudo crontab -e

5. Добавьте задачу:

0 4 * * * /usr/local/bin/bedrock-backup-rotation.sh

8. Восстановление из бэкапа

Скрипт восстановления

1. Создайте скрипт восстановления:

sudo nano /usr/local/bin/bedrock-backup-restore.sh

2. Добавьте содержимое:

\#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage: $0 <backup-date> [world|config|all]"
    echo "Example: $0 20240101_030000 all"
    exit 1
fi

BACKUP_DATE="$1"
RESTORE_TYPE="${2:-all}"
BACKUP_DIR="/backup/bedrock"
SERVER_DIR="/opt/bedrock"
BACKUP_PATH="$BACKUP_DIR/$BACKUP_DATE"

if [ ! -d "$BACKUP_PATH" ]; then
    echo "Backup not found: $BACKUP_PATH"
    echo "Available backups:"
    ls -1 "$BACKUP_DIR" | grep "^20"
    exit 1
fi

echo "Restoring from backup: $BACKUP_DATE"
echo "Type: $RESTORE_TYPE"

\# Остановка сервера
echo "Stopping Bedrock server..."
sudo systemctl stop minecraft-bedrock

\# Создание резервной копии текущего состояния
CURRENT_BACKUP="$BACKUP_DIR/current-before-restore-$(date +%Y%m%d_%H%M%S)"
mkdir -p "$CURRENT_BACKUP"
cp -r "$SERVER_DIR"/* "$CURRENT_BACKUP/" 2>/dev/null

\# Восстановление
case "$RESTORE_TYPE" in
    world)
        echo "Restoring worlds..."
        tar -xzf "$BACKUP_PATH/worlds.tar.gz" -C "$SERVER_DIR"
        ;;
    config)
        echo "Restoring configuration..."
        tar -xzf "$BACKUP_PATH/configs.tar.gz" -C "$SERVER_DIR"
        ;;
    all)
        echo "Restoring full backup..."
        tar -xzf "$BACKUP_PATH/full-backup.tar.gz" -C "$SERVER_DIR"
        ;;
    *)
        echo "Unknown restore type: $RESTORE_TYPE"
        exit 1
        ;;
esac

\# Установка прав доступа
sudo chown -R bedrock:bedrock "$SERVER_DIR"

\# Запуск сервера
echo "Starting Bedrock server..."
sudo systemctl start minecraft-bedrock

echo "Restore completed!"
echo "Previous state backed up to: $CURRENT_BACKUP"

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-backup-restore.sh

4. Использование:

\# Восстановить все
sudo /usr/local/bin/bedrock-backup-restore.sh 20240101_030000 all

\# Восстановить только миры
sudo /usr/local/bin/bedrock-backup-restore.sh 20240101_030000 world

\# Восстановить только конфигурацию
sudo /usr/local/bin/bedrock-backup-restore.sh 20240101_030000 config

9. Мониторинг бэкапов

Проверка статуса бэкапов

1. Создайте скрипт проверки:

sudo nano /usr/local/bin/bedrock-backup-status.sh

2. Добавьте содержимое:

\#!/bin/bash

BACKUP_DIR="/backup/bedrock"

echo "=== Bedrock Backup Status ==="
echo ""

\# Последний бэкап
LAST_BACKUP=$(ls -td "$BACKUP_DIR"/20* 2>/dev/null | head -1)
if [ -z "$LAST_BACKUP" ]; then
    echo "No backups found!"
else
    LAST_BACKUP_DATE=$(basename "$LAST_BACKUP")
    LAST_BACKUP_TIME=$(stat -c %y "$LAST_BACKUP" | cut -d' ' -f1,2 | cut -d'.' -f1)
    LAST_BACKUP_SIZE=$(du -sh "$LAST_BACKUP" | cut -f1)
    
    echo "Last backup: $LAST_BACKUP_DATE"
    echo "Backup time: $LAST_BACKUP_TIME"
    echo "Backup size: $LAST_BACKUP_SIZE"
fi

echo ""

\# Общая статистика
TOTAL_BACKUPS=$(find "$BACKUP_DIR" -type d -name "20*" | wc -l)
TOTAL_SIZE=$(du -sh "$BACKUP_DIR" | cut -f1)

echo "Total backups: $TOTAL_BACKUPS"
echo "Total size: $TOTAL_SIZE"
echo ""

\# Список всех бэкапов
echo "All backups:"
ls -lh "$BACKUP_DIR" | grep "^d" | awk '{print $9, $5, $6, $7, $8}' | head -10

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-backup-status.sh

4. Использование:

sudo /usr/local/bin/bedrock-backup-status.sh

10. Удаленный бэкап (опционально) =

Настройка удаленного бэкапа

1. Для бэкапа на другой сервер используйте rsync:

sudo nano /usr/local/bin/bedrock-backup-remote.sh

2. Добавьте содержимое:

\#!/bin/bash

REMOTE_HOST="backup-server.example.com"
REMOTE_USER="backup"
REMOTE_PATH="/backup/remote/bedrock"
LOCAL_BACKUP="/backup/bedrock"

\# Создание локального бэкапа
/usr/local/bin/bedrock-backup.sh

\# Копирование на удаленный сервер
LATEST_BACKUP=$(ls -td "$LOCAL_BACKUP"/20* | head -1)

echo "Copying to remote server..."
rsync -avz --progress "$LATEST_BACKUP/" \
    "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/$(basename $LATEST_BACKUP)/"

echo "Remote backup completed!"

11. Устранение неполадок =

Проблемы с бэкапами

1. Недостаточно места на диске:

  • Увеличьте RETENTION_DAYS для более быстрого удаления старых бэкапов
  • Используйте сжатие (gzip уже используется)
  • Переместите бэкапы на отдельный диск

2. Ошибки при создании бэкапа:

  • Проверьте права доступа к директориям
  • Проверьте логи:
    tail -f /var/log/bedrock-backup.log

3. Сервер не останавливается для бэкапа:

  • Увеличьте время ожидания в скрипте
  • Используйте принудительную остановку:
    sudo systemctl kill minecraft-bedrock

Заключение

Настройка автоматических бэкапов Bedrock сервера на Ubuntu 24.04 обеспечивает надежное сохранение данных. Регулярные бэкапы защитят ваши миры, конфигурацию и дополнения от потери данных.

Для размещения ваших Bedrock серверов с автоматическими бэкапами на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой автоматических бэкапов на Bedrock серверах!