RE:NODE

Где Valheim хранит сохранения: миры, savedir и файлы сервера

Автор Команда RE:NODE
12 мин чтения


Выделенный сервер Valheim хранит всё важное в одной папке: миры лежат в подпапке worlds_local, а рядом с ней находятся adminlist.txt, bannedlist.txt и permittedlist.txt. В Windows это папка %USERPROFILE%\AppData\LocalLow\IronGate\Valheim, в Linux - ~/.config/unity3d/IronGate/Valheim, а аргумент запуска -savedir заменяет её любым путём на ваш выбор. Персонажей в ней нет никогда - они хранятся на компьютере каждого игрока. Почти каждая жалоба вида "мой мир пропал" или "админка не работает" сводится к тому, что кто-то правит нужный файл не в той папке. Поэтому в этой статье разобраны все расположения, и на клиенте, и на сервере, а также способ понять, какую папку на самом деле использует ваш сервер.

Краткая карта#

Структура папки с сохранениями одинакова на всех платформах. Меняется только корень.

ЧтоГде, относительно папки сохраненийУ кого есть
Миры (локальные)worlds_local/Name.db и Name.fwlСервер и игроки, которые сами хостят
Миры (старая структура)worlds/Старые установки, до облачных сохранений
Персонажиcharacters_local/Name.fchПК каждого игрока
Список админовadminlist.txtСервер
Список бановbannedlist.txtСервер
Список разрешённыхpermittedlist.txtСервер

А вот сами корневые папки:

ПлатформаПапка сохранений по умолчанию
Windows, игра или сервер%USERPROFILE%\AppData\LocalLow\IronGate\Valheim
Linux, игра или сервер~/.config/unity3d/IronGate/Valheim
Любой сервер, запущенный с -savedirРовно тот путь, который указан

LocalLow по умолчанию скрыта в проводнике Windows. Не ищите её по папкам, а вставьте %USERPROFILE%\AppData\LocalLow\IronGate\Valheim в адресную строку. В Linux .config - скрытый каталог, так что нужен ls -a или файловый менеджер с включённым показом скрытых файлов.

Символ ~ в Linux означает домашний каталог того пользователя, от имени которого запущен сервер, а не вашего. Если вы следовали инструкции, где создаётся пользователь valheim или steam, то папка сохранений находится в /home/valheim/.config/unity3d/IronGate/Valheim, а ls ~/.config от root покажет вам пустую папку самого root. Это самая частая причина, по которой люди "не могут найти" мир сервера на Linux.

Миры: пара .db и .fwl#

Мир - это два файла с одинаковым именем. Name.fwl совсем маленький: название мира, сид и немного метаданных. Name.db содержит всё остальное: изменения ландшафта, постройки, сундуки с содержимым, прирученных животных, исследованные области. Нужны оба файла: .db без .fwl не загрузится, а .fwl без .db даст новый мир с тем же сидом.

Рядом сервер хранит собственные страховочные копии:

  • Name.db.old и Name.fwl.old - предыдущее сохранение, которое записывается при каждом сохранении мира.
  • Автоматические бэкапы с именами вроде Name_backup_auto-20261012093000.db и соответствующим .fwl, которыми управляют аргументы -backups, -backupshort и -backuplong.

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

Имя мира, которое вы передаёте через -world, - это имя файла без расширения, совпадающее точно, включая регистр. -world "Midgard" ищет worlds_local/Midgard.db и worlds_local/Midgard.fwl. Если хотя бы одного нет, сервер создаёт новый мир с этим именем и случайным сидом, и всем кажется, что мир стёрли. Но это не так - старые файлы лежат там, где лежали, просто сервер посмотрел в другом месте.

worlds_local и worlds

Суффикс _local появился вместе с обновлением облачных сохранений Valheim в конце 2022 года. До него миры лежали в папке worlds. После обновления игра разделила локальные сохранения (worlds_local, characters_local) и сохранения в Steam Cloud, а экран Manage Saves в игре переносит мир между ними.

