RE:NODE

Эксплуатация13 мин чтения

Стратегия бэкапов игрового сервера по играм

В каких папках лежит мир в популярных играх, как получить целостную копию, сколько backup хранить и где должна лежать внешняя копия.

0 прочтений

Стратегия резервного копирования игрового сервера сводится к четырём решениям: в каких папках лежат мир и настройки, как заставить игру записать чистую копию, прежде чем вы её снимете, сколько копий хранить и как долго, и где лежит хотя бы одна из них, если не на самом сервере. Для большинства игр мир - это одна-две папки, разумное расписание - ежедневный backup с хранением неделю плюс заблокированная копия перед каждым обновлением, а внешняя копия - это архив, который вы раз в неделю скачиваете сами. Всё остальное в этой статье - то же самое, но по каждой игре отдельно, потому что папка, важная в Minecraft, - не та, что важна в Palworld, а backup не той папки - самый частый способ получить пустую резервную копию.

Общая теория - что делает копию восстановимой, идея 3-2-1, целостность - описана в статье backup, которые действительно восстанавливаются. Здесь прикладная версия для игровых серверов: реальные пути, реальные команды сохранения и политика хранения, которая соответствует тому, как играют в каждый тип игр.

Три вида данных на любом игровом сервере#

Прежде чем решать, что копировать, полезно разложить файлы игрового сервера на три группы, потому что обращаться с ними нужно совершенно по-разному.

  1. Состояние - мир, прогресс игроков, базы, балансы экономики, база прав. Оно меняется каждую минуту работы сервера, его нельзя заново откуда-то скачать, и это единственное, потеря чего необратима. Оно должно быть в каждом backup.
  2. Конфигурация - server.properties, serverDZ.cfg, PalWorldSettings.ini, конфиги плагинов, списки админов и банов. Небольшая, меняется редко, и восстанавливать её мучительно, потому что никто не помнит сорок значений, которые подкручивал. Копируйте её вместе с состоянием - это ничего не стоит.
  3. Воспроизводимые файлы - бинарники игры, Steam runtime, загрузки из Workshop, Java runtime. Это гигабайты, и каждый байт можно скачать заново через SteamCMD или переустановку в панели. Если их не включать, backup остаются маленькими и быстрыми.

Ловушка - на границе между первой и третьей группами. Моды в теории воспроизводимы, но только в той версии, на которой вы работали, а автор мода может удалить старый релиз. Если сервер зависит от мода конкретной версии, файл мода должен попасть в backup, даже если его в принципе можно скачать снова. То же касается кастомной карты: она воспроизводима, пока её автор не исчезнет.

Что копировать в каждой игре#

Вот папки с состоянием и конфигурацией для игр, которые хостят чаще всего. Пути указаны относительно корня сервера, если не начинаются с ~, и некоторые из них меняются, если при запуске передан аргумент каталога сохранений, поэтому прежде чем доверять таблице, проверьте строку запуска на своём сервере.

