Освобождение дескриптора

Симптомы

  • После удаления файла место на диске не освободилось.

Решение

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

  1. Убить процесс
  2. Освободить дескриптор

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

Командой lsof найдем тот самый дескриптор

    root@localhost:~# lsof | grep deleted
    tail      34531                            root    3r      REG              252,1        0      21514 /var/log/test.log (deleted)

В выводе показано, что файл test.log с меткой deleted.
Так же видим PID 34531 процесса, который держит этот файл и номер дескриптора 3 на чтение.

Зная PID найдем номер дескриптора

    root@localhost:~# ls -l /proc/34531/fd
    total 0
    lr-x------ 1 root root 64 Sep  5 13:33 3 -> '/root/out.txt (deleted)'

И освободим его командой

    cat /dev/null > /proc/34531/fd/3

В этом случае сам файл останется в файловой системе пока процесс не завершится, но размер файла будет 0 байт и место на диске высвободится.