Настройка автоматических бэкапов Bedrock сервера: различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Настройка автоматических бэкапов Bedrock сервера = == 1. Подготовка системы == * Войдите в си…»
 
Починка разметки: ссылки и жирный шрифт из Markdown, лишние обратные косые черты в коде, заголовки — проверка вики 13.11.2026
 
Строка 56: Строка 56:


2. Создайте отдельный раздел для бэкапов (опционально):
2. Создайте отдельный раздел для бэкапов (опционально):
<pre>\# Рекомендуется использовать отдельный диск или раздел
<pre># Рекомендуется использовать отдельный диск или раздел
\# для бэкапов</pre>
# для бэкапов</pre>


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


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


\# Настройки бэкапа
# Настройки бэкапа
BACKUP_DIR="/backup/bedrock"
BACKUP_DIR="/backup/bedrock"
SERVER_DIR="/opt/bedrock"
SERVER_DIR="/opt/bedrock"
Строка 76: Строка 76:
RETENTION_DAYS=7
RETENTION_DAYS=7


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


\# Проверка доступности сервера
# Проверка доступности сервера
if [ ! -d "$SERVER_DIR" ]; then
if [ ! -d "$SERVER_DIR" ]; then
     log_message "ERROR: Server directory not found: $SERVER_DIR"
     log_message "ERROR: Server directory not found: $SERVER_DIR"
Строка 89: Строка 89:
log_message "Starting Bedrock server backup..."
log_message "Starting Bedrock server backup..."


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


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


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


\# Бэкап миров
# Бэкап миров
log_message "Backing up worlds..."
log_message "Backing up worlds..."
if [ -d "$SERVER_DIR/worlds" ]; then
if [ -d "$SERVER_DIR/worlds" ]; then
Строка 107: Строка 107:
fi
fi


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


\# Бэкап дополнений
# Бэкап дополнений
log_message "Backing up addons..."
log_message "Backing up addons..."
if [ -d "$SERVER_DIR/behavior_packs" ] || [ -d "$SERVER_DIR/resource_packs" ]; then
if [ -d "$SERVER_DIR/behavior_packs" ] || [ -d "$SERVER_DIR/resource_packs" ]; then
Строка 122: Строка 122:
fi
fi


\# Бэкап логов
# Бэкап логов
log_message "Backing up logs..."
log_message "Backing up logs..."
if [ -d "$SERVER_DIR/logs" ]; then
if [ -d "$SERVER_DIR/logs" ]; then
Строка 128: Строка 128:
fi
fi


\# Полный бэкап всего сервера (опционально)
# Полный бэкап всего сервера (опционально)
log_message "Creating full backup..."
log_message "Creating full backup..."
tar -czf "$BACKUP_PATH/full-backup.tar.gz" -C "$SERVER_DIR" . \
tar -czf "$BACKUP_PATH/full-backup.tar.gz" -C "$SERVER_DIR" . \
Строка 135: Строка 135:
     2>/dev/null
     2>/dev/null


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


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


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


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


\# Проверка места на диске
# Проверка места на диске
DISK_USAGE=$(df -h "$BACKUP_DIR" | tail -1 | awk '{print $5}' | sed 's/%//')
DISK_USAGE=$(df -h "$BACKUP_DIR" | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 80 ]; then
if [ "$DISK_USAGE" -gt 80 ]; then
Строка 175: Строка 175:
2. Добавьте задачи для автоматического бэкапа:
2. Добавьте задачи для автоматического бэкапа:


\# Бэкап каждый час
Бэкап каждый час
<pre>0 * * * * /usr/local/bin/bedrock-backup.sh</pre>
<pre>0 * * * * /usr/local/bin/bedrock-backup.sh</pre>


\# Бэкап каждые 6 часов
Бэкап каждые 6 часов
<pre>0 */6 * * * /usr/local/bin/bedrock-backup.sh</pre>
<pre>0 */6 * * * /usr/local/bin/bedrock-backup.sh</pre>


\# Бэкап каждые 12 часов
Бэкап каждые 12 часов
<pre>0 */12 * * * /usr/local/bin/bedrock-backup.sh</pre>
<pre>0 */12 * * * /usr/local/bin/bedrock-backup.sh</pre>


\# Бэкап ежедневно в 3:00
Бэкап ежедневно в 3:00
<pre>0 3 * * * /usr/local/bin/bedrock-backup.sh</pre>
<pre>0 3 * * * /usr/local/bin/bedrock-backup.sh</pre>


3. Пример полной конфигурации:
3. Пример полной конфигурации:
<pre>\# Бэкап каждый день в 3:00 ночи
<pre># Бэкап каждый день в 3:00 ночи
0 3 * * * /usr/local/bin/bedrock-backup.sh >> /var/log/bedrock-backup-cron.log 2>&1</pre>
0 3 * * * /usr/local/bin/bedrock-backup.sh >> /var/log/bedrock-backup-cron.log 2>&1</pre>


Строка 207: Строка 207:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


BACKUP_DIR="/backup/bedrock"
BACKUP_DIR="/backup/bedrock"
Строка 216: Строка 216:
INCREMENTAL=false
INCREMENTAL=false


\# Парсинг аргументов
# Парсинг аргументов
while [[ $# -gt 0 ]]; do
while [[ $# -gt 0 ]]; do
     case $1 in
     case $1 in
Строка 238: Строка 238:
}
}


\# Функция инкрементального бэкапа
# Функция инкрементального бэкапа
incremental_backup() {
incremental_backup() {
     log_message "Starting incremental backup..."
     log_message "Starting incremental backup..."
      
      
     \# Поиск последнего бэкапа
     # Поиск последнего бэкапа
     LAST_BACKUP=$(ls -td "$BACKUP_DIR"/20* 2>/dev/null | head -1)
     LAST_BACKUP=$(ls -td "$BACKUP_DIR"/20* 2>/dev/null | head -1)
      
      
Строка 251: Строка 251:
     fi
     fi
      
      
     \# Инкрементальный бэкап только измененных файлов
     # Инкрементальный бэкап только измененных файлов
     log_message "Using rsync for incremental backup..."
     log_message "Using rsync for incremental backup..."
     rsync -av --link-dest="$LAST_BACKUP" \
     rsync -av --link-dest="$LAST_BACKUP" \
Строка 262: Строка 262:
}
}


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


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


BACKUP_DIR="/backup/bedrock"
BACKUP_DIR="/backup/bedrock"
Строка 293: Строка 293:
log_message "Starting backup rotation..."
log_message "Starting backup rotation..."


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


log_message "Deleted $DELETED old backup(s)"
log_message "Deleted $DELETED old backup(s)"


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


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


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


if [ -z "$1" ]; then
if [ -z "$1" ]; then
Строка 357: Строка 357:
echo "Type: $RESTORE_TYPE"
echo "Type: $RESTORE_TYPE"


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


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


\# Восстановление
# Восстановление
case "$RESTORE_TYPE" in
case "$RESTORE_TYPE" in
     world)
     world)
Строка 386: Строка 386:
esac
esac


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


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


4. Использование:
4. Использование:
<pre>\# Восстановить все
<pre># Восстановить все
sudo /usr/local/bin/bedrock-backup-restore.sh 20240101_030000 all
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 world


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


Строка 417: Строка 417:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


BACKUP_DIR="/backup/bedrock"
BACKUP_DIR="/backup/bedrock"
Строка 424: Строка 424:
echo ""
echo ""


\# Последний бэкап
# Последний бэкап
LAST_BACKUP=$(ls -td "$BACKUP_DIR"/20* 2>/dev/null | head -1)
LAST_BACKUP=$(ls -td "$BACKUP_DIR"/20* 2>/dev/null | head -1)
if [ -z "$LAST_BACKUP" ]; then
if [ -z "$LAST_BACKUP" ]; then
Строка 440: Строка 440:
echo ""
echo ""


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


\# Список всех бэкапов
# Список всех бэкапов
echo "All backups:"
echo "All backups:"
ls -lh "$BACKUP_DIR" | grep "^d" | awk '{print $9, $5, $6, $7, $8}' | head -10</pre>
ls -lh "$BACKUP_DIR" | grep "^d" | awk '{print $9, $5, $6, $7, $8}' | head -10</pre>
Строка 458: Строка 458:
<pre>sudo /usr/local/bin/bedrock-backup-status.sh</pre>
<pre>sudo /usr/local/bin/bedrock-backup-status.sh</pre>


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


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


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


REMOTE_HOST="backup-server.example.com"
REMOTE_HOST="backup-server.example.com"
Строка 473: Строка 473:
LOCAL_BACKUP="/backup/bedrock"
LOCAL_BACKUP="/backup/bedrock"


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


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


Строка 485: Строка 485:
echo "Remote backup completed!"</pre>
echo "Remote backup completed!"</pre>


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


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


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


* '''[Выделенные серверы](https://ark-hoster.ru/dedicated/)''' - для высоконагруженных Bedrock серверов
* '''[https://ark-hoster.ru/dedicated/ Выделенные серверы]''' - для высоконагруженных Bedrock серверов
* '''[VPS/VDS серверы](https://ark-hoster.ru/vpsgame/)''' - для небольших и средних серверов
* '''[https://ark-hoster.ru/vpsgame/ VPS/VDS серверы]''' - для небольших и средних серверов


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

Текущая версия от 08:13, 14 ноября 2026

Настройка автоматических бэкапов 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:

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