На практике это значит следующее:

  • Выделенный сервер читает worlds_local. О существовании Steam Cloud он не знает.
  • Мира, который игрок сохранил в облако, нет в worlds_local на его ПК. Ему нужно открыть Manage Saves и перенести мир в локальные, и только тогда появится файл для загрузки.
  • В старой установке может остаться папка worlds с файлами до 2022 года. Это тоже настоящие миры: если нужен один из них, скопируйте пару файлов в worlds_local.

Сами копии из Steam Cloud лежат внутри служебной папки Steam, в Steam\userdata\<номер вашего аккаунта Steam>\892970\remote. Копировать файлы оттуда можно, но безопаснее пользоваться Manage Saves, потому что он ещё и разбирается, какая копия новее.

Пошаговая инструкция, как перенести мир с ПК игрока на сервер, есть в статье как загрузить сохранение Valheim на выделенный сервер.

Три файла со списками#

adminlist.txt, bannedlist.txt и permittedlist.txt находятся в корне папки сохранений - не в worlds_local и не в папке установки сервера. Если их нет, сервер создаёт их пустыми при первом запуске. Это удобно: если вы не уверены, какую папку сохранений использует сервер, поищите три файла со свежей отметкой времени.

Typical server save folder
Valheim/  adminlist.txt  bannedlist.txt  permittedlist.txt  worlds_local/    Midgard.db    Midgard.fwl    Midgard.db.old    Midgard.fwl.old    Midgard_backup_auto-20261012093000.db    Midgard_backup_auto-20261012093000.fwl

Самая частая проблема с админами связана именно с расположением: админ добавил свой ID в adminlist.txt в папке установки, или в папке сохранений другого пользователя, или в папке сохранений на собственном ПК. Сервер читает только тот файл, что лежит в его собственной папке сохранений. На каждый сервер приходится ровно один правильный файл.

Вторая ловушка: на ПК игрока тоже есть эти три файла, потому что игра использует их, когда игрок хостит мир прямо из игры. Правка локального adminlist.txt ничего не даёт для выделенного сервера где-то в другом месте.

Формат файлов - SteamID64 или ID с префиксом платформы на серверах с кроссплеем, комментарии, момент вступления изменений в силу и то, как permittedlist.txt делает сервер закрытым - разобран в отдельной статье: adminlist, bannedlist и permittedlist в Valheim.

Перенос всего с помощью -savedir#

-savedir принимает путь и делает его папкой сохранений. Структура внутри остаётся прежней: сервер создаёт worlds_local внутри неё и ищет файлы со списками прямо в ней.

bash
$ ./valheim_server.x86_64 -nographics -batchmode \    -name "Longship Crew" -port 2456 -world "Midgard" \    -password "herring-barrel-42" -savedir "/srv/valheim/data"

С такой строкой мир окажется в /srv/valheim/data/worlds_local/Midgard.db, а список админов - в /srv/valheim/data/adminlist.txt.

Задать его стоит по трём причинам:

  1. Бэкапы. Один известный путь вне скрытого каталога в домашней папке гораздо проще указать программе резервного копирования.
  2. Несколько серверов на одной машине. Два сервера с общей папкой сохранений делят списки админов, банов и разрешённых. Если у каждого свой -savedir, они полностью разделены. Портов им тоже нужно разных - см. порты Valheim 2456 и 2457.
  3. Контейнеры. В Docker или под панелью папка сохранений должна быть внутри примонтированного тома, иначе при пересборке контейнера мир исчезнет вместе с ним.

И три способа всё сломать:

  • Изменение для работающего мира. Если добавить -savedir серверу, который работал без него, ничего не переедет. Сервер запустится с пустой папкой, сгенерирует новый мир с тем же именем, а настоящий останется в старом месте по умолчанию. Остановите сервер, скопируйте папку целиком и только потом добавляйте аргумент.
  • Относительные пути. Относительный путь отсчитывается от рабочего каталога, из которого запущен сервер, а это не всегда папка установки. Используйте абсолютный путь.
  • Права доступа. В Linux каталог должен быть доступен для записи тому пользователю, от имени которого работает сервер. Если каталог принадлежит root, сервер запустится, будет работать, а потом любое сохранение закончится ошибкой.

