Рабочий бэкап мира Minecraft — это архив, снятый после save-off и save-all (чтобы не поймать сервер посреди записи на диск), с ротацией старых копий и обязательным вывозом на другую машину: копия рядом с оригиналом на том же VDS не спасёт, если сломается сам диск.
Почему бэкап на том же VDS — это не бэкап

Если архив мира лежит в соседней папке на том же сервере, он умирает вместе с оригиналом при любой аварии диска, случайном rm -rf не в той папке или проблеме у хостера. Настоящий бэкап — тот, который переживёт полную потерю машины, то есть физически находится в другом месте: на другом сервере, в объектном хранилище или хотя бы на локальном компьютере.
Останови запись перед копированием
Minecraft постоянно пишет данные мира на диск. Если скопировать файлы мира прямо во время записи, можно получить повреждённые чанки — сервер сохраняет данные не атомарно, и середина операции записи, попавшая в архив, потом может не открыться. Правильная последовательность: остановить автосохранение, принудительно сохранить всё, снять копию, включить автосохранение обратно.
- save-off — отключает периодическое автосохранение, пока идёт бэкап
- save-all — принудительно сбрасывает текущее состояние мира на диск одним разом
- save-on — включает автосохранение обратно после того, как копия снята
Эти команды отправляются в консоль сервера — например, через RCON (см. статью про systemd и отправку команд), если сервер запущен как systemd-сервис без интерактивной консоли.
Скрипт бэкапа с tar и ротацией
#!/bin/bash SRC=/opt/minecraft/world DEST=/opt/minecraft/backups DATE=$(date +%Y-%m-%d_%H-%M) RCON_PASS="твой_пароль_rcon" mkdir -p "$DEST" mcrcon -H 127.0.0.1 -p "$RCON_PASS" save-off mcrcon -H 127.0.0.1 -p "$RCON_PASS" save-all sleep 5 tar -czf "$DEST/world_$DATE.tar.gz" -C /opt/minecraft world mcrcon -H 127.0.0.1 -p "$RCON_PASS" save-on find "$DEST" -name "world_*.tar.gz" -mtime +7 -delete
mcrcon — отдельная консольная утилита для отправки команд по RCON, её нужно поставить заранее (пакет доступен в стандартных репозиториях Ubuntu или собирается из исходников). Последняя строка со find удаляет архивы старше 7 дней — это и есть ротация: место на диске не забивается бесконечно, но неделя истории всегда под рукой. Сделай скрипт исполняемым: chmod +x backup.sh.
Задание в cron
crontab -e 0 5 * * * /opt/minecraft/backup.sh >> /opt/minecraft/backup.log 2>&1
Строка выше запускает скрипт каждый день в 5 утра и пишет вывод в лог-файл — если что-то пойдёт не так, будет что почитать. Время подбери на период минимальной нагрузки игроков на твоём сервере.
Вывоз копии на другую машину через rsync
Локальная ротация защищает от случайной порчи мира, но не от потери самого VDS. Поэтому свежий архив стоит забирать на другую машину — по ssh-ключу, без пароля в скрипте.
rsync -avz -e "ssh -i ~/.ssh/id_ed25519" /opt/minecraft/backups/ user@адрес-второй-машины:/home/user/mc-backups/
Ключ ssh-ключа должен быть добавлен в authorized_keys на принимающей машине заранее (ssh-copy-id или вручную), чтобы rsync отработал без запроса пароля — это нужно для автоматического запуска по cron. Добавь эту команду отдельной строкой в тот же cron, сразу после локального бэкапа.
Что почитать дальше: Резервные копии на rsync · Учебное восстановление: проверьте копии заранее.

Проверь, что бэкап реально восстанавливается
Архив, который никогда не пробовали развернуть — это бэкап только на бумаге. Раз в какое-то время распакуй один из архивов в отдельную тестовую папку, положи его как мир в тестовый сервер и убедись, что он реально загружается без ошибок. Это единственный способ узнать, что в критический момент бэкап действительно сработает, а не окажется битым архивом, который никто не проверял.




