Не освободилось место после удаления файла в 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
Обсуждение
Нет комментариев.