Удалили файл в Linux, но место не освободилось — как исправить?
Бывает ситуация: на сервере Linux заканчивается свободное место. Находим большой файл размером 5 ГБ, удаляем его, но после удаления свободное место на диске не увеличивается. Почему так происходит и как освободить место на диске Linux?
Одна из самых распространённых причин — файл был удалён, но продолжает использоваться запущенным процессом. Linux не освобождает физическое пространство до тех пор, пока все процессы не закроют открытые файловые дескрипторы.
Разберём основные причины и способы решения проблемы.
1. Удалённый файл всё ещё используется процессом
В Linux удаление файла командой rm не означает, что данные сразу исчезнут с диска.
Если какой-либо процесс продолжает использовать файл, система сохраняет его содержимое до закрытия файлового дескриптора.
Например, вы удалили лог-файл Nginx размером 5 ГБ, но сам веб-сервер продолжает записывать данные в этот файл.
Чтобы проверить, какие процессы используют удалённые файлы, выполните:
lsof | grep deleted
Пример вывода:
nginx 1234 www-data 4w REG 8,1 5G /var/log/nginx/access.log (deleted)
Это означает, что процесс Nginx с PID 1234 продолжает удерживать удалённый файл размером 5 ГБ.
Как освободить место?
Самый простой способ — корректно перезапустить соответствующую службу:
systemctl restart nginx
После закрытия файлового дескриптора место должно освободиться.
В некоторых случаях можно использовать отправку сигнала процессу:
kill -HUP 1234
Однако поведение зависит от приложения: сигнал HUP обычно заставляет процесс перечитать конфигурацию или переоткрыть логи, а не гарантированно завершает использование файла.
2. Как освободить место без перезапуска процесса
Если перезапуск службы нежелателен, можно определить файловый дескриптор удалённого файла и очистить его содержимое.
Сначала найдите открытые удалённые файлы:
ls -l /proc/*/fd/ 2>/dev/null | grep deleted
Пример:
/proc/5678/fd/4 -> /var/log/nginx/access.log (deleted)
Здесь:
5678— PID процесса;4— номер файлового дескриптора;deleted— файл уже удалён, но процесс продолжает его использовать.
Если вы точно определили нужный файл и понимаете последствия для приложения, его можно обнулить:
truncate -s 0 /proc/5678/fd/4
Или:
: > /proc/5678/fd/4
Важно: операция необратима и удаляет содержимое файла. Перед выполнением убедитесь, что выбран правильный дескриптор и что приложение допускает очистку файла без перезапуска.
3. Проверяем файловую систему и точки монтирования
Иногда проблема связана не с удалёнными файлами, а с особенностями монтирования файловых систем.
Например:
- Docker использует отдельные файловые слои и тома;
- NFS хранит данные на удалённом сервере;
- tmpfs использует оперативную память;
- файл может находиться на другом разделе диска.
Проверьте использование дискового пространства:
df -h
Посмотрите точки монтирования:
mount | grep /var/log
Для более подробной информации используйте:
df -i
Эта команда покажет использование inode. Иногда место на диске ещё есть, но закончились доступные inode, из-за чего система не позволяет создавать новые файлы.
4. Если используется Docker
В Docker место может занимать не только удалённый файл, но и образы, контейнеры, кэш сборки и тома.
Проверить использование дискового пространства Docker можно командой:
docker system df
Она покажет, сколько места занимают:
- образы;
- контейнеры;
- локальные тома;
- кэш сборки.
Для дополнительной информации используйте:
docker system df -v
Не удаляйте Docker-тома без проверки: в них могут находиться важные данные приложений и баз данных.
5. Как быстро проверить, почему не освобождается место в Linux
Для первичной диагностики выполните следующие команды:
Шаг 1. Проверяем свободное место:
df -h
Шаг 2. Ищем удалённые, но открытые файлы:
lsof +L1
Шаг 3. Проверяем использование inode:
df -i
Шаг 4. Анализируем точки монтирования:
findmnt
Шаг 5. Проверяем использование Docker (если установлен):
docker system df
Вывод
Если вы удалили большой файл в Linux, но свободное место на диске не увеличилось, не спешите искать и удалять новые файлы.
В первую очередь проверьте открытые файловые дескрипторы с помощью lsof +L1. Возможно, удалённый файл продолжает использоваться Nginx, Apache, Docker или другим работающим процессом.
После закрытия файлового дескриптора дисковое пространство обычно освобождается автоматически.
Полезная команда для диагностики:
lsof +L1
Она поможет быстро найти удалённые файлы, которые продолжают занимать место на диске Linux.
Вас заинтересуют так же следующие новости
- Container Network Module в Docker — что это и как работает
- CI/CD: запуск пайплайна при изменении файлов в Git
- Argo CD в Kubernetes — GitOps, деплой и управление приложениями
- Как установить и настроить KVM в Linux — практический мастер-класс
- 4 полезные команды Linux для мониторинга системы и ресурсов сервера
- Разжёванный курс по Linux для чайников: часть 1 — основы Linux
