BLACKBOXЦентр помощи

Диск сервера заполнен

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

общееОбновлено 2026-10-09~8 мин чтения
На этой странице

Когда диск сервера заполняется, базы данных останавливаются, сайты выдают ошибки, а файлы перестают сохраняться. Команды выполняются на сервере по SSH от имени root (Подключение к серверу по SSH (Windows, macOS, Linux)). Если у сервера подключена услуга «Мониторинг 24/7», динамику заполнения диска можно посмотреть и в панели app.blackbox.md на странице «Мониторинг» (app.blackbox.md/monitoring, боковое меню → «Инфраструктура» → «Мониторинг»).

Доступно: всем, у кого есть root-доступ по SSH к серверу BLACKBOX. Графики на странице «Мониторинг» — для серверов с активной услугой «Мониторинг 24/7». Апгрейд из панели — владельцу сервера.

Признаки заполненного диска

Признак Где его видно
Ошибка No space left on device в терминале, при сохранении файла, в apt или dnf, scp или rsync, в логах приложений
cannot create temp file for here-document при нажатии Tab в терминале SSH
База данных останавливается, не отвечает или не запускается systemctl --failed показывает службу базы данных (например, mariadb, mysql или postgresql); в её логе — No space left on device или Disk full
Сайт отвечает ошибкой 500 или 502, вход на сайте не сохраняется в браузере, в логах веб-сервера и PHP
В таблице «Ваши серверы» полоса в столбце «Диск» красная (от 90%), а график «Использование диска (%)» приближается к 100% страница «Мониторинг», только для серверов с услугой «Мониторинг 24/7» (Страница «Мониторинг»). Учитывается только раздел /
Оповещение о диске в карточке «Оповещения» или по email только если для сервера настроены правила мониторинга (Оповещения и уведомления по email)

Шаг 1. Проверьте место и иноды

df -h
df -i
  • df -h: если в столбце Use% для / или другого раздела 100% (или почти), диск заполнен. Переходите к шагам 2–5.
  • df -i: если в столбце IUse% 100%, новые файлы создать нельзя, даже когда место ещё есть. Перейдите к разделу «Закончились иноды» ниже.

Шаг 2. Быстро освободите место без риска

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

journalctl --disk-usage
journalctl --vacuum-size=200M

Кеш скачанных пакетов:

Ubuntu и Debian

apt clean
apt autoremove --purge

Вторая команда удаляет старые ядра и пакеты, которые больше ничему не нужны. Прочитайте список, прежде чем подтверждать.

AlmaLinux и CentOS Stream

dnf clean all

Шаг 3. Найдите, что занимает место

Выведите папки раздела / по размеру (самые большие — в конце, последняя строка — итог по разделу), затем повторите команду для самой большой папки, например /var:

du -xh --max-depth=1 / 2>/dev/null | sort -h
du -xh --max-depth=1 /var 2>/dev/null | sort -h

Файлы больше 500 МБ:

find / -xdev -type f -size +500M -exec ls -lh {} + 2>/dev/null

Удобнее программа ncdu (перемещение стрелками, выход — q). Установите её после шага 2, когда на диске снова появится немного места. В Ubuntu и Debian:

apt update
apt install -y ncdu

В AlmaLinux и CentOS Stream пакет берётся из репозитория EPEL:

dnf install -y epel-release
dnf install -y ncdu

Затем запустите её:

ncdu -x /
Папка Что там обычно Что делать
/var/log логи системы и приложений «Большие логи» ниже
/var/lib/docker образы, контейнеры, логи контейнеров, тома «Docker» ниже
/root, /home, /var/www, /var/backups, /tmp выгрузки баз данных (.sql, .sql.gz), архивы (.zip, .tar.gz), забытые копии «Забытые копии и архивы» ниже
/var/lib/mysql, /var/lib/postgresql, /var/lib/pgsql файлы баз данных ничего не удаляйте вручную; см. частые вопросы
/swapfile файл подкачки Добавление файла подкачки (swap)

Внимание Не удаляйте вручную файлы баз данных (/var/lib/mysql, /var/lib/postgresql, /var/lib/pgsql) и системные папки (/boot, /etc, /usr, /var/lib/dpkg, /var/lib/rpm). Данные в /var/lib/docker чистите только командами docker; единственное исключение — очистка логов контейнеров, описанная ниже. Удалённое без резервной копии восстановить нельзя.