В Windows путь с пробелами нужно брать в кавычки: -savedir "D:\Valheim Server Data".

Папка установки сервера - не папка сохранений#

Мир ищут рядом с valheim_server.x86_64 или valheim_server.exe, потому что там живёт сервер. Но его там никогда нет, если только -savedir не указывает туда же. В папке установки лежит программа, и её можно спокойно удалить и поставить заново; в папке сохранений лежит мир, и с ней так поступать нельзя.

Вот что вы найдёте в установке на Linux, обычно в ~/.steam/steamapps/common/Valheim dedicated server или там, куда указал +force_install_dir:

Файл или папкаЧто это
valheim_server.x86_64Исполняемый файл сервера
start_server.shПример скрипта запуска от Iron Gate, задаёт SteamAppId=892970 и путь к библиотекам
valheim_server_Data/Игровые данные, которые загружает сервер
linux64/steamclient.soБиблиотека Steam, нужная серверу для связи со Steam
BepInEx/Только если вы установили BepInEx
start_server_bepinex.shТолько с BepInEx: скрипт запуска для модов

В Windows аналоги - valheim_server.exe и start_headless_server.bat в steamapps\common\Valheim dedicated server внутри вашей библиотеки Steam, если вы ставили сервер из раздела Tools, или в папке, которую вы указали SteamCMD.

Поскольку папку установки не жалко, запуск validate или переустановка не могут навредить миру в папке сохранений по умолчанию. Навредить они могут, если вы указали -savedir внутри папки установки - ещё одна причина держать их раздельно. Сама установка описана в статьях установка сервера Valheim через SteamCMD на Linux и установка выделенного сервера в Windows.

Файлы модов

С BepInEx у сервера появляется второй набор расположений, и все они внутри папки установки:

  • BepInEx/plugins - файлы модов .dll.
  • BepInEx/config - файл .cfg каждого мода, создаётся при первом запуске. Именно его нужно править, чтобы изменить настройки мода, и именно эту часть сборки с модами стоит бэкапить вместе с миром.
  • BepInEx/LogOutput.log - собственный лог BepInEx, где записано, какие плагины загрузились, а какие нет. Заглядывайте сюда в первую очередь, если мод ничего не делает.

Некоторые моды хранят данные ещё и по мирам. Где именно, решает автор мода: большинство использует папку BepInEx/config или собственную папку рядом с ней. Прочитайте страницу мода, прежде чем считать, что файл мира содержит всё. Установка описана в статье моды Valheim с BepInEx на сервере.

Персонажи остаются на клиенте#

Персонаж Valheim - это файл .fch в characters_local на компьютере самого игрока, рядом с которым лежит .fch.old от предыдущего сохранения. Сервер его никогда не хранит. Когда игрок заходит, клиент приносит персонажа с собой, а когда выходит, записывает его обратно на свой диск.

Из этого вытекают неочевидные следствия:

  • Сервер не может восстановить персонажа. Если инвентарь игрока потерян из-за сбоя на его стороне, никакой бэкап сервера его не вернёт. Нужен его собственный .fch.old или собственный бэкап.
  • Игрок может переносить персонажа между мирами и серверами. Снаряжение из одного мира попадает в следующий. Если на сервере нужен чистый старт, это обеспечивается договорённостью или модом, а не файлом.
  • Сброс мира не сбрасывает игроков. Новое имя в -world даёт чистую карту, а все сохраняют навыки и инвентарь. Именно на этом построена статья сброс мира Valheim без потери персонажей.
  • Облачные персонажи подчиняются тому же правилу, что и облачные миры: папка characters вместо characters_local, управление через экран выбора персонажа.

О каждом игроке мир помнит исследованную им часть карты в этом мире, точку возрождения (кровать) и всё, что он построил или оставил в сундуке. Это хранится в .db. Остальное лежит в файле персонажа, включая его личную копию исследованной карты, поэтому карта игрока переживает перенос сервера, а запись мира о его кровати - нет.

