RE:NODE

Руководства11 мин чтения

Linux или Windows для игрового сервера

У каких выделенных серверов есть сборка под Linux, какие работают только под Windows и в чём реальная разница: память, цена, регистр путей, моды с DLL и остановка.

0 прочтений

Запускайте игровой сервер на Linux всегда, когда у игры есть сборка под Linux, - а она сейчас есть у большинства популярных игр. Linux тратит меньше памяти на саму операционную систему, не требует лицензии, спокойно работает в контейнерах, и почти все игровые хостинги и панели построены именно на нём. Windows - или Windows через слой совместимости - нужна только тогда, когда бинарник сервера существует исключительно для Windows, а это до сих пор так для заметного списка survival-игр на Unreal и Unity: среди них ARK: Survival Ascended, Conan Exiles, V Rising, Enshrouded, Space Engineers, The Forest, Sons of the Forest и Abiotic Factor. Дальше в статье - сам список, причины и практические различия, на которых спотыкаются при переносе сервера с одной системы на другую.

Почему операционная система значит меньше, чем раньше#

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

Важно это остаётся только в одном месте - в самом бинарнике. Разработчик либо выпускает серверную сборку под Linux, либо нет, и если нет, у вас три варианта: арендовать или запустить Windows, запустить Windows-сборку под Wine или Proton на Linux, или не хостить эту игру. Настройки, которая превращает Windows-сервер в Linux-сервер, не существует.

Выяснить это просто. Посмотрите, что скачивает SteamCMD. Если app_update на Linux падает с Invalid Platform или в папке установки лежат только файлы .exe и .dll, сборки под Linux нет. В статье App ID и beta-ветки SteamCMD описано, как посмотреть депо приложения - там указано, под какие операционные системы каждое из них.

Какие серверы где работают#

ИграСборка под LinuxСборка под WindowsПримечания
Minecraft (Java)дадаРаботает везде, где работает Java
Counter-Strike 2дадаОбычно выбирают Linux
CS 1.6, TF2, Garry's Mod, L4D2дадаИ Source, и GoldSrc поставляют srcds/hlds под Linux
Valheimдадаvalheim_server.x86_64
Palworldдада
Satisfactoryдада
7 Days to Dieдада
Project ZomboidдадаВнутри Java
Unturnedдада
Don't Starve Togetherдада
Rustдада
Factorio, TerrariaдадаРаспространяются не через SteamCMD
FiveMдадаОтдельные артефакты для Linux и Windows
Arma 3дадаНа Linux есть нюансы с модами с расширениями
DayZдадаLinux-сервер появился сильно позже Windows
Insurgency: Sandstormдада
SCP: Secret Laboratoryдада
ARK: Survival AscendedнетдаУ ARK: Survival Evolved Linux был
Conan Exilesнетда
V Risingнетда
Enshroudedнетда
Space EngineersнетдаНужен .NET Framework
The Forestнетда
Sons of the Forestнетда
Abiotic Factorнетда

Этот список меняется. Разработчики добавляют сборки под Linux после релиза (DayZ так и сделала, спустя годы), а иногда сиквел теряет то, что было у предшественника, как случилось с ARK: Survival Ascended. Проверьте текущее положение дел, прежде чем покупать железо или лицензию, опираясь на старый ответ с форума.

Память, CPU и стоимость#

Самое осязаемое различие - накладные расходы самой операционной системы:

Сервер на LinuxWindows Server
Память ОС в простоенесколько сотен МБпримерно 1.5-2.5 ГБ с графической оболочкой
Лицензияне нужналицензия Windows Server, за ядро
Удалённое администрированиеSSH, панельRDP, панель
Контейнерынативно (Docker)Windows-контейнеры, для игр почти не используются
Перезагрузки для обновленийредкие, под контролемрегулярные, ежемесячные патчи

На машине с 8 ГБ отдать 2 ГБ операционной системе - это четверть ресурсов, и это реальные деньги, когда вы подбираете тариф для survival-игры, которой самой нужно 8 ГБ. На большом выделенном сервере с 64 ГБ это почти не важно.

По CPU при одной и той же сборке - примерно ничья. Игровые серверы обычно упираются в один главный поток симуляции, и этот поток работает одинаково быстро на любом ядре ОС. Когда люди говорят, что одна платформа быстрее, причина обычно в том, что Linux-сборка самой игры оптимизирована хуже Windows-сборки или наоборот, - это свойство того, как разработчик собирал и тестировал игру, а не операционной системы. Если разработчик относится к Linux как к второсортному порту, Linux-сервер может на несколько дней отставать с исправлениями после патча.

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

Практические различия, которые ломают переезд#

Это те вещи, из-за которых переезд в духе «просто скопирую папку» растягивается на полдня.

Регистр в именах файлов

Windows считает Mods, mods и MODS одной и той же папкой. Linux считает их тремя разными. Конфиг, в котором написано @CBA_A3, когда на диске папка называется @cba_a3, работает на Windows и падает на Linux с ошибкой об отсутствующем файле, в которой о регистре нет ни слова.

