RE:NODE

Эксплуатация11 мин чтения

Диск игрового сервера заполнен: что удалить

Что заполняет диск игрового сервера - логи, локальные backup, дампы крашей, тайлы карт, кеш Workshop, - как найти самые большие папки и что безопасно удалять.

0 прочтений

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

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

Как выглядит заполненный диск#

Заполненный диск редко заявляет о себе сам. Игра продолжает работать из памяти и ломается только при попытке записи, поэтому симптомы всплывают в странных местах:

  • Сохранения не проходят. В консоли No space left on device, IOException, Failed to save или ENOSPC, часто при каждом автосохранении.
  • Мир откатывается. Игроки заходят и обнаруживают, что прогресс пропал с момента несколько часов или дней назад - с последнего удачного сохранения.
  • Сервер не запускается. Многие игры при старте пишут lock-файл или лог и падают, если не могут. Wings в Pterodactyl к тому же проверяет квоту диска перед запуском сервера и отказывается запускать тот, что её превысил.
  • Обновления не проходят. SteamCMD сообщает об ошибках вроде state is 0x202 after update job, и сервер поднимается на старой версии или с отсутствующими файлами.
  • Загрузки обрываются на середине. Файловый менеджер или SFTP-клиент сообщает об ошибке, и остаётся недописанный файл.
  • Backup не создаются или получаются пустыми. Backup нужно где-то собрать, прежде чем отправить.

В панели показатель использования диска и график рядом с консолью показывают, насколько вы близки к лимиту тарифа. Считайте порогом уборки 80%, а не 100%.

Как найти, что занимает место#

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

С shell - на своей машине, на VDS или на игровом сервере с доступом по SSH:

bash
# biggest items in the current folder, largest last$ du -sh -- * .[!.]* 2>/dev/null | sort -h | tail -15# the 20 largest files anywhere below here$ find . -type f -printf '%s\t%p\n' | sort -n | tail -20 | numfmt --field=1 --to=iec# everything over 500 MB$ find . -type f -size +500M -exec ls -lh {} +# how much is used and free on the volume$ df -h .

.[!.]* захватывает скрытые папки, а именно в них живут некоторые из худших нарушителей: .steam, .cache, .local/share. Если о них забыть, легко прийти к выводу, что диск заполнен ничем.

Без shell - а в игровой панели это обычная ситуация - ту же работу, только медленнее, делает файловый менеджер или SFTP-клиент. WinSCP и FileZilla умеют показывать размеры папок, а команда «Calculate» в WinSCP суммирует размер папки. Спускайтесь от корня: папка сервера, затем папка сохранений, затем самая большая подпапка. Как подключиться, описано в статье SFTP и файловый менеджер.

Обычные виновники#

Примерно в порядке того, как часто они оказываются ответом:

ВиновникГдеДо какого размера дорастает
Старые файлы логовlogs/, папки профилей, Saved/Logs/От сотен MB до десятков GB
Собственные локальные backup игрыРядом с миромПо полной копии мира, умноженной на их число
Дампы крашейКорень, Saved/Crashes/, папки профилейОт 100 MB до нескольких GB каждый
Тайлы рендера картыplugins/dynmap/web/tiles/, bluemap/web/maps/Часто больше самого мира
Кеш Workshop и загрузокsteamapps/workshop/, .steam/, .cache/Несколько GB на модовых серверах
Заброшенные мирыЛишние папки миров, тестовые сохраненияПо полному миру каждый
Предгенерированные чанкиФайлы регионов MinecraftРастут пропорционально квадрату границы
Загруженные и не удалённые архивы.zip или .tar.gz в корнеРазмер того, что загружали

Логи

Логи - первые подозреваемые, потому что во многих играх по умолчанию их ничто не удаляет. DayZ и Arma 3 начинают новый .RPT при каждом запуске и хранят все; стандартный скрипт запуска 7 Days to Die при каждом запуске пишет новый датированный лог; Minecraft сжимает старые логи и хранит их бессрочно, если не настроено иное. Сервер, который перезапускается каждую ночь и подробно логирует, может давать гигабайты в месяц. Где они лежат в каждой игре, описано в статье логи игрового сервера простыми словами.

Локальные backup

