RE:NODE

Как найти сид мира Valheim на выделенном сервере

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


Сид Valheim - это строка из десяти символов, например Fj3kQ9mXa2, которая хранится в файле метаданных мира на сервере. На текущих сборках выделенного сервера это уже не WorldName.fwl рядом с .db. Теперь каждый мир - это папка, а сид лежит в файле _main.<number>.fwl2 внутри неё. Скачайте самый новый из них, откройте в любом простом текстовом просмотрщике, и сид - это короткая строка сразу после имени мира. Если вы играете на консоли и до файлов вообще не добраться, это за пару минут может сделать тот, кто держит сервер.

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

Почему поиск .fwl ничего не находит#

Большую часть жизни Valheim мир состоял из двух файлов с одинаковым именем: Midgard.fwl - несколько сотен байт с именем и сидом, и Midgard.db - всё, что изменилось в мире. Большинство руководств в интернете, включая нашу собственную более старую статью о расположении сохранений, описывают именно эту пару, и большинство ответов на вопрос «как найти сид» звучат как «откройте .fwl в Блокноте».

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

Server log, one world save
World save (1/5) Cloud & Backup checks done [0ms] => Save number 435World save (2/5) Chunks writing done [223ms]World save (3/5) DB2 writing done [20ms]World save (4/5) FWL writing done [3ms]World save (5/5) done. Total time [289ms]

Эти шаги соответствуют файлам в папке, названной по имени мира, и ни один из них не заканчивается на .fwl или .db. Поэтому поиск *.fwl - ровно то, что советует большинство инструкций, - возвращает пустой результат, хотя сервер сохранил мир сотни раз. Ничего не пропало. Расширение - .fwl2, и файл лежит на уровень глубже, чем вы искали.

Точную версию, в которой это поменялось, мы назвать не можем и гадать не хотим. Если нужно понять, какую структуру использует конкретный сервер, загляните в его папку worlds_local: папки означают новую структуру, файлы .fwl и .db - старую.

Новая папка мира, файл за файлом#

Вот настоящая папка мира на выделенном сервере под Linux, в сокращённом виде. Мир называется Midgard, и сервер сохранил его 435 раз:

worlds_local
worlds_local/  Dedicated/  Midgard/    _main.435.fwl2    _main.435.db2    _main.435.chunks    _main.435.ok    1e_1e__1_1.chunk    1e_20__1_1.chunk    ...  Midgard_backup_auto-20261019-200416/  Midgard_backup_auto-20261019-111133/

Для чего нужен каждый тип файла - в той мере, в какой это нужно владельцу сервера:

ФайлЧто в нёмРазмер
_main.N.fwl2Имя мира, сид, метаданныеСотни байт
_main.N.db2Состояние мира, не попавшее в чанкиОт десятков до сотен KB
_main.N.chunksИндекс файлов чанковКрошечный
*.chunkСохранённое состояние участков картыОт KB до MB каждый
_main.N.okОтметка о том, что сохранение N завершено4 байта

N - это номер сохранения из лога. Он увеличивается на единицу при каждом сохранении, так что самый большой номер в папке - самое свежее сохранение. Стоит разобраться с файлом .ok: он записывается после всего остального в этом сохранении, поэтому служит удобным признаком того, что набор полный. _main.N.fwl2 без соответствующего _main.N.ok рядом относится к сохранению, которое, возможно, не завершилось.

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

Где папка лежит на выделенном сервере#

Папка мира находится в профиле пользователя, от имени которого запущен процесс сервера, в каталоге настроек Unity:

СистемаПуть по умолчанию
Linux~/.config/unity3d/IronGate/Valheim/worlds_local/
Windows%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local\
Egg Pterodactyl/home/container/.config/unity3d/IronGate/Valheim/worlds_local/

На старых установках последняя папка может называться worlds, а не worlds_local; если первая пуста, проверьте обе. Если сервер запущен с -savedir, всё переезжает в указанный каталог, и этот аргумент - первое, что стоит проверить, если ожидаемая папка пуста. В справочнике аргументов запуска он описан вместе с остальными.

На Linux-сервере, к которому у вас есть доступ, структуру можно проверить одной командой:

