Не освободилось место после удаления файла в Linux

Иногда сталкиваюсь с таким явлением как место не освобождается после удаления файла в Linux, это случает в случае если удаленный файл все еще занят каким-либо процессом.

 

К примеру мы имеем большой файл /var/log/mysql/error.log и мы его удалили:

rm -rf /var/log/mysql/error.log

 

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

lsof | grep deleted | grep error.log

COMMAND   PID  TID TASKCMD   USER   FD   TYPE   DEVICE   SIZE/OFF  NODE   NAME
mariadbd  641  768 mariadbd  mysql  6u   REG    8,1      178689523 917524 /var/log/mysql/error.log (deleted)

Видим что файл /var/log/mysql/error.log с пометкой (deleted) занят процессом mariadbd и не может быть удален. Можно конечно перезагрузить сервер и тогда файл удалится, но не всегда перезагрузка возможна, поэтому мы освободим удаленный файл от процесса, тем самым высвободим занимаемое им место.

 

Зная PID процесса (641) найдем номер файлового дескриптора удаленного файла, командой:

ls -l /proc/641/fd | grep error.log

l-wx—— 1 root root 64 Dec 25 10:00 10 -> /var/log/mysql/error.log

Номер файлового дескриптора известен, освобождаем его командой:

cat /dev/null > /proc/641/fd/10

или так:

truncate -s 0 /proc/641/fd/10
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

Оставьте комментарий

пятнадцать + одиннадцать =