LinuxВысокая

Исправляем ошибки нехватки места на диске в Linux

Разбираем причины ошибок нехватки места на диске в Linux и даём пошаговые способы освобождения пространства и устранения сбоев.

Обновлено 20 июля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 11+CentOS 7+Linux с файловой системой ext4

Что означает ошибка нехватки места на диске

Ошибка нехватки дискового пространства в Linux проявляется сообщениями вида:

No space left on device

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

Причины возникновения

  • Накопление кэша пакетного менеджера — в /var/cache/apt/archives (Ubuntu/Debian) или /var/cache/yum (CentOS) скапливаются сотни МБ скачанных пакетов.
  • Старые ядра Linux — при каждом обновлении ядра старое не удаляется автоматически и занимает 200–500 МБ каждое.
  • Разросшиеся логи — сервисы вроде journald, nginx, docker пишут логи в /var/log, которые никто не ротирует.
  • Удалённые, но открытые файлы — процесс держит файл после rm, и место не освобождается до его перезапуска.
  • Исчерпание inode — на диске много м tiny-файлов (например, кэш PHP/Node), и закончились inode при наличии свободных блоков.
  • Docker и контейнеры — неиспользуемые образы, тома и build-кэш занимают десятки ГБ.

Способы решения

Способ 1: Быстрая диагностика и очистка кэша APT

Начните с понимания масштаба проблемы и удаления самого «мусорного» слоя.

  1. Посмотрите заполненность разделов:
    df -h
    

    Флаг -h выводит размеры в ГБ/МБ, понятные человеку.
  2. Найдите, какие папки занимают место в корне:
    sudo du -h --max-depth=1 / 2>/dev/null
    
  3. Очистите кэш скачанных пакетов:
    sudo apt clean
    

    Эта команда удаляет всё из /var/cache/apt/archives, но не ломает систему — пакеты можно скачать заново.

Способ 2: Удаление старых ядер и ненужных зависимостей

Если apt clean не помог, скорее всего, место съедают старые ядра.

  1. Посмотрите установленные ядра:
    dpkg --list | grep linux-image
    
  2. Безопасно удалите всё неиспользуемое:
    sudo apt autoremove --purge -y
    

    ⚠️ Важно: команда оставит текущее и предыдущее рабочее ядро. Не удаляйте linux-image вручную через dpkg -r, если не уверены, какое ядро активно.

Способ 3: Чистка логов и системных журналов

Логи часто занимают несколько ГБ на серверах.

  1. Очистите журнал systemd (оставьте только последние 100 МБ):
    sudo journalctl --vacuum-size=100M
    
  2. Удалите старые сжатые логи в /var/log:
    sudo find /var/log -name "*.gz" -delete
    sudo find /var/log -name "*.old" -delete
    
  3. Если используете Docker, очистите «мёртвые» данные:
    docker system prune -a --volumes
    

    💡 Совет: эта команда удалит неиспользуемые контейнеры, сети, образы и тома. Убедитесь, что не нужные вам данные отсутствуют в volumes.

Способ 4: Освобождение места при удерживаемых файлах и нехватке inode

Если df -h показывает 100%, а du — мало, проблема в процессах или inode.

  1. Проверьте inode отдельно от блоков:
    df -i
    

    Если IUse% близко к 100% — удаляйте мелкие файлы (кэши приложений, сессии).
  2. Найдите удалённые, но открытые файлы:
    sudo lsof | grep deleted
    
  3. Перезапустите процесс, который держит файл (например, rsyslog):
    sudo systemctl restart rsyslog
    

    После рестарта место сразу вернётся в df -h.

Профилактика

Чтобы ошибка не возвращалась, настройте автоматическую уборку:

  • Включите еженедельный apt autoremove через cron или systemd timer.
  • Ограничьте размер журнала systemd — отредактируйте /etc/systemd/journald.conf:
    SystemMaxUse=500M
    
    и перезапустите sudo systemctl restart systemd-journald.
  • Настройте logrotate для /var/log (файл /etc/logrotate.conf уже содержит базовые правила).
  • Для Docker добавьте в /etc/docker/daemon.json лимит на логи контейнеров:
    {
      "log-driver": "json-file",
      "log-opts": { "max-size": "10m", "max-file": "3" }
    }
    
  • Раз в месяц проверяйте df -h и df -i на серверах, особенно на тех, где пишутся бэкапы или логи приложений.

Часто задаваемые вопросы

Почему df показывает 100% заполнения, а du — мало?
Можно ли безопасно удалять старые ядра Linux?
Что делать, если место кончается на production-сервере прямо сейчас?
Поможет ли удаление файлов в корзине на Linux сервере?

Полезное

Проверьте свободное место
Найдите тяжёлые папки
Очистите пакетный кэш
Удалите старые ядра и зависимости
Проверьте inode и процессы

Эта статья помогла вам решить проблему?