Как создать резервную копию сервера
Подготовка и доступ к серверу
- Авторизуйтесь в панели управления proxify.cloud. Перейдите в раздел «Мои услуги» → «Выделенные серверы» и выберите нужный сервер. Нажмите кнопку «Консоль» или «VNC», чтобы открыть прямой доступ к CLI Ubuntu. Альтернативно подключитесь по SSH с вашего компьютера:
ssh root@<IP-адрес_сервера>
- Убедитесь, что вы находитесь в домашней директории root или пользователя, под которым запущен сервер (обычно
minecraftилиubuntu). Проверьте текущего пользователя:
whoami
Определите точный путь к директории сервера. Стандартные варианты:
/opt/minecraft/home/minecraft/server/var/lib/minecraft
Найдите папку командой:
find / -type f -name "server.jar" 2>/dev/null | head -5
Запомните полный путь к родительской папке (например, /opt/minecraft). Далее в инструкции используется переменная $SERVER_DIR.
Остановка сервера перед бэкапом (рекомендуется)
- Чтобы гарантировать целостность миров и баз данных, остановите сервер. Если используется systemd-юнит:
systemctl stop minecraft
Если сервер запущен в screen или tmux под пользователем minecraft:
su - minecraft -c "screen -S mc -X stuff 'save-all\nsave-off\nstop\n'"
Подождите 10–15 секунд, пока процесс полностью завершится. Проверьте:
ps aux | grep -E "java.*server.jar" | grep -v grep
Вывод должен быть пустым.
Создание архива вручную через tar
- Перейдите в родительскую директорию сервера и создайте сжатый архив с текущей датой в имени:
cd /opt
tar -czvf "minecraft_backup_$(date +%F_%H-%M).tar.gz" minecraft
-c— создать архив-z— сжатие gzip-v— подробный вывод-f— имя файла
Архив появится в /opt/minecraft_backup_YYYY-MM-DD_HH-MM.tar.gz.
- Проверьте целостность архива и его размер:
tar -tzvf minecraft_backup_$(date +%F_%H-%M).tar.gz | head -20
ls -lh minecraft_backup_*.tar.gz
Автоматизация: скрипт бэкапа с ротацией
- Создайте скрипт
/usr/local/bin/mc_backup.sh:
cat > /usr/local/bin/mc_backup.sh << 'EOF'
#!/bin/bash
# Автоматический бэкап Minecraft-сервера с ротацией
# Настройте переменные ниже
SERVER_DIR="/opt/minecraft"
BACKUP_DIR="/opt/backups"
KEEP_DAYS=7
DATE=$(date +%F_%H-%M)
ARCHIVE_NAME="minecraft_${DATE}.tar.gz"
# Создаём папку для бэкапов, если нет
mkdir -p "${BACKUP_DIR}"
# Опционально: останавливаем сервер (раскомментируйте, если нужно)
# systemctl stop minecraft
# sleep 10
# Создаём архив
tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" -C "$(dirname "${SERVER_DIR}")" "$(basename "${SERVER_DIR}")"
# Опционально: запускаем сервер обратно
# systemctl start minecraft
# Удаляем старые бэкапы старше KEEP_DAYS дней
find "${BACKUP_DIR}" -type f -name "minecraft_*.tar.gz" -mtime +${KEEP_DAYS} -delete
echo "[$(date)] Бэкап создан: ${BACKUP_DIR}/${ARCHIVE_NAME}"
EOF
- Сделайте скрипт исполняемым и протестируйте:
chmod +x /usr/local/bin/mc_backup.sh
/usr/local/bin/mc_backup.sh
Проверьте результат в /opt/backups/.
Настройка systemd-таймера для ежедневного запуска
- Создайте unit-файл сервиса
/etc/systemd/system/mc-backup.service:
[Unit]
Description=Minecraft Server Backup
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mc_backup.sh
User=root
- Создайте таймер
/etc/systemd/system/mc-backup.timer:
[Unit]
Description=Daily Minecraft Backup Timer
[Timer]
Persistent=true
RandomizedDelaySec=1h
[Install]
WantedBy=timers.target
- Активируйте и запустите таймер:
systemctl daemon-reload
systemctl enable --now mc-backup.timer
systemctl list-timers --all | grep mc-backup
Бэкапы теперь будут создаваться ежедневно в случайное время в пределах часа от 00:00.
Копирование бэкапов на внешнее хранилище (rclone)
- Установите
rcloneдля отправки копий в S3, Google Drive, Yandex Disk или SFTP:
apt update && apt install -y rclone
rclone config
Следуйте интерактивному мастеру: n → имя remote_backup → тип хранилища (например, s3 для S3-совместимых) → введите ключи доступа.
- Добавьте строку загрузки в скрипт бэкапа (после создания архива, до ротации):
rclone copy "${BACKUP_DIR}/${ARCHIVE_NAME}" "remote_backup:minecraft-backups/" --progress
Полный обновлённый скрипт теперь отправляет копию в облако сразу после создания.
Проверка восстановления (test restore)
- Раз в месяц проводите тестовое восстановление на отдельной директории, не затрагивая продакшн:
mkdir -p /tmp/test_restore
cd /tmp/test_restore
tar -xzvf /opt/backups/minecraft_2025-01-15_03-30.tar.gz
ls -la minecraft/
Убедитесь, что присутствуют ключевые файлы: server.jar, world/, server.properties, banned-players.json, ops.json.
- При необходимости запустите тестовый сервер на другом порту (например, 25566) для проверки загрузки мира:
cd /tmp/test_restore/minecraft
java -Xms1G -Xmx2G -jar server.jar nogui --port 25566
Подключитесь локально и проверьте чанки. После теста остановите процесс Ctrl+C и удалите /tmp/test_restore.
Бэкап через панель proxify.cloud (снимки диска)
В панели proxify.cloud откройте страницу вашего выделенного сервера. Перейдите во вкладку «Резервные копии» → «Создать снимок».
- Выберите тип: «Полный снимок диска» (включает ОС, конфиги, все данные).
- Добавьте описание:
manual_pre_update_$(date +%F). - Нажмите «Создать». Ожидайте завершения (обычно 5–15 минут в зависимости от диска).
Снимки хранятся в инфраструктуре proxify.cloud и не занимают место на вашем диске. Для восстановления: выберите снимок → «Восстановить» → подтвердите перезагрузку сервера. Внимание: это откатит весь диск к моменту снимка.
Мониторинг и уведомления
- Добавьте отправку уведомления в Telegram или email в конец скрипта
/usr/local/bin/mc_backup.sh:
# Telegram
TG_BOT_TOKEN="123456:ABC-DEF"
TG_CHAT_ID="-1001234567890"
curl -s -X POST "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" \
-d chat_id="${TG_CHAT_ID}" \
-d text="✅ Minecraft backup done: ${ARCHIVE_NAME} ($(du -h ${BACKUP_DIR}/${ARCHIVE_NAME} | cut -f1))" \
>/dev/null
Для email используйте mailutils и sendmail.
Возможные проблемы и решения
| Проблема | Причина | Решение |
|---|---|---|
| Архив создаётся пустым (0 байт) | Переменная $SERVER_DIR указывает несуществующий путь |
Проверьте ls -ld $SERVER_DIR перед запуском скрипта. Исправьте путь в скрипте. |
tar: Removing leading '/' from member names |
Использован абсолютный путь внутри архива | Всегда переходите в родительскую папку и архивируйте относительный путь: tar -czf ... -C /opt minecraft. |
| Бэкап не запускается по таймеру | Таймер не активен или Persistent=true не сработал |
Выполните systemctl status mc-backup.timer, проверьте systemctl list-timers. При необходимости systemctl restart mc-backup.timer. |
Ошибка rclone: failed to copy: access denied |
Неверные credentials или политики бакета | Перезапустите rclone config, проверьте права IAM/ACL на бакете. Тест: rclone ls remote_backup:minecraft-backups/. |
| Сервер не останавливается перед бэкапом | Systemd-юнит называется иначе или процесс завис | Уточните имя: `systemctl list-units |
| Место на диске заканчивается | Ротация не работает (KEEP_DAYS не срабатывает) |
Проверьте find /opt/backups -type f -name "minecraft_*.tar.gz" -mtime +7. Убедитесь, что mtime файлов обновляется при создании (tar -c обновляет mtime). |
| Восстановление снимка proxify.cloud не загружается | Сервер застрял в BIOS/GRUB после отката диска | В консоли VNC выберите правильный загрузочный диск. При необходимости загрузитесь в rescue-режим и переустановите GRUB: grub-install /dev/sda && update-grub. |
| Мир повреждён после восстановления | Бэкап сделан без save-off / сервер писал чанки в момент архивации |
Всегда выполняйте save-all + save-off перед tar, либо используйте снимки диска (crash-consistent). |
| Скрипт не пишет логи | Вывод уходит в journald, а не в файл | Добавьте в unit StandardOutput=append:/var/log/mc_backup.log StandardError=append:/var/log/mc_backup.log и перезагрузите демон: systemctl daemon-reload. |
Комментарии (0)