Некоторые игры и плагины делают backup в ту же папку, где лежит мир. Valheim хранит копии -backups, по умолчанию четыре; плагины backup для Minecraft пишут zip-файлы в папку внутри сервера; игры на Unreal часто хранят несколько поколений сохранений. Каждая копия - полная копия мира. Они полезны против повреждённого сохранения, бесполезны против потерянного сервера и часто становятся причиной заполненного диска: плагину, настроенному хранить 30 ежедневных копий мира на 5 GB, нужно 150 GB.

Дампы крашей

Краш JVM оставляет hs_err_pid*.log (маленький) и, если так настроено, heap dump (.hprof) размером с heap - 8 GB heap означают файл на 8 GB. Игры на Unreal хранят по папке на каждый краш в Saved/Crashes/. Core dump Linux (core или core.<pid>) после нативных крашей могут быть размером с память процесса. Один цикл крашей может оставить их десятки.

Рендеры карт

Dynmap, BlueMap и squaremap рендерят мир в тайлы изображений для веб-карты. Большой исследованный мир, отрендеренный на нескольких уровнях масштаба, обычно даёт больше данных, чем сам мир, а количество тайлов Dynmap на большом сервере исчисляется миллионами. Если тайлы лежат на диске, а не в базе данных, это часто самая большая папка. Варианты хранения и настройки рендера описаны в статье веб-карты с Dynmap и BlueMap.

Кеш Workshop и Steam

SteamCMD скачивает контент Workshop в steamapps/workshop/content/<appid>/, а некоторые игры потом копируют его в собственную папку модов - так что каждый мод существует дважды. Вариации этого есть у Garry's Mod, Arma 3, DayZ, Project Zomboid и Unturned. Моды, убранные из списка сервера, часто не удаляются из кеша. SteamCMD к тому же хранит в своей папке промежуточные файлы пакетов и загрузок.

Что безопасно удалять#

Правило: удаляйте то, что игра может создать заново или не читает, никогда не удаляйте то, что хранит состояние, и никогда ничего не удаляйте, пока сервер в это пишет.

Безопасно удалять (сервер остановлен)Удалять осторожноНикогда не удалять без backup
Старые файлы логов, сжатые логиКеш Workshop для используемых модовПапки миров и сохранений
Дампы крашей и core-файлыЛокальные backup игрыДанные игроков и базы аккаунтов
hs_err_pid*.log, heap dump .hprofТайлы карты (рендерятся заново, но медленно)Конфиги, которые вы правили
Загруженные архивы, которые уже распакованыСтарые миры, которые вы считаете ненужнымиПапки данных плагинов
Кеш загрузок модов, которые больше не используютсяФайлы регионов за границей мираФайлы банов, админов и whitelist

«Удалять осторожно» значит, что это можно восстановить или заменить, но с издержками: заново скачать 10 GB контента Workshop, сутки рендерить карту или потерять единственную копию мира, который кто-то берёг на потом. Если есть хоть малейшее сомнение, сначала скачайте.

Хранить все логи вечно нет причин. Разумное правило - неделя-две обычных логов и дольше для админских логов и логов чата, которые используются в модерации. На своём сервере:

bash
# remove compressed Minecraft logs older than 14 days$ find logs/ -name '*.log.gz' -mtime +14 -delete# remove DayZ RPT files older than 7 days from the profiles folder$ find profiles/ -name '*.RPT' -mtime +7 -delete# remove crash dumps$ find . -name 'hs_err_pid*.log' -o -name 'core.*' | xargs -r rm -v

Сначала запускайте каждую команду с -print вместо -delete и прочитайте список, прежде чем удалять. find ... -delete с опечаткой в пути - это то, как исчезают миры.

Как не дать диску заполниться снова#

