Мир Valheim - это два файла, Name.db и Name.fwl, и сервер хранит три вида их копий: пару .old, которая записывается при каждом сохранении, автоматические резервные копии, которыми управляют -backups, -backupshort и -backuplong, и настоящие backup, которые вы уносите с машины. Восстановление из любой из них - одна и та же операция: остановите сервер, положите нужную пару .db и .fwl в worlds_local под именем мира и запустите его снова. Повреждение почти всегда возникает из-за того, что процесс умер или диск заполнился во время сохранения, и лечится почти всегда последней исправной парой. В этой статье - где что лежит, что делает каждый флаг, как восстанавливать и как вернуть мир, который загружается неправильно или не загружается вовсе.
Остальная настройка сервера описана в руководстве по выделенному серверу Valheim. Если вы впервые переносите мир на сервер, а не спасаете его, лучше начать со статьи как загрузить сохранение Valheim.
Что такое мир Valheim на диске#
Всё, что относится к миру, хранится в двух файлах с одинаковым базовым именем:
| Файл | Размер | Что в нём |
|---|---|---|
Name.fwl | Несколько сотен байт | Имя мира, сид, версия генератора, ключи мира |
Name.db | От нескольких МБ до сотен | Каждый элемент постройки, предмет, существо, изменение рельефа |
Name.db.old | Как у .db | Предыдущее сохранение, остаётся при записи нового |
Name.fwl.old | Как у .fwl | Предыдущие метаданные |
Name_backup_auto-*.db / .fwl | Как у .db | Автоматические резервные копии по таймеру |
Файл .fwl маленький, но обязательный. В нём хранится сид, а сид генерирует рельеф, на который накладываются изменения из .db. Файл .db одного мира в паре с .fwl другого загрузится, но постройки окажутся не на том ландшафте. Всегда перемещайте, копируйте и восстанавливайте оба файла парой, снятой в один и тот же момент.
На сервере Linux место по умолчанию - папка данных Unity пользователя:
~/.config/unity3d/IronGate/Valheim/worlds_local/На сервере Windows это %USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local\. Если сервер запускается с -savedir /some/path, миры попадают в /some/path/worlds_local/, а списки админов, банов и разрешённых игроков - в /some/path. Хостинги обычно задают -savedir, чтобы мир лежал внутри папки сервера, куда достаёт файловый менеджер.
Чего на сервере нет, так это персонажей. Персонаж каждого игрока, его инвентарь и навыки хранятся на его собственной машине в characters_local. Восстановление мира персонажей не трогает, поэтому после отката у игроков могут остаться предметы, которых в мире уже нет, - и поэтому повреждённый персонаж - это проблема клиента, которую сервер исправить не может.
Как сервер сохраняет мир#
Мир живёт в памяти и записывается на диск каждые -saveinterval секунд, по умолчанию 1800. Корректное выключение тоже его записывает. Каждое сохранение по очереди делает три вещи:
- Записывает новые данные мира.
- Оставляет предыдущие
.dbи.fwlкак.old. - Пишет в лог строку с длительностью сохранения.
World saved ( 912.48ms )Формулировка от версии к версии немного менялась, но строка появляется при каждом сохранении. Для нашей темы это самая полезная строка в логе: она говорит, когда было последнее удачное сохранение и сколько времени занимает запись мира.
Всё, что завершает процесс без этой строки - kill, остановка из-за нехватки памяти, падение хоста, - теряет всё, что было после предыдущей. А всё, что завершает процесс во время этой строки, пока файл записан наполовину, - именно так миры и повреждаются.
Встроенные флаги резервного копирования#
У Valheim есть собственная система резервного копирования, которая настраивается тремя аргументами запуска:
| Аргумент | По умолчанию | Что делает |
|---|---|---|
-backups | 4 | Сколько автоматических копий хранить |
-backupshort | 7200 | Секунд до первой копии после запуска |
-backuplong | 43200 | Секунд между копиями после этого |
-saveinterval | 1800 | Секунд между сохранениями мира |
С настройками по умолчанию первая копия создаётся через два часа после запуска сервера, затем каждые двенадцать часов, и хранятся четыре самые свежие. Это полные копии .db и .fwl с _backup_auto- и отметкой времени в имени, и лежат они в той же папке worlds_local, что и мир.
Более плотная схема для активной группы:
-saveinterval 900 -backups 6 -backupshort 3600 -backuplong 21600Так сервер сохраняется каждые пятнадцать минут, делает первую копию через час, затем по одной каждые шесть часов и хранит шесть штук - полтора дня истории.
Встроенные копии полезны, и выключать их не нужно. Но это не резервные копии в том смысле, который важен. Они лежат на том же диске и в той же папке, что и файл, который защищают. Они спасают от неудачного сохранения, но не от удалённого сервера, отказа диска, ошибочного удаления в файловом менеджере или человека с доступом к файлам, который удалил папку. К тому же они ротируются, так что проблема, которую никто не замечал два дня, к моменту, когда кто-то посмотрит, уже есть во всех копиях.
Увеличение -backups стоит места на диске - каждая копия это полная копия .db, - так что для мира в 150 МБ двадцать копий занимают три гигабайта. Храните столько, сколько нужно, чтобы покрыть время, за которое ваша группа замечает проблему, и не больше.
Настоящие backup: вне машины и по расписанию#
Настоящий backup - это копия мира там, куда сервер не может писать, снятая по расписанию и время от времени восстанавливаемая, чтобы убедиться, что она работает. Подробно этот довод изложен в статье Резервные копии, которые действительно восстанавливаются; коротко - backup, который никто ни разу не восстанавливал, остаётся гипотезой.
Неудобство Valheim - согласованность. У ванильного сервера нет консоли, в которую можно отправить команду save снаружи игры, - save это внутриигровая команда администратора. Поэтому копия, снятая на работающем сервере, фиксирует файлы на момент последнего сохранения, и это нормально, если только в этот момент не идёт сохранение. Чистая схема - остановить сервер, снять копию и запустить его снова:
- Остановите сервер. Корректная остановка записывает мир.
- Дождитесь завершения процесса.
- Скопируйте
worlds_local- или хотя бы текущие.dbи.fwl- в другое место. - Запустите сервер.
В RE:NODE это делает за вас вкладка Schedules: расписание на cron-выражении с упорядоченными задачами и задержками - действие питания stop, backup через минуту, затем start. Слоты резервных копий входят в каждый тариф Valheim, хранятся вне машины, которую защищают, их можно скачать и заблокировать, чтобы заведомо исправная копия не ушла в ротацию. Восстановление - одна кнопка. Одно предостережение: удаление сервера удаляет и его резервные копии, включая заблокированные, поэтому скачайте всё, что хотите сохранить, прежде чем отменять услугу.
cron: 0 5 * * *task 1: power action - stoptask 2: backup (delay 60 seconds)task 3: power action - start (delay 30 seconds)Если вы и так планируете перезапуски, ставьте backup сразу после остановки - и получите и то и другое в одном тихом окне. Синтаксис разобран в статьях Запланированные задачи, которые стоит завести и cron-выражения простыми словами.
Делайте дополнительную копию вручную перед каждым обновлением игры, перед добавлением или удалением мода и перед изменением модификаторов мира. Именно в эти моменты миры и ломаются.
Восстановление старого сохранения#
Из какой бы копии вы ни восстанавливали, порядок одинаковый.
- Остановите сервер и дождитесь, пока он полностью завершится.
- Отложите текущие файлы в сторону, а не удаляйте их. Переименуйте
Midgard.dbиMidgard.fwl, например, вMidgard.db.brokenиMidgard.fwl.broken. Если после восстановления станет хуже, можно будет вернуться. - Положите выбранную пару на место под точным именем мира:
Midgard.dbиMidgard.fwl. Для автоматической копии это значит скопироватьMidgard_backup_auto-...dbи соответствующий.fwlи переименовать их. Для предыдущего сохранения переименуйтеMidgard.db.oldвMidgard.dbиMidgard.fwl.oldвMidgard.fwl. - Проверьте имя мира в аргументах запуска - оно должно совпадать, включая регистр букв.
- Запустите сервер и следите в логе, чтобы мир загрузился по имени, а не сгенерировался новый.
- Зайдите и проверьте какую-нибудь недавнюю постройку, которую вы помните, чтобы убедиться, что вернулись в нужный момент.
Какую копию брать, зависит от того, что пошло не так:
| Проблема | Откуда восстанавливать |
|---|---|
| Последнее сохранение повреждено, всё до него было в порядке | .db.old / .fwl.old |
| Ошибка несколько часов назад (гриферство, неудачная смена модификатора) | Самая свежая автоматическая копия до неё |
| Пропала вся папка или сервер пересобрали | Backup вне машины |
| Обновление мода сломало мир несколько дней назад | Backup вне машины, сделанный до обновления |
Восстановление из панели заменяет файлы сервера файлами из копии за один шаг, это покрывает шаги 2-3. Оно восстанавливает всё, что есть в копии, а не только мир, поэтому если вы с тех пор меняли конфиги модов, они тоже откатятся.
Как распознать повреждённый мир#
Повреждение проявляется несколькими узнаваемыми способами.
Сервер генерирует новый мир. Лог сообщает о создании нового мира вместо загрузки вашего. Обычно это вовсе не повреждение: имя мира не совпадает с именем файла, и сервер создал свежий мир рядом со старым. Прежде всего проверьте имя - ваши исходные файлы по-прежнему на месте.
Сервер не запускается, при загрузке мира падает исключение. Файл .db повреждён - как правило, обрезан, потому что процесс умер или диск заполнился посреди сохранения. Файл .db может оказаться намного меньше, чем должен быть, или иметь нулевой размер.
Мир загружается, но что-то не так. Рельеф не совпадает с постройками (.db в паре не с тем .fwl) или большой участок откатился (сервер часами работал без удачного сохранения, а потом перезапустился). В строгом смысле это не повреждение, но лечится так же: восстановите заведомо исправную пару.
Мир загружается, но игроки жалуются на пропавшие предметы. Проверьте, в мире дело или в персонажах. Сундуки и постройки находятся в мире, инвентарь - на машине каждого игрока. Если у игрока сбросился инвентарь, у него проблема с персонажем на стороне клиента.
Самая быстрая проверка подозрительного файла - его размер. Выведите содержимое worlds_local с размерами и сравните .db с .db.old и последней автоматической копией. Текущий .db, который намного меньше соседей, и есть повреждённый.
$ ls -lh ~/.config/unity3d/IronGate/Valheim/worlds_local/Что вызывает повреждение и как его предотвратить#
Почти каждый повреждённый мир Valheim восходит к прерванному сохранению.
- Принудительное завершение процесса. Если убить сервер - кнопкой Kill в панели вместо Stop или через
kill -9- посреди сохранения, останется наполовину записанный файл. Используйте Stop и ждите. - Нехватка памяти. Контейнер, остановленный на лимите памяти, умирает там, где его застало, в том числе посреди сохранения. Сохранению ненадолго нужна дополнительная память, поэтому сервер, работающий у самого лимита, скорее всего остановится именно в этот момент. В RE:NODE сервер на лимите останавливается и чисто перезапускается, а не уходит в swap, - это правильное поведение для машины, но всё равно остановка без сохранения; следите за графиком памяти и переходите на тариф выше заранее, а если это уже происходит, прочитайте почему игровой сервер постоянно перезапускается.
- Заполненный диск. Сохранение, которое не может дописаться, оставляет обрезанный файл. Ротируемые копии и старые логи заполняют диск медленно; проверяйте свободное место, когда увеличиваете
-backups. - Моды, которые пишут в мир. Моды, добавляющие свои данные, могут оставить мир, который загружается только с этим модом. Удаление такого мода может привести к исчезновению объектов или к тому, что мир не загрузится. Делайте backup перед изменением списка модов - безопасный способ описан в статье Моды Valheim с BepInEx.
- Редактирование файлов мира сторонними инструментами. Редакторы миров полезны, но файл, отредактированный и сохранённый устаревшим инструментом, текущая версия игры может не прочитать. Редактируйте копию.
Уменьшение -saveinterval не предотвращает повреждение, но сокращает цену неудачной остановки и делает пару .old более свежей.
Проверка backup до того, как он понадобится#
Восстановить копию впервые в аварийной ситуации - это как раз тот способ, которым люди узнают, что их копии были пустыми, не от того мира или шестинедельной давности. Проверьте одну в спокойный вечер:
- Скачайте копию из панели или скопируйте её с сервера.
- На своём компьютере положите пару
.dbи.fwlв локальную папкуworlds_localпод тестовым именем - переименуйте оба файла одинаково. - Запустите Valheim, выберите Start Game, выберите мир и отметьте Start Server, чтобы он работал локально.
- Дойдите до главной базы и убедитесь, что она в ожидаемом состоянии.
Это занимает десять минут и превращает надежду в факт. Более полная тренировка для любой игры - в статье Проверьте восстановление до того, как оно понадобится.
FAQ#
Насколько далеко можно откатить мир Valheim?
Настолько, насколько старая у вас самая старая копия. Пара .old - это одно сохранение назад; автоматические копии охватывают -backups, умноженное на -backuplong секунд, то есть два дня с настройками по умолчанию; backup вне машины - столько, сколько вы их храните. Всё, что старше всех трёх, потеряно.
Входят ли персонажи игроков в резервные копии?
Нет. Персонажи хранятся на компьютере каждого игрока, а не на сервере. Восстановление откатывает мир - постройки, сундуки, рельеф, прирученных животных, - но каждый игрок сохраняет тот инвентарь и навыки, которые у него есть сейчас.
Можно восстановить только одну базу, а не весь мир?
Ванильными средствами нельзя. Мир - это один файл, и восстанавливается он целиком. Редакторы миров умеют копировать участки между файлами, но это кропотливо и рискованно; прежде чем пробовать, сделайте backup текущего состояния.
Почему автоматических копий недостаточно?
Они лежат на том же диске и в той же папке, что и мир. Они переживут неудачное сохранение, но не удалённый сервер, отказ диска или ошибочно удалённую папку, и ротируются достаточно быстро, чтобы поздно замеченная проблема оказалась во всех них.
После обновления сервер создал новый мир. Мой пропал?
Почти наверняка нет. Проверьте worlds_local - старые файлы обычно на месте, а имя мира в аргументах запуска просто больше с ними не совпадает. Исправьте имя и перезапустите сервер.
Какого размера бывают резервные копии Valheim?
Каждая - полная копия .db, то есть примерно размером с ваш мир: несколько мегабайт поначалу и часто от 50 до 150 МБ у давно живущего мира. Умножьте на количество хранимых копий.




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