Настройка автоматических бэкапов Bedrock сервера
Содержание
- 1 Настройка автоматических бэкапов Bedrock сервера
- 1.1 1. Подготовка системы
- 1.2 2. Установка необходимых пакетов
- 1.3 3. Создание структуры для бэкапов
- 1.4 4. Создание скрипта бэкапа
- 1.5 5. Настройка автоматического бэкапа
- 1.6 6. Расширенный скрипт бэкапа
- 1.7 7. Настройка ротации бэкапов
- 1.8 8. Восстановление из бэкапа
- 1.9 9. Мониторинг бэкапов
- 1.10 10. Удаленный бэкап (опционально) =
- 1.11 11. Устранение неполадок =
- 1.12 Заключение
Настройка автоматических бэкапов 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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных Bedrock серверов
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних серверов
Наши специалисты помогут с настройкой автоматических бэкапов на Bedrock серверах!