Логи и файлы настроек#

В поиске неисправностей всплывают ещё два места.

Лог клиента. Unity пишет лог игры в Player.log в корне папки сохранений в Windows (%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\Player.log), а предыдущий сеанс - в Player-prev.log. Если игрок не может подключиться, причина в этом файле описана подробнее, чем во всплывающем окне.

Лог сервера. В Linux сервер выводит лог в стандартный вывод, так что он попадает туда же, куда идёт вывод процесса: в терминал, в журнал systemd (journalctl -u valheim) или в консоль панели. В Windows start_headless_server.bat открывает окно консоли. В обоих случаях -logFile /path/to/valheim.log записывает лог в файл, что стоит сделать, если его потом придётся читать.

Лог - ещё и самый быстрый способ ответить на вопрос "какую папку использует этот сервер". Поищите в нём строку о загрузке мира:

bash
$ grep -iE "load world|savedir|world saved" /path/to/valheim.log

Строка Load world: Midgard и обычная загрузка мира после неё означают, что файлы найдены. Сообщение о генерации нового мира означает, что их не нашли и сервер работает в папке, которой вы не ожидали.

Настройки графики и привязки клавиш на клиенте лежат не в папке сохранений. В Windows игра хранит их там же, где игры на Unity хранят настройки, - в реестре, в HKEY_CURRENT_USER\Software\IronGate\Valheim. Игрок, который "сбросил Valheim", удалив папку сохранений, потерял миры и персонажей, но сохранил настройки, а это обычно ровно наоборот тому, чего он хотел.

Как найти папку на хостинге#

На хостинге с панелью вы не видите файловую систему машины, а только папку своего сервера, и вопрос превращается в то, какая подпапка является папкой сохранений. Ответов всего два:

  1. В строке запуска задан `-savedir`. Тогда папка сохранений - это указанный путь, считая от корня сервера. Посмотрите на команду запуска или на переменные, которые показаны рядом с ней.
  2. Не задан. Тогда сервер использует значение по умолчанию для Linux, а внутри контейнера это скрытая папка .config/unity3d/IronGate/Valheim в корневом каталоге сервера. Включите показ скрытых файлов, если в файловом менеджере есть такая опция, или подключитесь по SFTP, который показывает папки с точкой.

В любом случае работает проверка по свежему adminlist.txt: нужная папка - та, где лежат три файла со списками и рядом worlds_local. В RE:NODE файловый менеджер и SFTP открывают всю папку сервера, а вкладка Startup показывает переменные, с которыми запускается сервер, так что имя мира можно проверить до загрузки чего-либо. Параметры подключения есть в статье SFTP и файловый менеджер.

FAQ#

Где сохраняется мир Valheim в Windows?

В %USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local, в виде пары .db и .fwl. Если его там нет, он в Steam Cloud: откройте в игре Manage Saves и перенесите его в локальные, чтобы получить файл, который можно скопировать.

Где сервер Valheim на Linux хранит свой мир?

В ~/.config/unity3d/IronGate/Valheim/worlds_local для того пользователя, от имени которого работает сервер, если -savedir не говорит иначе. Прежде чем искать в домашней папке root, проверьте, кто этот пользователь.

Меняет ли -savedir место сохранения персонажей?

Нет. Он влияет только на машину, где работает сервер. Персонажей хранит клиент каждого игрока в characters_local на его компьютере, а сервер их никогда не записывает.

Почему мой adminlist.txt игнорируется?

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

Могут ли два сервера использовать одну папку сохранений?

Запуститься они могут, но будут делить списки админов, банов и разрешённых, а два сервера, загружающие мир с одним именем, начнут перезаписывать сохранения друг друга. Дайте каждому серверу свой -savedir.

Можно ли безопасно удалить папку установки сервера?

Да, если -savedir не указывает внутрь неё. Папка сохранений по умолчанию находится в другом месте, так что переустановка не затронет миры. Если вы используете моды, сначала скопируйте папку BepInEx/config.