Мар 252014
 

О том, что делать в случае переполнения файловой системы и как определить, какой каталог занимает много места, я уже писал.
Но бывают и ситуации поинтереснее. Например, есть некий процесс, непрерывно пишущий огромный лог. Кто-то этот самый лог удаляет командой rm, и мы наблюдаем странные вещи: свободное место на разделе уменьшается, а файла, занимающего кучу места, нет! Дело в том, что даже после удаления файла из файловой системы, в структурах памяти ОС остаётся открытым т.н. дескриптор файла. А пока у файла остаётся хотя бы один дескриптор (и не важно, в памяти он или на файловой системе), место на диске не освобождается.
Как быть? В Linux есть псевдо-файловая система /proc, из которой при необходимости можно вытащить массу важной ниформации. Итак, поищем открытые файлы, которые были удалены:

find /proc/*/fd -ls | grep  '(deleted)'

Вывод будет выглядеть примерно вот так:

42291439    0 lrwx------   1 root     root           64 Mar 25 15:51 /proc/10166/fd/5 -> /var/opt/OV/tmp/xpl.sync.OvLog\ (deleted)
41908179    0 lrwx------   1 oracle   dba            64 Mar 25 11:35 /proc/14522/fd/9 -> /u03/app/oracle/product/10.2.0/dbs/lkinstRAT\ (deleted)
42292110    0 lrwx------   1 root     root           64 Mar 25 15:51 /proc/3780/fd/8 -> /var/run/nscd/dbplz4VZ\ (deleted)

Имена псевдо-директорий в файловой системе /proc, выделенные красным - это pid процессов, которые держат открытыми удалённые файлы. Тут надо принять решение, что делать с процессами. Можно просто убить, можно остановить соответствующие сервисы, можно просто усечь файл:

# Усечём первый файл из списка:
echo > /proc/10166/fd/5

Этот способ сработает в Linux, но можно попробовать и на других UNIX-like ОС.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)