Сильнее всего это бьёт по Arma 3 и DayZ, где папки модов приходят из Workshop с именами в смешанном регистре, а строка запуска ссылается на них вручную. Обычное решение - переименовать каждую папку мода и её содержимое в нижний регистр и написать строку запуска тоже в нижнем регистре. Так же могут ломаться конфиги плагинов Minecraft, имена карт в Source и пути Lua require в Garry's Mod.

Пути и окончания строк

В путях Windows используются обратные слэши и буквы дисков; в Linux - прямые слэши от /. Конфиги, перенесённые с C:\Servers\... внутри, придётся править. Большинство игр принимают прямые слэши и на Windows, так что если писать их так с самого начала, конфиг будет переносимым.

Вторая ловушка - скрипты. start.sh, написанный в редакторе под Windows, заканчивает каждую строку символом возврата каретки, и Linux отказывается его запускать с сообщением вроде /bin/bash^M: bad interpreter. Сконвертируйте его:

bash
$ sed -i 's/\r$//' start.sh

Моды с нативным кодом

Большинство модов - это данные или скрипты, и они работают везде, где работает игра. Некоторые содержат скомпилированный нативный код, а нативный код собирается под одну платформу:

  • Расширения Arma 3 - это .dll на Windows и .so на Linux. Серверный мод, в котором есть только DLL, на Linux-сервере просто не загрузится.
  • Расширения SourceMod и Metamod поставляются в сборках .ext.so и .ext.dll. У большинства популярных есть обе; у заброшенных часто только одна.
  • BepInEx (Valheim и другие игры на Unity) имеет отдельные сборки под каждую платформу, потому что сам загрузчик - нативный код.
  • Oxide и Carbon для Rust имеют сборки под Linux и Windows, которые должны соответствовать серверу.

Прежде чем переносить сервер с модами, составьте список всех модов с нативными компонентами и убедитесь, что для целевой платформы есть сборка.

Корректная остановка

Мир спасает именно корректная остановка. На Linux процесс получает SIGINT или SIGTERM, и правильно написанные серверы сохраняются и завершаются. На Windows аналог - Ctrl+C в окне консоли, а закрытие окна или снятие задачи сохранения не делает.

Некоторые серверы только под Windows плохо обрабатывают сигналы под Wine или не обрабатывают их вовсе, а значит, остановка из панели может сработать как kill. С такими играми выполняйте внутриигровую команду сохранения перед остановкой или ставьте её по расписанию. Почему корректная остановка и kill - разные события, объясняется в статье о полезных расписаниях перезапуска.

Блокировка файлов

Windows не даст заменить DLL или jar, который открыт работающим процессом. Linux даст, и работающий процесс продолжит использовать старый файл до перезапуска. На Windows это значит, что для обновления плагина сервер нужно остановить; на Linux - что можно скопировать новый файл на ходу и потом удивляться, почему ничего не изменилось до следующего рестарта. И то и другое нормально, если этого ожидать.

Запуск серверов только под Windows на Linux#

Wine - это слой совместимости, который позволяет запускать программы Windows на Linux, транслируя вызовы Windows API. Для серверов без графики он срабатывает на удивление часто, потому что серверу нужно гораздо меньше от Windows, чем игровому клиенту, - ни графики, ни звука, часто даже никакого окна. Proton - это дистрибутив Wine от Valve с дополнительными патчами, и некоторые серверы под одним работают лучше, чем под другим.

Большинство серверов только под Windows из списка выше кто-то уже успешно запускал под Wine, и community-эгги Pterodactyl для некоторых из них используют образы с Wine. Сам демон Wings от Pterodactyl работает только на Linux, поэтому игра только под Windows на типичном хостинге с панелью - это Windows-бинарник, работающий под Wine в Linux-контейнере, а не машина с Windows. Цена - немного лишней памяти, более медленный первый запуск, пока Wine готовит свой префикс, периодические поломки при обновлении игры и поддержка, которая заканчивается словами «разработчиком не поддерживается». Полная настройка, пакеты и типичные сбои описаны в статье Wine и Proton для серверов только под Windows.

Space Engineers - сложный случай: его сервер сильно зависит от .NET Framework, и чтобы он стабильно работал под Wine, исторически требовались контейнеры от сообщества и терпение. Для таких игр, если вы хостите сами, настоящая машина с Windows - скучный, но надёжный ответ.

Как выглядит администрирование на каждой#

Администрирование Linux идёт через SSH: логи в файлах, сервер запускает менеджер служб вроде systemd, и всё поддаётся автоматизации. Если вы никогда не работали в командной строке, придётся немного поучиться, и статья о командах Linux для администраторов серверов - кратчайший путь.