Разовая уборка даёт время. Цикл останавливают вот эти изменения:

  • Автоматически ротируйте логи. В панели расписание само по себе не умеет удалять файлы, но во многих играх есть настройка: игры Bohemia можно запускать с меньшим количеством логов, у плагинов часто есть параметры срока хранения, а в Minecraft число хранимых старых логов задаётся конфигурацией log4j. На своём сервере это делает logrotate или ночной find. Что хранить и как долго, описано в статье какие логи стоит хранить.
  • Ограничьте внутриигровые backup. Уменьшите -backups в Valheim, задайте число хранимых копий в любом плагине backup и полагайтесь на backup панели для всего, что старше последних одного-двух дней. На RE:NODE backup панели хранятся вне машины, а не в собственной папке сервера.
  • Отключите heap dump, если вы не ловите конкретную проблему с памятью. Флаг JVM вроде -XX:+HeapDumpOnOutOfMemoryError полезен для одного расследования и опасен как постоянная настройка на небольшом диске.
  • Рендерите карты реже или в базу данных. Ограничьте уровни масштаба рендера, рендерите только внутри границы мира или храните тайлы в базе данных, если плагин карты это поддерживает.
  • Удаляйте моды как следует. Убирая мод Workshop, удаляйте его и из списка модов сервера, и из папки кеша.
  • Задайте границу мира перед предгенерацией. Файлы регионов зависят от исследованной площади. Неограниченный мир Minecraft, через который игроки летают на элитрах, растёт бесконечно; статья граница мира и предгенерация объясняет, как его ограничить.

На RE:NODE использование диска показано на графике относительно лимита тарифа на странице консоли, так что медленный рост виден задолго до того, как станет срочным.

Запас, который нужен сверх мира#

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

  • Сохранение. Многие игры пишут новое сохранение рядом со старым и затем меняют их местами, для чего нужно свободное место примерно размером с мир.
  • Обновление. SteamCMD складывает изменённые файлы, прежде чем применить их. Большому патчу нужно свободное место, сопоставимое с объёмом изменённого контента.
  • Backup. Сборке архива нужно рабочее место, пока он не отправлен.
  • Загрузка и распаковка. Чтобы загрузить архив на 3 GB и распаковать его на месте, нужны 3 GB плюс распакованный размер, пока вы не удалите архив.

Рабочее правило - держать на игровом сервере свободными 20-30% диска и больше на сервере, который часто обновляется или у которого большой мир. Если после уборки сервер не может держаться ниже 70-80%, тариф просто мал для того мира, который на нём работает.

Когда диск заполнен, а сервер лежит#

Если вы читаете это, когда сервер лежит, а диск заполнен, вот порядок, который не сделает хуже:

  1. Пока не запускайте сервер снова. Ещё одно неудачное сохранение может повредить мир сильнее.
  2. Сравните размеры файлов мира с последним backup. Сохранение, которое внезапно стало крошечным или нулевым, повреждено.
  3. Освободите место, начиная с самых безопасных удалений: дампы крашей, старые логи, распакованные загрузки.
  4. Сделайте backup текущего состояния, раз теперь есть место, и заблокируйте его.
  5. Восстановите мир из backup, если на шаге 2 обнаружилось повреждение.
  6. Запустите сервер и убедитесь, что первое автосохранение прошло успешно.
  7. Устраните причину по списку выше, чтобы диск не заполнился снова.

Если единственная хорошая копия - в backup панели, на RE:NODE восстановление делается одной кнопкой; что должен содержать backup в каждой игре, чтобы восстановление было полным, описано в статье стратегия резервного копирования игрового сервера.

FAQ#

Почему диск игрового сервера заполнен, хотя мир маленький?

Потому что заполняет его редко мир. Старые логи, локальные backup игры, дампы крашей, тайлы карт и кеш Workshop растут рядом с миром без ограничений. Выведите папки по размеру - и виновник обычно становится очевиден через несколько уровней.

Может ли заполненный диск повредить мир?

Да. Если сохранение началось и не смогло завершиться, файл мира может остаться обрезанным или пустым. Освободите место перед рестартом, сравните размер файла мира с последним backup и восстановите, если он уменьшился.

Безопасно ли удалять логи, пока сервер работает?

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

Занимают ли backup панели место на диске моего сервера?

На RE:NODE backup хранятся вне машины, которую защищают, а не в собственной папке сервера. Backup, которые игра или плагин пишут в папку сервера, например автоматические backup мира в Valheim, место на диске сервера занимают.

Сколько свободного места стоит держать?

От двадцати до тридцати процентов. Сохранениям, обновлениям, backup и распаковке загрузок нужно временное место, и диск, на который файлы помещаются впритык, откажет при первой же такой операции.


Комментарии

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

0/2000