bash
$ ls -la ~/.config/unity3d/IronGate/Valheim/worlds_local/$ ls -t ~/.config/unity3d/IronGate/Valheim/worlds_local/Midgard/*.fwl2 | head -1

Вторая строка выводит самый новый файл метаданных - тот, который вам нужен. Замените Midgard на имя своего мира в точности, с учётом заглавных букв - имя папки совпадает со значением -world.

На хостинговом сервере с веб-файловым менеджером путь тот же, что в строке Pterodactyl, только без /home/container. Папка .config начинается с точки, поэтому некоторые файловые менеджеры её скрывают. На RE:NODE файловый менеджер её показывает, а к тем же файлам можно подключиться по SFTP с данными со страницы настроек сервера.

Как прочитать сид из файла .fwl2#

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

  1. Найдите папку мира и выберите _main.N.fwl2 с самым большим N, у которого есть и _main.N.ok.
  2. Скачайте его. Не открывайте его в браузерном редакторе, даже просто посмотреть, - см. предупреждение ниже.
  3. Откройте скачанную копию в простом текстовом редакторе, например в Блокноте, TextEdit или VS Code.
  4. В самом начале вы увидите имя мира, а за ним короткий набор букв и цифр. Этот набор и есть сид.

Большая часть файла будет выглядеть как случайные символы, потому что он бинарный. Искать нужно два читаемых слова рядом в начале: Midgard, а почти сразу за ним Fj3kQ9mXa2. Сид обычно состоит из десяти символов в разном регистре, и он чувствителен к регистру: fj3kq9mxa2 - это другой мир.

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

bash
$ strings -n 3 _main.435.fwl2 | head -2MidgardFj3kQ9mXa2

Что на самом деле в первых байтах

Если вы хотите читать файл скриптом или проверить, что он не повреждён, начало файла имеет простую фиксированную структуру. Все числа в little-endian.

БайтыЗначениеПример
4Длина остальной части файла6b 01 00 00 (363)
4Версия формата метаданных2a 00 00 00 (42)
1 + nИмя мира, сначала длина07, затем Midgard
1 + nТекст сида, сначала длина0a, затем Fj3kQ9mXa2

Текстовые поля - это строки в стиле .NET: длина, а за ней столько же байт UTF-8. Для чего-то настолько короткого, как имя мира или сид, длина занимает один байт. Первое число стоит проверять: у исправного файла оно равно размеру файла минус четыре, так что оборванная загрузка или файл, испорченный редактором, выдают себя сразу. После сида идёт число, которое игра вычисляет из него, и дальше поля, на которые мы не опираемся. Номер версии на наших серверах сегодня - 42; считайте его тем, что меняется между версиями игры, а не константой.

Короткий скрипт на Python читает его надёжно и работает и со старыми файлами .fwl, потому что они начинаются так же:

valheim_seed.py
import struct, sysdata = open(sys.argv[1], "rb").read()length, version = struct.unpack_from("<ii", data, 0)pos = 8def read_string(pos):    size = shift = 0    while True:        byte = data[pos]; pos += 1        size |= (byte & 0x7F) << shift; shift += 7        if byte < 0x80:            break    return data[pos:pos + size].decode("utf-8"), pos + sizename, pos = read_string(pos)seed, pos = read_string(pos)print(f"world={name} seed={seed} version={version} intact={length == len(data) - 4}")
bash
$ python valheim_seed.py _main.435.fwl2world=Midgard seed=Fj3kQ9mXa2 version=42 intact=True

Какой копии доверять: сохранения и backup#

В активной папке миров лежит один текущий набор файлов, а сервер продолжает создавать рядом папки backup. Они называются WorldName_backup_auto-YYYYMMDD-HHMMSS, а сколько их и как часто они появляются, задают аргументы запуска -backups, -backupshort и -backuplong. Каждая из них - полноценная папка мира с той же структурой и со своим _main.N.fwl2.

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

Для восстановления порядок важнее:

  • Используйте текущую папку, если у её самого нового _main.N.fwl2 есть соответствующий .ok.
  • Иначе берите самую свежую папку _backup_auto- - на момент создания это было завершённое сохранение.
  • Остановите сервер, прежде чем менять папки, иначе следующее сохранение перезапишет то, что вы вернули.

Как часто происходит основное сохранение, задаёт -saveinterval в секундах, по умолчанию 1800 - каждые полчаса. При сбое теряется не больше этого времени игры. Восстановление подробно описано в нашем руководстве по backup и повреждению мира. Одно правило из него стоит запомнить уже здесь: backup на том же диске, что и мир, защищает от неудачного сохранения, но не от потери диска.

Как узнать сид, если вы играете на PlayStation или Xbox#

С появлением кроссплея консольные игроки могут заходить на те же серверы, что и игроки на ПК, и обычные советы - «выберите мир в списке миров, там показан сид» или «откройте .fwl в Блокноте» - к ним не подходят. Консольный игрок, заходящий на чужой выделенный сервер, вообще не имеет файлов мира. Мир существует только на сервере, а у консольного клиента нет способа его просмотреть.

Поэтому консольному игроку остаётся спросить того, кто держит сервер. Если это вы и у вас спрашивает кто-то с PlayStation, это займёт минуту:

  1. Откройте файловый менеджер сервера или подключитесь по SFTP.
  2. Перейдите в .config/unity3d/IronGate/Valheim/worlds_local/ и откройте папку с именем вашего мира.
  3. Скачайте самый новый _main.N.fwl2 или выполните для него strings, если у вас есть shell.
  4. Отправьте им эти десять символов в точности так, как они записаны.

Полезно приложить ссылку на просмотрщик карты. Сайты вроде valheim-map.world принимают сид и рисуют весь мир, включая биомы, боссов и торговцев, и работают в браузере телефона, что важно для того, у кого нет ПК. Напомните, что карта показывает мир таким, каким он был сгенерирован, а не то, что с тех пор построили или выкопали. Что стоит проверить в просмотрщике, когда сид уже есть, рассказывает наше руководство по сидам.

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

Как сменить или задать сид#

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

Чтобы запустить сервер на конкретном сиде, создайте мир с этим сидом на своём ПК, запустите его один раз, чтобы записались файлы, и загрузите результат в worlds_local сервера. Это пошагово описано в руководстве по загрузке. Два момента, связанных с новой структурой:

  • Загружайте папку целиком, с именем, в точности совпадающим со значением -world на сервере.
  • Проверьте, какую структуру записала ваша локальная игра. Если ваш ПК создал файлы .fwl и .db, а сервер ожидает папки, или наоборот, остановитесь и обновите обе стороны до одной версии игры перед загрузкой, вместо того чтобы смешивать файлы.

Правка текста сида внутри .fwl2, чтобы «сменить» сид, не работает и быстрее всего портит мир. И поле длины, и сохранённое состояние мира зависят от исходного сида. Считайте этот файл доступным только для чтения.

Устранение неполадок#

Поиск `.fwl` ничего не находит. Сервер использует структуру с папками. Ищите *.fwl2 или откройте worlds_local и загляните в папку с именем вашего мира.

Есть папка `Dedicated` и больше ни одного мира. Сервер работает без заданного имени мира, поэтому он запускает мир под названием Dedicated. Если ваша группа в нём играла, это и есть ваш мир, а его сид лежит в Dedicated/_main.N.fwl2. Если нет, проверьте имя мира в настройках запуска и путь -savedir.

Папка мира есть, но в ней нет `.fwl2`. Либо сервер ещё ни разу не завершил сохранение, либо список, который вы смотрите, обрезан. Дождитесь следующего сохранения - в логе появится World save (5/5) done - и посмотрите снова. Если лог показывает сохранения, а папка остаётся пустой, сервер пишет в другое место, и почти всегда причина в -savedir.

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

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

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

FAQ#

Можно ли узнать сид Valheim консольной командой?

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

Сид одинаковый во всех backup?

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

Нужны ли файлы .db2 и чанки, чтобы прочитать сид?

Нет. Сид есть только в .fwl2, файле размером в несколько сотен байт, так что скачивать нужно только его. Все остальные файлы важны, лишь когда вы переносите или восстанавливаете мир.

Нужно ли игроку на PlayStation что-нибудь из файлов сервера?

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

Загрузится ли моя старая пара .fwl и .db на новом сервере?

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

Это было полезно?