Когда на игровом сервере заканчивается место, причина почти никогда не в мире. Виновато то, что растёт рядом с ним без присмотра: файлы логов, которые никто не удаляет, собственные локальные 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:
# 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, сутки рендерить карту или потерять единственную копию мира, который кто-то берёг на потом. Если есть хоть малейшее сомнение, сначала скачайте.
Хранить все логи вечно нет причин. Разумное правило - неделя-две обычных логов и дольше для админских логов и логов чата, которые используются в модерации. На своём сервере:
# 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%, тариф просто мал для того мира, который на нём работает.
Когда диск заполнен, а сервер лежит#
Если вы читаете это, когда сервер лежит, а диск заполнен, вот порядок, который не сделает хуже:
- Пока не запускайте сервер снова. Ещё одно неудачное сохранение может повредить мир сильнее.
- Сравните размеры файлов мира с последним backup. Сохранение, которое внезапно стало крошечным или нулевым, повреждено.
- Освободите место, начиная с самых безопасных удалений: дампы крашей, старые логи, распакованные загрузки.
- Сделайте backup текущего состояния, раз теперь есть место, и заблокируйте его.
- Восстановите мир из backup, если на шаге 2 обнаружилось повреждение.
- Запустите сервер и убедитесь, что первое автосохранение прошло успешно.
- Устраните причину по списку выше, чтобы диск не заполнился снова.
Если единственная хорошая копия - в backup панели, на RE:NODE восстановление делается одной кнопкой; что должен содержать backup в каждой игре, чтобы восстановление было полным, описано в статье стратегия резервного копирования игрового сервера.
FAQ#
Почему диск игрового сервера заполнен, хотя мир маленький?
Потому что заполняет его редко мир. Старые логи, локальные backup игры, дампы крашей, тайлы карт и кеш Workshop растут рядом с миром без ограничений. Выведите папки по размеру - и виновник обычно становится очевиден через несколько уровней.
Может ли заполненный диск повредить мир?
Да. Если сохранение началось и не смогло завершиться, файл мира может остаться обрезанным или пустым. Освободите место перед рестартом, сравните размер файла мира с последним backup и восстановите, если он уменьшился.
Безопасно ли удалять логи, пока сервер работает?
Старые ротированные логи - да. Файл, в который сервер пишет прямо сейчас, - нет или по крайней мере бесполезно, потому что в Linux место не освобождается, пока процесс не закроет файл. Сначала остановите сервер или удаляйте только старые файлы.
Занимают ли backup панели место на диске моего сервера?
На RE:NODE backup хранятся вне машины, которую защищают, а не в собственной папке сервера. Backup, которые игра или плагин пишут в папку сервера, например автоматические backup мира в Valheim, место на диске сервера занимают.
Сколько свободного места стоит держать?
От двадцати до тридцати процентов. Сохранениям, обновлениям, backup и распаковке загрузок нужно временное место, и диск, на который файлы помещаются впритык, откажет при первой же такой операции.




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