ИграМир и состояниеКонфигурация, которую стоит хранить
Minecraft (Paper)world, world_nether, world_the_endserver.properties, plugins/, ops.json, whitelist.json
Valheimworlds_local/<World>.db и .fwladminlist.txt, bannedlist.txt, permittedlist.txt
PalworldPal/Saved/SaveGames/0/<id>/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
Project ZomboidZomboid/Saves/Multiplayer/<name>/, Zomboid/db/<name>.dbZomboid/Server/<name>.ini, <name>_SandboxVars.lua
7 Days to Dieпапка сохранения вашего мира и игрыserverconfig.xml, serveradmin.xml
Terrariaфайл .wld и его .twld (tModLoader)serverconfig.txt, tshock/
Factoriosaves/*.zipdata/server-settings.json, server-adminlist.json, mods/
DayZmpmissions/<mission>/storage_1/serverDZ.cfg, файлы db/ миссии
UnturnedServers/<id>/Level/, Servers/<id>/Players/Commands.dat, Config.json
Don't Starve Together<Cluster>/Master/save/, <Cluster>/Caves/save/cluster.ini, server.ini каждого шарда
Garry's Modgarrysmod/sv.db, garrysmod/data/garrysmod/cfg/, addons/
Counter-Strike 2нет - постоянного мира нетgame/csgo/cfg/, game/csgo/addons/

Некоторые строки требуют пояснений.

Minecraft на Paper и Spigot хранит три измерения в трёх папках. Ванилла держит Незер и Энд внутри основной папки world как DIM-1 и DIM1, поэтому скрипт, написанный для ваниллы, пропускает две трети мира Paper. Данные плагинов лежат в plugins/<Plugin>/, и часть из них - тоже состояние: приваты, балансы экономики, группы LuckPerms, если они хранятся в стандартном файле H2. Команды сохранения и откат на уровне регионов подробно разобраны в статье backup и восстановление мира Minecraft.

Project Zomboid - игра, в которой ошибаются чаще всего. Карта лежит в Saves/Multiplayer/<servername>, а аккаунты и пароли игроков - в db/<servername>.db. Восстановите только карту - и всем игрокам придётся регистрироваться заново; восстановите только базу - и они зайдут в мир, который их не знает.

7 Days to Die хранит сохранения в папке пользовательских данных, которая в Linux по умолчанию находится в ~/.local/share/7DaysToDie/Saves/, если UserDataFolder или SaveGameFolder в serverconfig.xml не указывают на другое место. У мира со случайной генерацией есть ещё сгенерированная карта в GeneratedWorlds/ - по меркам конфигурации она небольшая, но генерировалась десять минут или дольше, и без неё сохранение бесполезно.

DayZ пишет persistence в папку миссии. В storage_1 лежат объекты мира, игроки и транспорт; число - это id инстанса, заданный в serverDZ.cfg. Файлы экономики рядом (types.xml, events.xml) - это конфигурация, и именно их вы правите, так что меняются они чаще, чем кажется.

Counter-Strike 2 и другие матчевые шутеры не могут потерять ничего, кроме конфигурации. Их «backup» - это копия cfg/ и папок плагинов, лучше всего в git-репозитории, а ежедневный снимок неизменной папки - просто занятое место на диске.

Целостная копия: сначала сохранить, потом копировать#

Большинство игр держат мир в памяти и пишут его на диск по таймеру. Копия файлов, снятая в тот момент, когда игра на середине записи, даёт мир, который выглядит целым и не загружается. Решение одинаково для всех игр: попросите сервер записать всё на диск, дождитесь окончания и только потом снимайте копию.

ИграКоманда сохраненияПримечания
Minecraftsave-off, save-all flush, затем save-onsave-off отключает автосохранение на время копирования
Valheimsave (админ, внутриигровая консоль)В ванилле нет команды для консоли сервера; корректная остановка тоже сохраняет
PalworldSave через RCON или как админ-командаДля админ-команд в игре сначала нужен /AdminPassword
Project Zomboidsave в консоли сервера
7 Days to Diesaveworld (или sa)Работает из консоли и через telnet
Factorio/server-saveЗаписывает текущий файл сохранения
Terrariasave в консоли сервера
Unturnedsave в консоли сервера
DayZнетPersistence пишется при выключении и по таймеру

В панели для этого лучше всего подходит вкладка Schedules. Расписания RE:NODE выполняют задачи по порядку с задержками - консольная команда, backup, действие питания, - поэтому последовательность такая: команда сохранения, пауза от тридцати до шестидесяти секунд, чтобы большой мир успел записаться, затем задача backup. Строки cron и полная ночная последовательность - в статье запланированные задачи, которые стоит завести.

Nightly backup schedule, Minecraft
Task 1  command  say Backup in 1 minute - expect a short pauseTask 2  command  save-off              (delay 60 s)Task 3  command  save-all flush        (delay 5 s)Task 4  backup                         (delay 45 s)Task 5  command  save-on               (delay 120 s)

Для игры без команды сохранения безопасных вариантов два: остановка, backup и запуск - или согласие с тем, что копия будет на момент последнего автосохранения. DayZ относится ко второй группе: копия storage_1, снятая через несколько минут после планового сохранения persistence, на практике вполне годится. Остановить сервер перед backup никогда не ошибка - это просто неудобно, поэтому обычно это делают внутри окна ночного рестарта.

Сколько backup хранить и как долго#

Срок хранения зависит от того, как играют в игру, а не от того, сколько свободного места на диске. Три схемы покрывают почти любой сервер.

Постоянные миры

Серверы выживания и песочницы - Minecraft SMP, Valheim, Palworld, Project Zomboid, 7 Days to Die без вайпов, Factorio, Satisfactory - накапливают ценность каждый день и никогда не сбрасываются. Разумная ротация такая:

  • Ежедневные backup с хранением семь дней. Это покрывает гриф, замеченный через несколько дней, и повреждённый чанк, о котором никто не знал, пока туда кто-нибудь не зашёл.
  • Еженедельные backup с хранением четыре недели. Слотов backup в панели на такое редко хватает - для этого и нужно скачивание (следующий раздел).
  • Заблокированные backup перед каждым обновлением игры, каждым изменением модов и каждой операцией редактирования мира, которые хранятся, пока вы не убедитесь, что изменение сработало, - обычно неделю.

Серверы с вайп-циклом

Rust, серверы DayZ, которые вайпаются по циклу, и всё, что живёт сезонами. Backup старше последнего вайпа для живого сервера ничего не стоит. Храните ежедневные копии в пределах текущего цикла и одну архивную копию финального состояния перед каждым вайпом, если хотите потом его показать или разрешить спор. Самая интересная конфигурация - настройки плагинов, таблицы лута, экономика - переживает вайп, и именно её важнее всего версионировать.

Матчевые серверы

Counter-Strike 2, Team Fortress 2, Insurgency: Sandstorm и подобные. Держите конфигурацию в системе контроля версий и копируйте базы данных плагинов (sourcemod-local.sq3 у SourceMod, если вы используете SQLite для админов или статистики). Ежедневный полный backup - это потраченные впустую слоты.

На RE:NODE в каждый игровой тариф входят два слота backup, и backup можно заблокировать, чтобы ротация его никогда не удаляла. Двух слотов хватает на «прошлую ночь» и «до обновления» - это та пара, которая важнее всего; всё, что дольше, живёт в ваших скачанных копиях.

Внешняя копия и почему панели недостаточно#

Backup в панели RE:NODE хранятся не на той машине, которую защищают, и это закрывает вопрос отказавшего диска. Но не все вопросы:

  • Удаление сервера удаляет его backup, включая заблокированные. Отменённый тариф, неоплаченный счёт, доживший до конца срока, или ошибочное удаление уносят копии вместе с сервером.
  • Слотов ограниченное число. Ежедневное расписание перезаписывает копию прошлой недели, а она как раз и нужна, если проблема началась шесть дней назад.
  • Учётные данные - единая точка отказа. Любой, у кого есть полный доступ к аккаунту панели, может удалить и сервер, и все его backup. Это повод включить двухфакторную аутентификацию в аккаунте панели и завести субпользователей с минимальными правами, а также повод держать одну копию там, куда не дотягивается ни один вход в панель.

Практичный ответ для большинства небольших серверов - еженедельное скачивание. Backup можно скачать из панели архивом; положите его на свою машину или в хранилище с версионированием, назвав по дате. Для крупного сообщества это стоит автоматизировать: задача по расписанию на домашней машине или дешёвом VDS, которая забирает папку мира по SFTP.

bash
# Weekly pull of a Valheim world over SFTP, run from your own machine$ sftp -P 2022 user.abc123@panel.example:/worlds_local/Midgard.* \    ~/backups/valheim/$(date +%F)/

Точные хост, порт и имя пользователя указаны в данных SFTP сервера в панели; где их найти, описано в статье SFTP и файловый менеджер. По возможности забирайте копию, а не живой файл: скачанный архив backup целостен, а живой .db посреди сохранения - нет.

Размер, частота и цена#

Размер backup решает, насколько расписание практично. Примерные размеры долгоживущих миров без бинарников:

ИграТипичный размер мираЧто его увеличивает
Valheim20-150 MBИсследованная область, элементы построек, терраформинг
Minecraft SMP1-20 GBИсследованные чанки; предгенерация умножает размер
Palworld50-500 MBБазы, палы, число игроков
Project Zomboid1-10 GBПосещённые клетки; сохраняется каждый посещённый чанк
7 Days to Die200 MB-3 GBРазмер карты и постройки игроков
Factorio5-200 MBРазмер фабрики; сжатый zip
Terraria5-50 MBОдин .wld на мир
DayZ50-500 MBПостоянные объекты, палатки и базы

Отсюда два вывода. Маленькие миры (Valheim, Terraria, Factorio) можно копировать каждый час, и никто этого не заметит. Большие (мир Minecraft с предгенерированной границей в 10 000 блоков, оживлённая карта Zomboid) архивируются так долго, что ежечасный backup жесток и к диску, и к игре, а правильный ритм - раз в день в тихий час. Здесь особенно важно исключать ненужное: backup Minecraft с кешем тайлов Dynmap или BlueMap может быть в пять раз больше мира, который эти тайлы показывают. Дисковая сторона вопроса, включая запас места, нужный backup во время сборки, - в статье сколько места на диске нужно игровому серверу.

Чтобы исключить папки в панели на базе Pterodactyl, используется файл исключений .pteroignore в корне сервера, который пишется как .gitignore (это функция исходного Pterodactyl, так что если не уверены, что она поддерживается, спросите хостера):

.pteroignore
# rebuilt on demand, no need to back them upplugins/dynmap/web/tiles/bluemap/web/maps/logs/crash-reports/cache/*.log.gz

Проверьте это один раз: сделайте backup и сравните его размер с размерами папок в файловом менеджере. Правило исключения, случайно совпавшее с папкой мира, - тихая катастрофа.

Восстановление: порядок, который не сделает хуже#

Когда этот день наступает, больше всего вреда происходит именно при восстановлении, потому что люди действуют быстро на сервере, который всё ещё работает.

  1. Остановите сервер. Восстановление поверх работающего мира будет перезаписано при следующем автосохранении.
  2. Сделайте backup сломанного состояния и заблокируйте его. Что-то из него может понадобиться позже - постройка, сделанная после последнего хорошего backup, или доказательства того, кто нанёс ущерб.
  3. Восстановите backup целиком или извлеките только папку мира, если с тех пор вы меняли конфигурацию и хотите её сохранить. На RE:NODE панель восстанавливает backup одной кнопкой; для частичного восстановления скачайте архив и загрузите нужную папку через файловый менеджер, который распаковывает архивы на месте.
  4. Проверьте, что версии совпадают. Мир из версии до обновления игры почти всегда загружается в новой версии; мир из версии после обновления редко загружается в старой. Если вы откатываете саму игру, читайте статью фиксация версий и откаты.
  5. Запустите сервер и прочитайте лог - найдите строку о том, какой мир загружен. Сервер, который не нашёл мир, обычно генерирует новый с тем же именем и выглядит совершенно здоровым.
  6. Сообщите игрокам, на какое время восстановлен мир, чтобы они знали, что потеряли.

Потом, в какой-нибудь спокойный момент, отрепетируйте это. Проверка восстановления до того, как оно понадобится - это получасовая тренировка, и именно так вы узнаете, что папки db в backup никогда не было.

Типичные пробелы по играм#

Backup, которые подводят в нужный день, обычно подводят по одной из этих причин:

  • Мир лежал в другом месте. Флаг каталога сохранений при запуске (-savedir в Valheim, UserDataFolder в 7 Days to Die, -cachedir в Project Zomboid) увёл мир из папки, которую копировали.
  • База данных была не файлом. Плагинам и фреймворкам, которые хранят состояние в базе данных, - фреймворкам FiveM через oxmysql, плагинам Minecraft, настроенным на внешнюю базу, - нужен ещё и дамп этой базы. В панели слот базы данных отделён от файлового backup; как снять дамп, описано в статье backup и восстановление баз данных.
  • Изменилось имя сервера. Zomboid и Don't Starve Together привязывают папки к имени. Переименуйте сервер - и он начнёт писать в новую пустую папку, а расписание backup продолжит архивировать старую.
  • Backup выполнялся во время сохранения. В расписании нет команды сохранения или задержка слишком короткая для большого мира.
  • Обновился контент Workshop. Мир ссылается на версию мода, которой в Workshop больше нет. Для всего, что нельзя потерять, храните копию файлов модов вместе с сохранением.
  • Встроенные backup приняли за настоящие. -backups в Valheim, плагины backup для Minecraft и собственная папка backup в 7 Days to Die лежат на том же диске, что и мир. Они защищают от повреждённого сохранения, но не от удалённого сервера.

FAQ#

Как часто делать backup игрового сервера?

Ежедневно для постоянного мира, в час, когда никто не играет, плюс ручной backup перед каждым обновлением или изменением модов. Ежечасный backup оправдан только для маленьких миров, где потеря часа вечерней игры действительно расстроит людей, и только если backup занимает секунды.

Нужно ли останавливать сервер для backup?

Нет, если в игре есть команда сохранения. Выполните её, дождитесь окончания записи, потом копируйте. Для игр без такой команды остановка - единственный способ гарантировать целостную копию, поэтому многие встраивают backup в ночной рестарт.

Стоит ли копировать сами файлы игры?

Обычно нет. Они возвращаются переустановкой или обновлением через SteamCMD. Исключение - когда вы зависите от точной версии, например модовый сервер, закреплённый на старой сборке: тогда храните одну копию рабочей установки отдельно от ежедневных backup мира.

Чем backup в панели отличается от скачанной копии?

Backup в панели живёт вместе с вашим аккаунтом и исчезает, если сервер удалён. Скачанная копия хранится у вас, вне досягаемости панели. Нужны обе: backup в панели для быстрого восстановления, скачанная копия - на тот день, когда копии в панели не станет.

Почему восстановленный мир выглядит совсем новым?

Сервер не нашёл мир под тем именем, которое ему велели загрузить, и сгенерировал новый. Сверьте имя мира или сервера в настройках запуска с восстановленной папкой или файлом, включая заглавные буквы, и перезапустите сервер.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000