Удалили файл в Linux, но место не освободилось — как исправить?

11.11.2026
0
8
---

Бывает ситуация: на сервере Linux заканчивается свободное место. Находим большой файл размером 5 ГБ, удаляем его, но после удаления свободное место на диске не увеличивается. Почему так происходит и как освободить место на диске Linux?

Одна из самых распространённых причин — файл был удалён, но продолжает использоваться запущенным процессом. Linux не освобождает физическое пространство до тех пор, пока все процессы не закроют открытые файловые дескрипторы.

Разберём основные причины и способы решения проблемы.

1. Удалённый файл всё ещё используется процессом

В Linux удаление файла командой rm не означает, что данные сразу исчезнут с диска.

Если какой-либо процесс продолжает использовать файл, система сохраняет его содержимое до закрытия файлового дескриптора.

Например, вы удалили лог-файл Nginx размером 5 ГБ, но сам веб-сервер продолжает записывать данные в этот файл.

Чтобы проверить, какие процессы используют удалённые файлы, выполните:

bash
lsof | grep deleted

Пример вывода:

text
nginx  1234 www-data  4w REG 8,1 5G /var/log/nginx/access.log (deleted)

Это означает, что процесс Nginx с PID 1234 продолжает удерживать удалённый файл размером 5 ГБ.

Как освободить место?

Самый простой способ — корректно перезапустить соответствующую службу:

bash
systemctl restart nginx

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

В некоторых случаях можно использовать отправку сигнала процессу:

bash
kill -HUP 1234

Однако поведение зависит от приложения: сигнал HUP обычно заставляет процесс перечитать конфигурацию или переоткрыть логи, а не гарантированно завершает использование файла.

2. Как освободить место без перезапуска процесса

Если перезапуск службы нежелателен, можно определить файловый дескриптор удалённого файла и очистить его содержимое.

Сначала найдите открытые удалённые файлы:

bash
ls -l /proc/*/fd/ 2>/dev/null | grep deleted

Пример:

text
/proc/5678/fd/4 -> /var/log/nginx/access.log (deleted)

Здесь:

  • 5678 — PID процесса;
  • 4 — номер файлового дескриптора;
  • deleted — файл уже удалён, но процесс продолжает его использовать.

Если вы точно определили нужный файл и понимаете последствия для приложения, его можно обнулить:

bash
truncate -s 0 /proc/5678/fd/4

Или:

bash
: > /proc/5678/fd/4

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

3. Проверяем файловую систему и точки монтирования

Иногда проблема связана не с удалёнными файлами, а с особенностями монтирования файловых систем.

Например:

  • Docker использует отдельные файловые слои и тома;
  • NFS хранит данные на удалённом сервере;
  • tmpfs использует оперативную память;
  • файл может находиться на другом разделе диска.

Проверьте использование дискового пространства:

bash
df -h

Посмотрите точки монтирования:

bash
mount | grep /var/log

Для более подробной информации используйте:

bash
df -i

Эта команда покажет использование inode. Иногда место на диске ещё есть, но закончились доступные inode, из-за чего система не позволяет создавать новые файлы.

4. Если используется Docker

В Docker место может занимать не только удалённый файл, но и образы, контейнеры, кэш сборки и тома.

Проверить использование дискового пространства Docker можно командой:

bash
docker system df

Она покажет, сколько места занимают:

  • образы;
  • контейнеры;
  • локальные тома;
  • кэш сборки.

Для дополнительной информации используйте:

bash
docker system df -v

Не удаляйте Docker-тома без проверки: в них могут находиться важные данные приложений и баз данных.

5. Как быстро проверить, почему не освобождается место в Linux

Для первичной диагностики выполните следующие команды:

Шаг 1. Проверяем свободное место:

bash
df -h

Шаг 2. Ищем удалённые, но открытые файлы:

bash
lsof +L1

Шаг 3. Проверяем использование inode:

bash
df -i

Шаг 4. Анализируем точки монтирования:

bash
findmnt

Шаг 5. Проверяем использование Docker (если установлен):

bash
docker system df

Вывод

Если вы удалили большой файл в Linux, но свободное место на диске не увеличилось, не спешите искать и удалять новые файлы.

В первую очередь проверьте открытые файловые дескрипторы с помощью lsof +L1. Возможно, удалённый файл продолжает использоваться Nginx, Apache, Docker или другим работающим процессом.

После закрытия файлового дескриптора дисковое пространство обычно освобождается автоматически.

Полезная команда для диагностики:

bash
lsof +L1

Она поможет быстро найти удалённые файлы, которые продолжают занимать место на диске Linux.

Понравиласть статья? Жми лайк или расскажи своим друзьям!
Теги к новости:
Linux, Docker
Комментарии
Добавить комментарий
Добавление комментария
Ваше Имя:
Ваш E-Mail:
Это код:
Кликните на изображение чтобы обновить код, если он неразборчив
Введите сюда: