Перейти к содержимому

Закончилось место на диске - разбор причин

Сайт отдаёт ошибки, база отказывается писать, резервная копия не создаётся. Разбираем причины нехватки места по убыванию частоты.

С чего начать

Смотрим, что именно закончилось:

Окно терминала
df -h /home /var /tmp
df -i /home # свободные записи файлов, а не байты
# место может быть, а записей файлов не остаться: симптомы те же

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

Ищем, где лежит объём:

Окно терминала
du -sh /home/bitrix/www/* 2>/dev/null | sort -h | tail -8
du -sh /home/bitrix/backup /var/log /var/lib/mysql 2>/dev/null
# три каталога закрывают почти все случаи: копии, журналы и база

Находим самые крупные файлы:

Окно терминала
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null | head -10
ls -lh /var/lib/mysql/*.log /var/lib/mysql/mysql-bin.* 2>/dev/null | tail -5
# один забытый дамп или журнал базы часто и есть вся причина

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

Проверяем, что удалённое действительно освободилось:

Окно терминала
lsof +L1 2>/dev/null | head -5
# файл удалён, но процесс держит его открытым: место вернётся после перезапуска

Причины

  1. Резервные копии лежат на том же диске примерно 30% случаев

    ПризнакКаталог копий занимает больше самого сайта, а место кончается по расписанию копирования.

    ПроверкаСмотрим размер каталога резервных копий и число архивов в нём.

    Что делатьПереносим копии на отдельное хранилище и ограничиваем число хранимых архивов.

  2. Журналы веб-сервера и PHP выросли без ротации примерно 25% случаев

    ПризнакОдин файл журнала занимает десятки гигабайт, дата его создания - прошлый год.

    ПроверкаСмотрим размеры файлов в каталоге журналов и настройки их ротации.

    Что делатьВключаем ротацию с ограничением по размеру и сроку, старые журналы удаляем.

  3. Разросся кэш платформы примерно 20% случаев

    ПризнакКончились записи файлов, а не байты: в каталогах кэша миллионы мелких файлов.

    ПроверкаСчитаем число файлов в каталогах кэша и смотрим свободные записи на разделе.

    Что делатьЧистим кэш, сокращаем время его жизни и убираем кэширование по лишним ключам.

  4. Двоичный журнал базы данных не чистится примерно 15% случаев

    ПризнакКаталог базы растёт равномерно, а сами таблицы при этом прежнего размера.

    ПроверкаСмотрим размер файлов двоичного журнала и настройку срока их хранения.

    Что делатьЗадаём срок хранения журнала и удаляем старые файлы штатной командой базы.

  5. Мусор в каталоге загрузок примерно 10% случаев

    ПризнакЗагрузки занимают в разы больше ожидаемого, внутри - файлы обмена и временные копии.

    ПроверкаСмотрим самые тяжёлые подкаталоги загрузок и даты изменения файлов в них.

    Что делатьУдаляем старые файлы обмена и временные каталоги, оставляя реальные файлы сайта.

Частые вопросы

Почему место не вернулось после удаления файла?

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

Можно ли просто удалить каталог кэша?

Да, платформа соберёт кэш заново, но первые минуты сайт будет медленнее. Удалять лучше порциями, иначе сама команда удаления займёт диск и время.

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

Как минимум объём базы плюс объём одной резервной копии. Без этого запаса копия не создастся, а база может остановиться на записи.

Куда девать резервные копии?

На отдельное хранилище или в облако, а не на диск с сайтом. Копия на том же диске не спасает ни от отказа диска, ни от нехватки места.

Что делать, если место кончилось прямо сейчас?

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

Смежное

Первоисточник