Linux N/AВысокая

Ошибка «Диск заполнен» в Linux: причины и способы освобождения места

Статья объясняет, как диагностировать и исправить критическую ошибку «Диск заполнен» в Linux с помощью утилит df, du и инструментов очистки системы.

Обновлено 8 апреля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Все дистрибутивы Linux (Ubuntu, CentOS, Debian, RHEL)

Что означает ошибка «Диск заполнен»

Ошибка «No space left on device» (на русском часто отображается как «Нет свободного места на устройстве» или просто «Диск заполнен») — критическое состояние, когда на выбранном разделе диска закончилось свободное место для записи.

Симптомы:

  • Невозможность создания новых файлов, даже в домашней директории.
  • Сбои в работе служб (например, веб-сервер не может записать логи, база данных — создавать дампы).
  • Ошибки при установке/обновлении пакетов.
  • В некоторых случаях система может стать неотзывчивой.

Ошибка возникает на уровне ядра Linux (errno ENOSPC) и не зависит от конкретного приложения — любая операция записи завершится с этим кодом, если место действительно исчерпано.

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

  1. Накопление логических файлов: Большие файлы логов (/var/log/), кеш приложений (~/.cache/), базы данных, файлы дампов, временные файлы (/tmp/).
  2. Удалённые, но ещё открытые файлы (deleted but open): Файл удалён командой rm, но процесс продолжает на него писать, занимая место. df покажет место занятым, а du по каталогам — нет.
  3. Разрастание кеша пакетного менеджера: Накопление старых версий пакетов в кеше APT (/var/cache/apt/archives/) или DNF/YUM.
  4. Слишком маленький выделенный размер раздела: Раздел, например, для /var/ или /home/, изначально был создан с недостаточным объёмом.
  5. «Тени» (shadow) файловые системы (если используется LVM, Btrfs, ZFS): Снапшоты (снимки) могут занимать значительное место, так как хранят изменения относительно исходного состояния.
  6. Файлы с большим количеством inodes: Хотя это другая проблема (исчерпание inodes), её симптомы могут быть похожи. Проверяется командой df -i.

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

Способ 1: Диагностика и быстрая очистка кеша пакетного менеджера

Это первый и часто самый эффективный шаг на серверах и десктопах.

  1. Определите, какой раздел заполнен:
    df -h
    

    Найдите строку с 100% использованием (например, /dev/sda1 или /).
  2. Очистите кеш APT (Ubuntu/Debian):
    sudo apt clean
    sudo apt autoremove --purge
    

    Или для DNF (RHEL/Fedora/CentOS 8+):
    sudo dnf autoremove
    sudo dnf clean all
    
  3. Проверьте результат командой df -h снова.

💡 Совет: apt clean удаляет ВСЕ скачанные файлы пакетов из кеша, что может освободить сотни мегабайт или даже гигабайты.

Способ 2: Поиск и удаление больших файлов

Если очистка кеша не помогла, нужно найти «пожирателей» диска.

  1. Перейдите в корень проблемного раздела (например, если заполнен /, то оставайтесь в /).
  2. Найдите 20 самых больших файлов и каталогов:
    sudo du -ahx / 2>/dev/null | sort -rh | head -n 20
    
    • -a — включать файлы.
    • -h — человеко-читаемый формат (M, G).
    • -x — не переходить на другие файловые системы.
    • 2>/dev/null — скрыть ошибки «Permission denied».
  3. Проанализируйте вывод. Частые «кандидаты»:
    • /var/log/ — старые логи.
    • /var/cache/ — кеш приложений и пакетов.
    • /tmp/ — временные файлы.
    • /home/<user>/Downloads/ — загрузки пользователя.
    • Папки с дампами (*.dump, *.sql).
  4. После идентификации удалите или архивируйте ненужные файлы. Будьте осторожны! Удаляйте только то, что уверенно не нужно.
    # Пример: удалить старый лог (предварительно убедитесь, что он не нужен!)
    sudo rm -f /var/log/syslog.1.gz
    

Способ 3: Очистка журналов systemd и логов

Журналы системных служб через systemd-journald могут разрастаться.

  1. Проверьте текущий размер журнала:
    sudo journalctl --disk-usage
    
  2. Очистите старые записи, оставив, например, последние 3 дня:
    sudo journalctl --vacuum-time=3d
    

    Или очистите, оставив не более 500 МБ:
    sudo journalctl --vacuum-size=500M
    
  3. Для логов в /var/log/ (не через systemd) можно вручную удалить сжатые старые файлы (например, *.gz или *.old), если политика ротации логов (logrotate) не сработала.

Способ 4: Обработка «удалённых, но открытых» файлов

Если du не находит больших файлов, а df показывает занятое место, скорее всего, проблема в открытых удалённых файлах.

  1. Найдите такие файлы:
    sudo lsof +L1
    
    • +L1 — ищет файлы, у которых количество ссылок (ссылочный счётчик) меньше 1 (т.е. удалённые, но ещё открытые).
  2. В выводе обратите внимание на столбец SIZE и NAME. Процесс, держащий файл, указан в столбце COMMAND/PID.
  3. Чтобы освободить место, завершите процесс, который держит файл (если это безопасно), или перезапустите службу:
    sudo systemctl restart <имя_службы>
    

    После этого место освободится автоматически.

Способ 5: Расширение раздела (если возможно)

Если после всех очисток место всё равно критически мало, а данные важны, рассмотрите увеличение раздела.

  1. Для виртуальных машин/облачных серверов: Увеличьте виртуальный диск через панель управления хостинг-провайдера (AWS, GCP, Azure, DigitalOcean и т.д.).
  2. Для LVM: После увеличения виртуального диска используйте pvresize, lvextend и resize2fs (для ext4) или xfs_growfs (для XFS).
  3. Для разделов без LVM: Сложнее. Часто потребуется создание нового раздела, копирование данных и изменение fstab. Сделайте резервную копию важных данных перед любыми операциями с разделами!

⚠️ Важно: Операции изменения разделов и файловых систем несут риск потери данных. Всегда имейте актуальный бэкап.

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

  1. Настройте мониторинг: Используйте cron с уведомлениями (например, через mail или Slack-бот) при превышении 80-90% использования диска.
    # Пример простой проверки в cron (каждый день)
    0 9 * * * df -h | grep -E '(/$|/var)' | awk '$5+0 >= 90 {print "CRITICAL: " $0}' | mail -s "Disk Usage Alert" admin@example.com
    
  2. Настройте logrotate: Убедитесь, что ротация логов работает корректно. Проверьте конфиги в /etc/logrotate.conf и /etc/logrotate.d/.
  3. Регулярно чистите кеш: Добавьте в cron очистку кеша пакетного менеджера раз в неделю (apt clean / dnf clean all).
  4. Используйте tmpfs для временных файлов: В /etc/fstab можно смонтировать /tmp или /var/tmp в оперативную память (tmpfs), что снизит нагрузку на основной диск.
  5. Анализируйте тренды: Раз в месяц запускайте du на ключевых разделах, чтобы понять, какие каталоги растут быстрее всего, и принять меры (архивация, удаление).

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

В чем разница между командами df и du?
Как найти самые большие файлы и каталоги?
Можно ли автоматически очищать кеш?
Почему `df` показывает мало свободного места, а `du` по папкам не находит больших файлов?

Полезное

Проверьте использование диска
Найдите большие файлы и каталоги
Очистите кеш пакетного менеджера
Очистите системные и прикладные логи
Удалите временные файлы и кеш приложений