Администрирование Windows идёт через RDP: начать проще, потому что это похоже на обычный рабочий стол, а хорошо автоматизировать сложнее. Чтобы запустить сервер как службу, нужна обёртка вроде NSSM или задача планировщика, логи часто оказываются в окне консоли, которое исчезает при закрытии, а Windows Update перезагрузит машину по собственному графику, если не настроить его иначе. Открытый порт RDP к тому же - одна из самых атакуемых служб в интернете, поэтому он должен стоять за правилом firewall, которое пропускает только ваш адрес, - см. статью о правилах firewall, которые действительно важны.

С игровой панелью большая часть этого исчезает в обе стороны. Вы получаете консоль, файловый менеджер, SFTP и расписания в браузере, что бы ни работало внутри. В RE:NODE каждый сервер - это отдельный контейнер на Pterodactyl и Wings, с живой консолью, файловым менеджером и отдельным SFTP на каждом тарифе, так что вопрос операционной системы касается вас только тогда, когда моду нужна нативная сборка или путь написан для чужой платформы. В статье о панели Pterodactyl разобрано, что даёт такая контейнерная модель и что она исключает.

Перенос сервера с Windows на Linux#

Самый частый переезд - сервер, начавшийся на чьём-то домашнем ПК с Windows, переезжает на Linux-хостинг. Чек-лист, подходящий для большинства игр:

  1. Корректно остановите Windows-сервер и убедитесь по логу, что мир сохранился.
  2. Скопируйте папку сохранений и конфиги, но не бинарники сервера. Поставьте Linux-сервер заново через SteamCMD или панель; исполняемые файлы Windows на другой стороне бесполезны.
  3. Узнайте, где Linux-сборка хранит сохранения. Часто это другой путь - в домашней папке, а не в AppData, - так что мир нужно положить в новое место. Список есть в статье о файлах сохранений игровых серверов.
  4. Исправьте пути в конфигах. Уберите буквы дисков и обратные слэши; лучше используйте относительные пути.
  5. Приведите имена папок модов к одному виду и сделайте так, чтобы строка запуска точно совпадала с ними по регистру.
  6. Проверьте нативные моды на наличие Linux-сборок и замените или уберите те, у которых её нет.
  7. Сконвертируйте скрипты в окончания строк Linux и сделайте их исполняемыми через chmod +x.
  8. Запустите сервер и прочитайте лог с начала, ища отсутствующие файлы, неудачную загрузку модов и строку, подтверждающую, что загружен нужный мир.

Будьте готовы, что первый запуск займёт больше времени, потому что Linux-сервер может пересобирать кэши или конвертировать данные. Не пускайте игроков, пока сами не пройдётесь по миру и не убедитесь, что это тот самый, который вы переносили.

Решение для каждой игры#

  1. Есть ли у игры сервер под Linux? Если да, используйте Linux. Причин этого не делать почти не бывает.
  2. Если нет, надёжно ли она работает под Wine? Поищите поддерживаемый community-эгг или образ контейнера, обновлённый за последние несколько месяцев. Если такой есть, Linux с Wine для небольшой компании обычно подходит.
  3. Если под Wine всё хрупко или рядом нужно запускать админские инструменты только под Windows, используйте Windows. Заложите в бюджет лицензию и 2 ГБ памяти, которые уйдут на ОС.
  4. Если на сервере много модов, проверьте каждый мод с нативным кодом на совместимость с платформой, прежде чем решать. Выбранную вами операционную систему должны поддерживать ваши моды.

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

FAQ#

Игровой сервер на Linux быстрее, чем на Windows?

Для одной и той же сборки игры на одном и том же железе разница невелика и обычно объясняется тем, насколько хорошо разработчик оптимизировал каждую сборку, а не ядром ОС. Зато Linux оставляет игре больше памяти, потому что сама операционная система потребляет меньше.

Можно ли перенести мир с Windows-сервера на Linux-сервер?

Обычно да. Файлы сохранений, как правило, имеют одинаковый формат на обеих платформах. Внимания требуют конфиги с путями Windows, имена папок модов, регистр которых не совпадает с конфигом, и любые моды, в которых есть DLL только под Windows.

Почему Linux-сервер говорит, что мода нет, хотя папка на месте?

Почти всегда дело в регистре букв. Linux считает @MyMod и @mymod разными папками. Сделайте так, чтобы имя на диске и имя в строке запуска совпадали в точности, лучше всего оба в нижнем регистре.

Работают ли серверы только под Windows на панелях Pterodactyl?

Многие работают - Windows-сборка запускается под Wine внутри Linux-контейнера. Поддержка зависит от игры: одни работают чисто, некоторые нестабильны, и разработчик не поможет ни в том, ни в другом случае. Убедитесь, что существует поддерживаемый эгг или образ.

Нужен ли Windows Server или подойдёт Windows 10 или 11?

Для домашнего сервера для друзей обычная настольная Windows отлично справляется с выделенными серверами. Windows Server нужен, когда вы хотите разместить машину в дата-центре с лицензированием удалённого рабочего стола и без принудительных обновлений функций, - и именно тогда стоимость лицензии становится главным аргументом в пользу Linux.


Комментарии

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

0/2000