Представьте длинный дом на берегу луга: кривоватая крыша, потому что балки когда-то не хватило, рядом портал с названием, понятным только вашей компании, а у стены стоит сундук, который все называют «Сундуком Паники». Вы решили переехать на VPS, чтобы мир жил без вашего включённого компьютера. Друзья зайдут на новый сервер и хотят увидеть именно этот дом. Если вместо него они окажутся на пустом берегу с одним костром, переезд можно считать неудачным, как бы красиво ни выглядел список серверов.
Эта история показывает, что нам нужно перенести: не «игру» и не «сервер», а один конкретный мир, плод многих вечеров. Остальное можно поставить заново за полчаса. Дом заново не построишь, вернее, построишь, но настроение уже будет другим. Дальше разберём, как опознать нужное сохранение, чем мир отличается от персонажей, когда можно трогать файлы, почему имя мира так важно на новом месте и как убедиться, что переехало всё.
Как опознать нужное сохранение среди похожих
У человека, который играл не один месяц, миров на диске обычно несколько. Один создавался для пробы, другой для соседского сервера, третий остался после неудачного старта. Все они лежат рядом и различаются только именами. Поэтому первый шаг очень приземлённый: выписать на бумагу (или в заметки) точное имя нужного мира. Это тот же текст, который вы видите в списке миров в игре. Обратите внимание на регистр, пробелы и необычные символы: через несколько шагов мы будем вводить это имя в параметр запуска, и ошибка в одной букве приведёт совсем не туда, куда вы рассчитываете.
Мир в Valheim хранится не одним файлом, а набором связанных файлов с общим именем. Нам для этого достаточно практического следствия: копировать надо весь набор целиком, а не тот единственный файл, который показался самым «настоящим» по размеру. Точный состав и расширения лучше посмотреть на своей машине, а не доверять памяти или чужим форумным пересказам: откройте папку миров и найдите всё, что начинается с вашего имени. Если рядом лежат файлы с похожими, но другими именами, это другие миры, и в архив они не попадают. Удобная проверка: отсортируйте папку по дате изменения. Мир, в который вы играли вчера, окажется наверху, а забытый эксперимент годичной давности внизу.
Где именно эта папка, зависит от того, как вы играли раньше. Если мир создавался в обычной игре или запускался как сервер из клиента, он лежит в локальном хранилище клиента. Если у вас уже был выделенный сервер на домашнем компьютере, хранилище определяется его запуском. В руководстве по dedicated server описано, что параметр -savedir меняет путь, по которому сервер хранит миры и файлы прав. Значит, если домашний сервер запускали с этим параметром, искать мир надо там, куда он указывал, а не в стандартной папке. Загляните в скрипт, которым вы его включали: это самый надёжный указатель.
Мир и персонажи: две разные вещи, которые легко склеить
Самая частая ошибка при переезде состоит в желании «забрать всё». Выглядит разумно: скопировать папку целиком, чтобы ничего не потерялось. Но целая папка профиля на домашнем компьютере содержит и данные ваших персонажей, и то, что к миру не относится. Если все друзья будут делать то же самое со своими компьютерами, вы получите архив на несколько гигабайт, в котором невозможно разобраться, и главное, никто не будет знать, какая версия мира настоящая.
Разделим ответственность. Мир переносит один человек, тот, у кого лежит актуальное сохранение. Он делает копию именно мира, отдельно подписывает её и кладёт на сервер. Персонажи принадлежат игрокам: каждый играет своим профилем на своём устройстве и приходит на сервер со своим героем. Поэтому резервная копия мира не заменяет резервную копию персонажа, и наоборот. Если когда-нибудь придётся откатить мир, персонажи останутся такими, какими они были у игроков, а вот постройки вернутся к состоянию копии.
Практическое правило такое: в архив для переноса попадает только набор файлов выбранного мира. Профили друзей туда не кладём. Если вы хотите подстраховать и персонажей, делайте это отдельной копией с отдельным названием, например «профили, дата». Тогда через месяц вы не будете гадать, что в архиве «backup_final_2».
Почему нельзя копировать на ходу
Теперь самое хрупкое место: момент копирования. Пока игра или сервер работают, они периодически записывают мир. Если вы скопируете файлы посередине этой записи, то получите набор, часть которого относится к одному моменту, а часть к другому. Снаружи такой архив выглядит нормально, а проблема всплывает при загрузке или, хуже, через несколько игровых дней, когда что-то не сходится. Поэтому исходник нужно остановить и только потом копировать.
Как остановить правильно. Если мир на домашнем компьютере держал выделенный сервер, в руководстве описана корректная остановка комбинацией CTRL+C в окне сервера. Дождитесь, пока процесс закончит работу сам, и не закрывайте окно крестиком в спешке. Если мир вы запускали из клиента игры, выйдите в меню обычным способом и закройте игру. Здесь действует простое правило: файл можно брать, когда ничто больше его не пишет. Для уверенности загляните в диспетчер задач и убедитесь, что процесс игры или сервера исчез.
Заодно полезно знать, что сервер сохраняет мир по таймеру. В руководстве параметр -saveinterval задаёт интервал сохранения, а -backups вместе с интервалами short и long управляет встроенными копиями. Для переезда это важно вот почему: если сервер недавно работал и вы остановили его сразу после очередного сохранения, потери минимальны. Если же вы остановили его в середине интервала, часть последних действий может не успеть попасть в файл. Поэтому, если в мире только что построили что-то важное, лучше подождать несколько минут, дать игре сохраниться и затем останавливать.
Есть ещё одна причина не торопиться с копированием. Разработчики в описании патча 1.0.15 объясняют: при смене формата сохранений ошибка конвертации могла повредить часть данных. А возврат к резервному миру означает потерю прогресса, сделанного после копии, и новая версия игры эту потерю сама не восстановит. Отсюда вывод для нас: исходный мир на домашнем компьютере нельзя считать «использованным» и удалять, пока новый сервер не прошёл проверку и не пожил хотя бы несколько игровых сессий. Исходник остаётся нетронутым, а на VPS уезжает копия.
Копия копии
Хороший порядок такой. После остановки скопируйте набор файлов мира в отдельную папку на своём компьютере и добавьте к её названию дату. Это страховка, которую вы не будете загружать никуда. Потом уже из неё (а не из рабочей папки игры) отправляйте файлы на VPS любым привычным вам способом: через графический клиент передачи файлов, через командную строку или через менеджер файлов панели. Способ неважен, важно сохранить целостность набора и убедиться, что на сервер приехали все файлы, а размеры совпадают с исходными.
Новый дом для файлов: куда класть и как назвать
На VPS вы либо уже установили сервер, либо делаете это впервые. Пошаговую установку мы разбирали в статье как установить и настроить Valheim на VPS; здесь предполагаем, что сервер уже запускается и мы лишь подкладываем под него готовый мир.
Сначала решите, где сервер будет искать миры. Если вы не задавали путь, он использует стандартное место своей учётной записи; если задавали через -savedir, то указанное. По руководству, этот параметр определяет и каталог миров, и файлы прав, то есть всё нужное лежит в одном месте. Это удобно: один каталог можно целиком включить в резервное копирование, и не придётся гадать, где живёт список разрешённых игроков.
Теперь самое главное: имя. Параметр -world выбирает существующий мир по имени либо создаёт новый. Это та самая двусмысленность, из-за которой случаются «пустые переезды». Допустим, ваш мир называется «Луг». Вы положили файлы на сервер, но в скрипте запуска оставили имя «Dedicated» или написали «луг» с маленькой буквы. Сервер не жалуется: он не нашёл мир с таким именем и спокойно создал новый, пустой, рядом с вашим. Он запускается, отвечает, находится в списке, и только в игре вы обнаруживаете берег без дома. Вот почему мы выписывали имя на первом шаге: теперь его надо сверить с тем, что стоит в параметре, символ за символом. И имя файлов в каталоге должно совпадать с именем в параметре.
Заодно про скрипт запуска. В руководстве рекомендуют работать с его копией, потому что обновление через Steam заменяет оригинальный файл. Если вы отредактируете исходный скрипт, то после очередного обновления сервера ваши параметры с именем мира, путём и настройками резервных копий могут исчезнуть, и сервер запустится со значениями по умолчанию, то есть, вероятно, с новым пустым миром. Поэтому делайте свою копию, называйте её понятно и запускайте именно её.
Кто владелец файлов
Теперь тема, которую в играх любят пропускать, а на Linux-сервере она решает всё: права. Файлы мира, залитые на VPS, принадлежат тому пользователю, под которым вы их загрузили. Если вы вошли под root и загрузили всё туда, а сервер игры запущен под отдельным обычным пользователем, этот пользователь может оказаться не в состоянии прочитать файлы или, что коварнее, прочитать, но не записать. Первый случай заметен сразу: мир не загружается. Второй сложнее: сервер стартует, вы заходите, строите, а при сохранении запись не проходит, и вы узнаёте об этом только после перезапуска, когда все новые постройки пропали.
Это наше рассуждение о том, как работают права доступа, а не особенность игры, но проверить его легко. Принцип такой: каталог миров и все файлы в нём должны принадлежать той учётной записи, от имени которой запускается сервер, и эта запись должна иметь право и читать, и записывать. Если вы пользуетесь root-доступом (а на VPS MAATRIX он предоставляется), то после загрузки файлов просто смените владельца каталога на пользователя сервера и посмотрите список файлов с владельцами и правами. Убедитесь, что владелец везде один и тот же и это нужный пользователь. Это занимает две минуты, но убирает целый класс неприятных сюрпризов.
Заодно проверьте свободное место. Файлы мира по меркам современных игр невелики, но при включённых встроенных копиях каталог растёт: сервер хранит несколько версий. Ресурсов даже самого скромного плана на таком каталоге хватает с запасом, а вот выбор тарифа определяется не файлами мира, а числом игроков и тем, насколько густо застроена карта. Ориентиры из линейки такие: Ba (1 vCPU, 2 ГБ RAM, 40 ГБ NVMe), Uab (2 vCPU, 4 ГБ, 80 ГБ), Heka (4 vCPU, 8 ГБ, 160 ГБ) и выше. Это лишь точки старта для собственного теста, а не обещание, что столько-то друзей поместится: реальную нагрузку покажет игра с вашей компанией, на вашем мире, в вечер активной стройки. Если начнёте с меньшего, перейти на больший план проще, чем гадать заранее.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации Россия, США, Франция и Великобритания. Оплата картой РФ и по СБП.
Как друзья попадут в старый мир
Файлы на месте, имя совпадает, права выставлены. Можно запускать. Но тут вас ждёт ещё один поворот: вход. Сервер, на котором стоит ваш мир, должен быть доступен тем способом подключения, которым пользуется компания. В руководстве описаны два варианта: Steam backend и Crossplay backend. Они подключаются по-разному, причём Crossplay использует relay. Для вас важно следствие: если часть друзей играет через Steam, а часть в режиме кросс-платформы, то способ, которым вы запустили сервер, определяет, кто увидит его и как будет заходить. Заранее выясните, кто на чём играет, и не удивляйтесь, если «у меня сервер виден, а у него нет».
Отдельный вопрос, нужно ли ограничивать вход. В руководстве описан файл permittedlist, который ограничивает вход указанными Platform User ID. Для мира, в котором стоит ваш любимый дом, это разумная мера, особенно если адрес сервера где-то случайно засветится. Но тут же возникает практическая ловушка: после переезда ваши друзья будут впервые входить на новый сервер, и если список включён, а нужных идентификаторов в нём нет, они просто не пройдут. Тогда вы будете долго искать причину в сети и портах, хотя дело в списке. Поэтому при первой проверке у вас есть выбор: либо сначала проверить вход без ограничения, а потом включить список, либо внести идентификаторы заранее. Мы бы выбрали второе, но только если идентификаторы у вас действительно под рукой. Файлы прав лежат вместе с мирами, о чём говорит описание -savedir, поэтому их стоит включать в резервную копию каталога.
Репетиция до объявления друзьям
Теперь соберём всё в последовательность, которую лучше сыграть один раз «вхолостую». Не зовите компанию сразу. Сначала зайдите сами, одним персонажем, и проведите проверку, ради которой всё затевалось. Логика проста: пока вы один, ничего не страшно, и любая ошибка стоит минут, а не вечера всей команды.
| Проверка | Что подтверждает | Что значит неудача |
|---|---|---|
| Сервер виден в списке | Процесс запущен и принимает подключения | Пока ничего о мире: список видят и у пустого сервера |
| Точка появления рядом с вашей базой | Загружен ваш мир, а не новый | Скорее всего, не совпало имя в параметре запуска или каталог |
| Знакомая постройка на месте, сундук с содержимым | Файлы мира прочитаны полностью | Копия неполная или взята до последнего сохранения |
| Новая постройка после перезапуска сервера | Сервер может записывать мир | Права на каталог: читать можно, писать нет |
| Заход друга другим способом входа | Режим подключения и список разрешённых подходят компании | Backend или permittedlist, а не мир |
Обратите внимание на вторую и четвёртую строки: именно они ловят самые тихие поломки. Сервер, загрузивший пустой мир, ведёт себя абсолютно исправно. Сервер, не умеющий писать, тоже ведёт себя исправно, пока вы его не перезапустите. Поэтому одной загрузки недостаточно: после входа сделайте что-нибудь заметное (поставьте несколько балок, разместите предмет в сундуке), дождитесь сохранения (оно идёт по заданному интервалу) и корректно остановите сервер. Затем запустите его снова и проверьте, что изменение сохранилось. Если да, значит файлы читаются, пишутся и находятся именно там, где вы думаете.
Если у вас включены встроенные копии, загляните и в них: после нескольких интервалов в каталоге должны появиться свежие версии. Это не обязательно, но приятно увидеть, что механизм резервных копий живой, а не только прописан в параметрах. И снова: встроенные копии мира лежат на том же диске, поэтому от потери самого VPS они не спасают. Время от времени копируйте их к себе, как мы делали со старым набором.
Если мир не тот или не загружается
Разберём типичные симптомы по порядку вероятности. Вы вошли и оказались в чужом, пустом мире: проверьте имя в параметре, регистр, пробелы, а затем посмотрите в каталоге, не появился ли там новый набор файлов с неожиданным именем: это след, который оставил сервер, создав мир с нуля. Тогда остановите сервер, поправьте имя, а лишний набор уберите, чтобы не путаться (лучше не удалять, а перенести в сторону на время).
Мир не открывается или сервер сообщает об ошибке чтения: проверьте полноту набора, права и владельца. Сравните размеры файлов на VPS с исходными: передача могла оборваться. Если исходники у вас сохранены нетронутыми (а мы договорились именно так), повторить загрузку ничего не стоит. В этом и состоит смысл копии копии: любая ошибка превращается в повтор, а не в потерю.
Всё работает, но чуть не хватает свежих изменений: вы остановили источник слишком рано или скопировали набор до очередного сохранения. Вспомните слова из описания патча: возврат к резервному миру означает потерю прогресса, сделанного после копии. Поэтому, если исходный мир ещё не трогали, остановите его заново после сохранения и повторите копирование, а новый сервер пока не открывайте для компании. Если же друзья уже успели играть на новом, делать обратный перенос из исходника нельзя: он затрёт новый прогресс. В этом случае решайте, что ценнее, и не смешивайте два набора.
Что оставить после переезда
Через неделю, когда компания освоилась, самое время навести порядок, но без спешки. На домашнем компьютере оставьте старый мир ещё на какое-то время: он служит запасным вариантом. На VPS настройте регулярную выгрузку каталога миров и файлов прав себе на компьютер: вручную или привычным вам способом. Автоматические резервные копии на уровне самого VPS мы здесь не обещаем: опирайтесь на встроенные копии игры и на свои собственные выгрузки. Свой скрипт запуска (ту самую копию, которую не затирает обновление) тоже стоит сохранить рядом с копией мира, чтобы после возможной переустановки сервера не вспоминать, какие параметры вы выставляли.
Если планируете расти, то есть звать больше людей, ставить больше построек, добавлять моды, наблюдайте за нагрузкой в живой игре. На VPS MAATRIX есть NVMe-диски, процессоры AMD EPYC и root-доступ, а площадки доступны в нескольких странах: UK, US, RU и FR. Выбор локации влияет на задержку между вашей компанией и сервером, и разумнее всего выбирать ближе к большинству игроков, а не по привычке. Но решение о тарифе принимайте по наблюдениям: сначала возьмите разумный план из линейки, поиграйте вечер-два и посмотрите, сколько процессора и памяти действительно занято.
Возвращение к дому у луга
Вернёмся к тому, с чего начали. Вы запускаете игру, выбираете новый сервер, входите, и персонаж появляется на берегу. Секунду-другую вы не знаете, что увидите. Потом на горизонте проступает та самая кривая крыша, рядом портал со смешным названием, а в сундуке, если открыть, лежит ровно то, что вы туда положили. Только такая картина и считается правильным переносом: не строка в списке серверов, не зелёный индикатор и не сообщение «сервер запущен», а ваш собственный дом на своём месте. После этого можно писать друзьям: адрес сервера отправлен, заходите, ваш сундук на месте.