Что делать, если в Linux после удаления файлов место на диске не освободилось?

«Что делать, если в Linux после удаления файлов место на диске не освободилось?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Базовая диагностика:

    • Сравниваю вывод df -h (показывает занятое место с точки зрения файловой системы) и du -sh / (показывает суммарный размер файлов). Если df показывает мало свободного места, а du — нет, значит место удерживают процессы.
  2. Поиск процессов, удерживающих удалённые файлы (deleted files):

    lsof +L1  # Показать файлы со счётчиком ссылок <1
    # Или более конкретно:
    lsof | grep -i deleted
    • Найденные процессы нужно аккуратно перезапустить (например, systemctl restart nginx), чтобы ядро освободило дисковое пространство.
  3. Работа с логами и временными файлами:

    • Проверяю и очищаю логи в /var/log/ (например, с помощью logrotate или truncate -s 0 /var/log/some.log).
    • Ищу большие файлы, которые могли быть созданы приложениями:
      find / -type f -size +500M -exec ls -lh {} ; 2>/dev/null | head -20
  4. Проверка контейнеров и виртуализации:

    • Если используется Docker: docker system df покажет использование диска, а docker system prune -a удалит неиспользуемые данные (осторожно!).
    • Проверяю томов и снимки (snapshots) LVM.
  5. Синхронизация файловой системы:

    • Иногда помогает принудительная запись кэшей: sync.
    • В крайнем случае можно попробовать очистить кэш страниц ядра, но это временное решение и может снизить производительность:
      echo 3 > /proc/sys/vm/drop_caches