#Описание и признаки неисправности
Панель управления сообщает о заполненном диске, при этом в файловом менеджере сумма размеров сайтов невелика. Возможны логи вне документного корня, журналы Nginx/Apache/PHP-FPM, данные других служб или уже удалённые файлы, которые продолжает держать процесс. Удалять логи файловым менеджером наугад нельзя: можно потерять сведения об инциденте и не освободить место при открытом файловом дескрипторе.
#Как отличить возможные причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Логи расположены вне каталогов сайтовОбщий системный /var/log и журналы панели не отображаются в веб-каталоге. | df показывает мало места, du сайта — немного. | Определить реальный раздел и подкаталог с журналами. |
| Удалённый, но открытый файлПроцесс веб-сервера продолжает записывать в удалённый файл. | df показывает занято, du — нет; lsof +L1 находит открытые удалённые файлы. | Настроить корректную ротацию и безопасное переоткрытие журналов. |
| Занято другое пространство/резервные копииНа разделе находятся архивы панели, базы, контейнеры или systemd journal. | du показывает крупные каталоги вне www. | Настроить срок хранения/перенос/расширение раздела по регламенту. |
#Пошаговая диагностика и решение
- Подтвердите, какой именно раздел заполненОткройте в панели раздел использования диска или ресурсов, запишите имя файловой системы. По SSH выполните
df -hиdf -i: первая команда показывает место, вторая — свободные inode. Если свободных inode нет, новые файлы тоже не создаются, но причина может быть миллионах мелких файлов, а не больших логах. Не начинайте удаление, пока не найдёте конкретный раздел. - Сопоставьте объём раздела с видимыми каталогамиНа сервере с правами администратора выполните
sudo du -xhd1 /varиsudo du -xhd1 /var/log. Флаг-xне переходит на другие файловые системы,-hделает размеры читаемыми,-d1ограничивает глубину одним уровнем. Команды только читают; могут долго выполняться на миллионах файлов. Если/varне на переполненном разделе, анализируйте точку монтирования, показаннуюdf. - Проверьте системный журнал и логи веб-сервераСравните
/var/log/nginx,/var/log/apache2, журналы PHP-FPM и записи панели, если они есть в этом дистрибутиве. Командойsudo journalctl --disk-usageпосмотрите объём журнала systemd. Не очищайте журналjournalctl --vacuum-sizeбез согласования срока хранения: он может содержать доказательства взлома или сведения для расследования сбоя. - Ищите открытые удалённые журналы, если df и du расходятсяПри установленном пакете
lsofвыполнитеsudo lsof +L1: команда перечислит файлы, на которые у процесса остаётся дескриптор, хотя у файла больше нет видимых ссылок. Обратите внимание на большие позиции с пометкой(deleted)и имя процесса. Еслиlsof: command not found, согласуйте установку пакета с администратором; не ищите причину путём случайного перезапуска MySQL и PHP. - Определите, почему логи растутОткройте несколько последних строк самого быстрорастущего журнала через
sudo tail -n 80 /путь/к/журналуи посмотрите повторяющиеся ошибки, адреса запросов и даты. Если это бесконечная серия 404/502/фатальных ошибок PHP, сначала устраните её причину; временное освобождение места не остановит рост. Логи могут содержать IP, пути и технические идентификаторы, не публикуйте их полностью в открытом чате. - Проверьте установленную ротацию журналовДля Nginx/Apache на Debian обычно используется logrotate; по SSH проверьте существование файлов
/etc/logrotate.d/и расписание запуска. Сначала воспользуйтесьsudo logrotate -d /etc/logrotate.conf: это диагностический режим, он не должен фактически выполнять ротацию. Прочитайте предупреждения, проверьте владельца логов и postrotate: процесс должен переоткрывать журнал. Не меняйте глобальные параметры только ради одного сайта. - Освобождайте место без разрушительных действийКогда установлено, какие старые архивированные журналы можно удалить по политике хранения, предварительно скопируйте нужные для аудита и согласуйте удаление через штатную очистку/ротацию панели. Для удалённого открытого файла в логах обычно нужно корректно переоткрыть дескрипторы обслуживающего процесса, а не удалять его каталог: решите с администратором, применимо ли штатное
nginx -s reopenили управление logrotate. Не делайтеtruncateдля неизвестного открытого файла. - Убедитесь, что место не уходит сноваПовторите
df -hиdf -i, проверьте размер журналов и несколько минут наблюдайте за ростом. Еслиdfне изменился после ротации, перепроверьтеlsof +L1, точки монтирования и резервные копии; не усиливайте чистку случайными командами. При переполнении системного раздела и ошибках записи организуйте расширение хранилища и мониторинг предупреждений заранее. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Проверка результата и дальнейшие действия
Успех — df показывает достаточное свободное пространство, du и lsof объясняют использованный объём, журнал ротации работает и место не кончается вновь. Если расхождение остаётся, передайте администратору снимки df -h, df -i, du и обезличенный lsof +L1, не очищая оставшиеся системные файлы.