Бесплатный экспресс-аудит сайта Безопасность, SEO, AI-поиск и 152-ФЗ — отчёт с баллами за минуту Проверить сайт
Обсудить проект

Кончилось место на диске: что чистить в BitrixVM

Нехватка места на сервере редко выглядит как нехватка места. Сначала падает что-то другое, и час уходит на поиски не там.

Как это проявляется

Что видитеЧто на самом деле
[Bitrix\Main\DB\ConnectionException] Mysql connect errorБаза остановилась, потому что ей некуда писать
The table 'b_iblock_element_property' is fullТа же причина: место кончилось, таблица не растёт
Ошибка с кодом 28Системный код «на устройстве не осталось места»
nginx не запускается после перезагрузкиНе смог записать свои файлы при старте
Не продлевается сертификатПроцедуре выпуска некуда сохранить результат
Сайт открывается, но не сохраняются файлы и картинкиМесто кончилось только что, база пока держится

Поэтому при любой непонятной аварии первая команда — не разбор журналов, а проверка места.

Шаг 1. Посмотреть, сколько и где

df -h

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

Дальше ищем виновника сверху вниз:

du -sh /home/bitrix/* | sort -h
du -sh /var/log/* | sort -h
du -sh /var/lib/mysql/* | sort -h

Шаг 2. Что обычно занимает место

ЧтоГдеМожно ли удалять
Резервные копии продукта/home/bitrix/www/bitrix/backup/Да, кроме нужных. Хранить их на том же диске — плохая идея
Двоичные журналы базыкаталог данных MySQLТолько средствами базы, не удалением файлов
Кеш компонентов/home/bitrix/www/bitrix/cache/Да, пересоздаётся
Управляемый кеш/home/bitrix/www/bitrix/managed_cache/Да
Кеш уменьшенных картинок/home/bitrix/www/upload/resize_cache/Да, но пересоздание нагружает сервер
Файлы обмена с 1С/home/bitrix/www/upload/1c_catalog/Старые — да
Журналы системы и веб-сервера/var/log/Старые — да, лучше настроить ротацию

Двоичные журналы базы — частый сюрприз

На виртуальных машинах Битрикса включено ведение двоичного журнала MySQL: он нужен для репликации и восстановления на точку во времени. Настройки лежат в отдельном файле конфигурации (на машинах вендора это bx_replica.cnf), и если срок хранения не ограничен, журналы спокойно съедают десятки гигабайт.

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

Шаг 3. Чего делать нельзя

  • Удалять файлы базы руками. Табличные файлы и журналы чистятся только средствами самой базы, иначе она не поднимется.
  • Чистить /upload/ целиком. Там файлы сайта: картинки товаров, документы, вложения. Кеш — только подкаталог resize_cache.
  • Удалять каталоги ядра, чтобы освободить место: продукт не запустится, восстанавливать придётся из копии.

Когда освободили, а не помогло

Типичная картина: место освободили, а база всё равно не стартует или сайт отдаёт ошибку. Проверьте:

  1. Перезапущены ли службы. База, упавшая от нехватки места, сама не поднимется.
  2. Тот ли раздел вы чистили. Вывод df -h после чистки должен показывать свободное место именно там, где его не было.
  3. Не осталось ли удалённых, но открытых файлов. Пока процесс держит удалённый журнал, место не возвращается — помогает перезапуск службы.
  4. Не кончились ли иноды. Место есть, а файлы не создаются: смотрите df -i. Обычно это миллионы мелких файлов кеша.

Чтобы не повторялось

  1. Перенесите резервные копии с сервера: копия рядом с сайтом не спасёт при отказе диска и занимает место.
  2. Ограничьте срок хранения двоичных журналов базы.
  3. Настройте ротацию журналов системы и веб-сервера.
  4. Поставьте оповещение о свободном месте: предупреждение за неделю до аварии стоит дешевле самой аварии.

Если чистить уже нечего, диск пора расширять — порядок в отдельной инструкции. А если место съедает база, смотрите разбор про размер базы Битрикс24.

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

Сайт выдаёт Mysql connect error. Это точно место?

Очень вероятно: при заполненном диске база останавливается первой, и сайт показывает ошибку подключения. Прежде чем разбирать настройки базы, выполните df -h — это десять секунд.

Ошибка «The table ... is full», хотя таблица небольшая.

Чаще всего это тоже про место: базе некуда расширять файл таблицы. Проверьте свободное место на разделе, где лежат данные MySQL, а не только в корне.

Освободил место, но база не поднялась.

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

Место есть, а файлы не создаются.

Посмотрите df -i: могли кончиться иноды — количество файлов, а не объём. Обычно виноваты миллионы мелких файлов кеша; помогает их очистка.

Можно ли удалять двоичные журналы MySQL?

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

Можно ли удалять содержимое bitrix/cache?

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

После нехватки места перестал запускаться nginx.

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