Unturned: проблема с сохранением прогресса
Перезапустили сервер Unturned — и вместо привычной базы либо откат на день назад, либо сейв вовсе не грузится и сервер стартует с ошибкой в консоли. Обидно, если группа неделю зачищала военную базу и копила лут в контейнерах. Хорошая новость: почти всегда дело не в кривой игре, а в одной из нескольких вполне конкретных и чинимых причин — разберём их по порядку, от самой частой к самой редкой, и сразу настроим страховку на будущее.
Содержание
- Как устроено сохранение в Unturned на сервере
- Причина №1: сервер вырубают жёстко, а не останавливают штатно
- Причина №2: не хватает места на диске
- Причина №3: права доступа к папкам Level, Players и Server
- Причина №4: конфликт после обновления воркшоп-карты или два процесса на одном ServerID
- Восстановление мира и персонажей из бэкапа
- Настройка автосейва и регулярного бэкапа как профилактика
Как устроено сохранение в Unturned на сервере
Сервер Unturned хранит прогресс не в одном файле, а в структуре папок внутри директории u3ds/Servers/<ServerID>/, где <ServerID> — имя, которое вы указали при запуске (+InternetServer/MyServer → папка MyServer):
u3ds/Servers/MyServer/
├── Level/
│ └── PEI/ # сама карта: постройки, баррикады, транспорт, зомби-спавны
├── Players/
│ └── 76561198012345678/ # сейвы персонажей: инвентарь, скиллы, позиция
└── Server/
├── Commands.dat
├── Config.json
├── Rocket/ # если стоит Rocket или другой фреймворк модов
└── WorkshopDownloadConfig.json
Level/ отвечает за мир целиком — карту, все постройки и разложенные предметы. Players/ — за персонажей: у каждого игрока свой подкаталог по SteamID64, и именно там теряется прогресс, если жалоба не "сервер откатился", а "у меня одного пропал инвентарь". Широко задокументированной консольной команды принудительного сохранения по требованию (условного save, как в некоторых других играх) у выделенного сервера Unturned нет — игра пишет данные на диск по внутренней логике и обязательно при штатном завершении процесса. Отсюда и большинство причин потери прогресса ниже.
Причина №1: сервер вырубают жёстко, а не останавливают штатно
Самая частая причина. Если процесс сервера (запущенный через ServerHelper.sh) убивают командой kill -9, обрывают SSH-сессию без screen/tmux, или хостинг-панель просто "прибивает" процесс при рестарте — сервер не успевает дописать текущий сейв. Пострадать может и мир, и данные конкретных игроков, которые были онлайн в момент обрыва.
Проверьте, каким сигналом на самом деле останавливается процесс:
ps aux | grep ServerHelper
kill -SIGTERM $(pgrep -f ServerHelper.sh)
SIGTERM даёт серверу шанс корректно завершиться и дописать Level/ и Players/. Если сервер работает через systemd-юнит, как в базовой инструкции по установке, проверьте, что TimeoutStopSec не слишком мал — на большой обжитой карте с кучей построек финальная запись может занять больше времени, чем дефолтные несколько секунд:
[Service]
KillSignal=SIGTERM
TimeoutStopSec=30
Если сервер поднят вручную через screen или tmux без systemd, при обрыве SSH-соединения без этих оболочек процесс может получить SIGHUP и умереть некорректно — подробнее о правильной организации автозапуска и остановки читайте в статье про systemd, screen и tmux для игровых процессов. Отдельно стоит проверить, что происходит при перезагрузке самого хоста — важно, чтобы процесс успел завершиться штатно до выключения VPS, а не оборвался на середине записи.
Поднять сервер Unturned за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверПричина №2: не хватает места на диске
Вторая по частоте причина — банально забитый диск. Если места не хватает, сервер физически не может дописать Level/ или файлы конкретного игрока целиком, и в результате вы получаете либо повреждённый сейв, который не грузится, либо частично записанный — с потерянными постройками или предметами.
Проверка свободного места:
df -h
Смотрите именно на раздел, где физически лежит u3ds/ — если под данные примонтирован отдельный диск, корень системы может быть свободен, а рабочий том забит под ноль. Меньше 1-2 ГБ свободного — уже повод разбираться.
Что обычно съедает место на сервере Unturned незаметно:
- Воркшоп-контент — карты и моды со временем накапливаются, особенно если тестировали разные сборки.
- Кэш SteamCMD и остатки недокачанных обновлений после сбойного
app_update. - Логи консоли без ротации, если вывод пишется в файл.
- Ручные бэкапы "на всякий случай", сложенные в ту же папку и забытые.
Проверить, что конкретно занимает место:
du -sh /home/steam/u3ds/Servers/MyServer/* 2>/dev/null | sort -rh | head -10
Освобождайте место аккуратно — не трогайте активный Level/, свежие сейвы игроков в Players/ и последний рабочий бэкап.
Причина №3: права доступа к папкам Level, Players и Server
Если процесс сервера не может писать в Level/ или в конкретную папку игрока внутри Players/, поведение непредсказуемо: где-то ошибка попадёт в лог, где-то прогресс тихо перестанет сохраняться без явного предупреждения. Частая причина слёта прав — восстановление бэкапа вручную через scp или unzip от root, после чего владельцем файлов становится root, а сам сервер работает от отдельного пользователя (например, steam, как в инструкции по установке).
Проверка владельца:
ls -la /home/steam/u3ds/Servers/MyServer/
Если владелец не тот, от кого реально запущен процесс — чиним:
sudo chown -R steam:steam /home/steam/u3ds/Servers/MyServer
sudo chmod -R u+rwX /home/steam/u3ds/Servers/MyServer
Замените steam на реального пользователя вашего процесса — узнать можно так:
ps aux | grep ServerHelper
Колонка с именем пользователя в выводе покажет, кто фактически владеет процессом, а значит, кто должен владеть и папками сохранений.
Причина №4: конфликт после обновления воркшоп-карты или два процесса на одном ServerID
Более редкая, но неприятная причина: если вы используете карту сообщества из Steam Workshop, а автор выкатил новую версию, при следующем app_update или скачивании через WorkshopDownloadConfig.json формат некоторых данных на карте может измениться. Старый сейв в Level/ не всегда корректно "переживает" такое обновление — это известная в комьюнити Unturned проблема с воркшоп-картами, точное поведение зависит от того, что именно поменял автор карты. Если недавно обновлялась именно карта (а не сам сервер) и прогресс пропал сразу после этого — держите это в уме как отдельную версию.
Второй сценарий из этой же категории — два процесса сервера с одним ServerID пишут в одну и ту же папку Level/ и Players/. Такое бывает, если предыдущий процесс не завершился после неудачного рестарта, а скрипт автозапуска или systemd поднял новый экземпляр поверх него. Итог непредсказуем — от гонки за запись до порчи файлов.
Проверка на дубли процессов:
ps aux | grep ServerHelper
Если строк больше одной — определите, какой процесс реально держит игровой порт:
sudo ss -tulnp | grep 27015
Процесс, который порт не удерживает, — зомби от предыдущего запуска. Остановите его штатным сигналом (см. причину №1), убедитесь, что он действительно завершился, и только после этого запускайте сервер обычным способом.
Восстановление мира и персонажей из бэкапа
Если прогресс уже потерян, а автоматических точек отката нет, рабочий путь один — восстановление из бэкапа. Заодно это аргумент настроить регулярные бэкапы заранее, а не после первого инцидента — подробный разбор, что и как часто бэкапить, есть в статье про автобэкапы игрового сервера.
Порядок действий:
- Остановите сервер штатно (см. причину №1) — не копируйте файлы поверх работающего процесса.
- Переименуйте текущий (возможно, битый) сейв, а не удаляйте сразу — иногда часть данных из
Players/всё же удаётся вытащить вручную, даже еслиLevel/повреждён. - Распакуйте последний рабочий архив на место:
tar -xzf ~/backups/myserver-20260828-0300.tar.gz -C /home/steam/u3ds/Servers/MyServer
- Проверьте владельца и права распакованных файлов — после
tarотrootони снова могут принадлежать не тому пользователю (см. причину №3). - Запустите сервер и убедитесь, что карта грузится, а персонажи заходят с ожидаемым инвентарём.
Если хотите разобраться в самой процедуре восстановления детальнее — с практическими нюансами по разным играм — есть отдельная статья про восстановление сервера из бэкапа. Учтите: вы потеряете всё, что накопилось между моментом бэкапа и сбоем — это неизбежно, но откат на несколько часов лучше, чем потеря карты и всех персонажей целиком.
Настройка автосейва и регулярного бэкапа как профилактика
Раз штатной команды принудительного сохранения по запросу у Unturned нет, единственная надёжная страховка — регулярный файловый бэкап Level/ и Players/ по расписанию, независимо от внутренней логики автосохранения игры.
Простой вариант — cron-задача, архивирующая обе папки каждые несколько часов:
crontab -e
Добавьте строку (бэкап каждые 4 часа):
0 */4 * * * tar -czf /home/steam/backups/myserver-$(date +\%Y\%m\%d-\%H\%M).tar.gz -C /home/steam/u3ds/Servers/MyServer Level Players 2>> /home/steam/backups/backup.log
Server/ с конфигами в этот бэкап можно не включать каждый раз — она меняется редко, достаточно бэкапить её отдельно после правок Commands.dat или Config.json.
Не забудьте почистить старые архивы, иначе бэкапы сами станут причиной нехватки места на диске (см. причину №2) — например, хранить только последние 10-14 копий:
ls -t /home/steam/backups/*.tar.gz | tail -n +15 | xargs -r rm
Если планируете сменить тариф или расширить RAM под сервер, при апгрейде важно не потерять текущую карту и сейвы игроков в процессе переноса — об этом отдельно в статье про апгрейд тарифа без потери мира и сохранений.
Поднять сервер Unturned за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Есть ли в Unturned команда принудительного сохранения из консоли сервера?
Широко задокументированной команды форс-сохранения по требованию нет — сервер пишет данные по внутренней логике и обязательно при штатном завершении процесса. Это делает регулярные файловые бэкапы важнее, чем в играх с ручной командой save.
Почему у одного игрока пропал инвентарь, а карта и постройки на месте?
Скорее всего проблема не с Level/, а конкретно с папкой игрока в Players/<SteamID64>/ — проверьте права доступа и наличие свежего бэкапа именно этой папки, а не всего сервера.
Можно ли восстановить карту, если Level повреждён и сервер не стартует вовсе?
Без бэкапа — почти нет, повреждённый файл карты в большинстве случаев не грузится частично. Настраивайте регулярный бэкап заранее, а не полагайтесь на восстановление битого файла постфактум.
Как понять, что сервер завершился штатно, а не был убит?
Проверьте лог перед остановкой — при штатном завершении в консоли/логе обычно есть финальные строки о выходе процесса, тогда как обрыв через SIGKILL просто прерывает вывод без завершающих записей.
Обновление воркшоп-карты точно ломает старый сейв?
Не всегда и не гарантированно — зависит от того, что именно поменял автор карты в новой версии. Но если прогресс пропал сразу после обновления воркшоп-контента, это повод проверить версию карты в первую очередь, до перебора остальных причин.