Шаг 4. Освободите место

Большие логи

Не удаляйте через rm лог, в который программа ещё пишет: место не освободится, пока программа не перезапустится. Очистите его (вместо ПУТЬ_К_ФАЙЛУ укажите путь, найденный на шаге 3):

truncate -s 0 ПУТЬ_К_ФАЙЛУ

Сжатые архивы ротированных логов старше 7 дней:

find /var/log -type f -name "*.gz" -mtime +7 -delete

Docker

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

docker system df
docker image prune -a
docker builder prune

Логи контейнеров не ограничены по размеру, если вы не задали лимит. Выведите 5 самых больших логов и очистите нужный (вместо ПУТЬ_К_ФАЙЛУ укажите его путь из списка):

du -h /var/lib/docker/containers/*/*-json.log | sort -h | tail -n 5
truncate -s 0 ПУТЬ_К_ФАЙЛУ

Затем ограничьте их: Установка Docker и Docker Compose, раздел «Ограничьте логи контейнеров».

Опасно Не запускайте docker volume prune и не добавляйте --volumes к docker system prune. Тома проекта, остановленного командой docker compose down, считаются неиспользуемыми, и их данные (например, база данных) будут потеряны безвозвратно.

Забытые копии и архивы

Выгрузки баз данных, архивы сайтов и копии, сделанные «на всякий случай», часто так и остаются на сервере. Скопируйте их на свой компьютер или на другой сервер (Передача файлов на сервер (scp, rsync, SFTP)), проверьте копию и удалите файлы с сервера:

rm ПУТЬ_К_ФАЙЛУ

Удалённые, но ещё открытые файлы

Если после удаления df -h показывает ту же заполненность, какая-то программа всё ещё держит файлы открытыми. Их покажет lsof +L1: в столбце COMMAND — программа, в SIZE/OFF — размер. Перезапустите службу, к которой относится программа (вместо ИМЯ_СЛУЖБЫ укажите её имя, например nginx):

lsof +L1
systemctl restart ИМЯ_СЛУЖБЫ

Если lsof не установлен, установите его. В Ubuntu и Debian:

apt install -y lsof

В AlmaLinux и CentOS Stream:

dnf install -y lsof

Шаг 5. Перезапустите службы и проверьте результат

df -h /
systemctl --failed

Команда df -h / должна показать свободное место. systemctl --failed покажет упавшие службы, например mariadb, mysql, postgresql, nginx или php8.3-fpm. Перезапустите каждую службу из списка (вместо ИМЯ_СЛУЖБЫ укажите её имя) и откройте сайт:

systemctl restart ИМЯ_СЛУЖБЫ

Оставляйте запас места: на странице «Мониторинг» полоса в столбце «Диск» становится жёлтой с 80%.

Закончились иноды

df -i показывает IUse% 100%, хотя по df -h место есть: на диске слишком много мелких файлов. Обычные причины — сессии PHP, кеш приложения, почтовая очередь и временные файлы. Найдите папки, где больше всего файлов (число слева):

du --inodes -x --max-depth=3 / 2>/dev/null | sort -n | tail -n 20

Если в найденной папке лежат сессии или временные файлы, удалите старые, например старше 7 дней (вместо ПУТЬ_К_ПАПКЕ укажите путь к папке). Не применяйте эту команду к папкам с данными сайта (например, с файлами, загруженными пользователями) или базы данных.

find ПУТЬ_К_ПАПКЕ -type f -mtime +7 -delete
  • Сессии PHP хранятся в /var/lib/php/sessions (Ubuntu, Debian) или /var/lib/php/session (AlmaLinux, CentOS Stream).

  • Кеш приложения очищайте его собственной командой, если она есть.

  • Почтовая очередь: если вы используете Postfix, команда ниже покажет в последней строке, сколько писем ждёт отправки. Тысячи писем, которые вы не отправляли, — признак взломанного сайта: Сервер взломан или атакован: что делать.

    postqueue -p | tail -n 1

Как предотвратить проблему

  • Ротация логов. logrotate уже ротирует логи системы и пакетов из репозитория в /var/log. Для логов вашего приложения в другой папке создайте файл /etc/logrotate.d/ПРИЛОЖЕНИЕ с таким содержимым:

    /var/www/ПРИЛОЖЕНИЕ/logs/*.log {
        weekly
        rotate 4
        compress
        missingok
        notifempty
        copytruncate
    }

    Затем проверьте его (команда только имитирует ротацию и ничего не меняет):

    logrotate -d /etc/logrotate.d/ПРИЛОЖЕНИЕ
  • Лимит системного журнала. Ограничьте размер журнала 200 МБ:

    mkdir -p /etc/systemd/journald.conf.d
    printf '[Journal]\nSystemMaxUse=200M\n' > /etc/systemd/journald.conf.d/size.conf
    systemctl restart systemd-journald
  • Docker. Задайте лимит логов контейнеров в /etc/docker/daemon.json и время от времени проверяйте docker system df: Установка Docker и Docker Compose.

  • Резервные копии — вне сервера. BLACKBOX не делает автоматических резервных копий сервера, а кнопка «Резервные копии» на карточке сервера не работает. Отправляйте копии на другой сервер и не храните старые выгрузки на том же диске: Стратегия резервного копирования для вашего сервера.

  • Контроль диска. С услугой «Мониторинг 24/7» вы видите столбец «Диск» и график «Использование диска (%)» (Дополнительные услуги для сервера). Без неё регулярно проверяйте df -h.

Диск побольше

Кнопка «Апгрейд» на карточке сервера переводит сервер на больший тариф того же семейства. Оплата списывается с баланса, сервер один раз перезагружается: Апгрейд сервера: переход на больший тариф.

Семейство Диск при апгрейде
Basic растёт: 20 → 50 → 100 → 200 → 400 GB
Стандарт растёт: 20 → 40 → 80 → 160 GB
High-Frequency растёт: 100 → 200 → 400 GB
CPU остаётся 30 GB
High-Frequency Compute остаётся 50 GB
  • На CPU и High-Frequency Compute апгрейд места не добавляет. Закажите новый сервер из семейства с бо́льшим диском (Тарифы VPS: как выбрать), перенесите данные и удалите старый сервер.
  • Перед апгрейдом освободите хотя бы немного места, чтобы службы нормально запустились после перезагрузки, а файловая система смогла расшириться. После апгрейда проверьте df -h /; если размер прежний, напишите нам.
  • По тарифам «VPS hosting» и выделенным серверам напишите нам: Как связаться с поддержкой BLACKBOX.

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

Я удалил большие файлы, но df -h показывает то же самое. Почему? Какая-то программа всё ещё держит эти файлы открытыми. Найдите её командой lsof +L1 и перезапустите соответствующую службу (шаг 4).

df -h показывает свободное место, но ошибка No space left on device не уходит. Почему? Проверьте df -i: могли закончиться иноды. Посмотрите и на остальные строки df -h: может быть заполнен другой раздел, например /boot или /tmp.

/var/lib/mysql занимает много места, там много файлов binlog.000…. Их можно удалить? Не через rm. Это бинарные логи MySQL: MySQL 8 включает их по умолчанию и хранит 30 дней. Если вы не используете репликацию, удалите старые средствами самого MySQL:

mysql -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY;"

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

Не удаётся подключиться по SSH. Что делать? Веб-консоли в панели нет. Следуйте статье Не удаётся подключиться по SSH; если не получится, напишите нам и укажите IP-адрес сервера.

Можно попросить AI-ассистента найти, что занимает диск? Да, если у API-токена ассистента есть разрешение «Выполнять любые команды от root на моих серверах». Читайте каждую команду, прежде чем одобрить её, особенно команды удаления: Выполнение команд на сервере через AI.

Может ли команда BLACKBOX почистить диск за меня? Сервер администрируете вы, а поддержка подскажет, что делать. Если хотите, чтобы работу выполнила сама команда, запросите отдельное предложение на администрирование сервера: Профессиональные услуги по запросу: администрирование, DevOps, миграция.

Не нашли ответ?Напишите нам — служба поддержки ответит. support@blackbox.md
Открыть тикет