|
Куда девалось место в файловой системе? |
Статьи |
|
|
|
Например, есть некий процесс, непрерывно пишущий огромный лог. Кто-то этот самый лог удаляет командой rm , и мы наблюдаем странные вещи: свободное место на разделе уменьшается, а файла, занимающего кучу места, нет! Дело в том, что даже после удаления файла из файловой системы, в структурах памяти ОС остаётся открытым т.н. дескриптор файла. А пока у файла остаётся хотя бы один дескриптор (и не важно, в памяти он или на файловой системе), место на диске не освобождается. Как быть? В Linux есть псевдо-файловая система /proc , из которой при необходимости можно вытащить массу важной ниформации. Итак, поищем открытые файлы, которые были удалены:
find /proc/*/fd -ls | grep '(deleted)'
Вывод будет выглядеть примерно вот так:
886997021 0 l-wx------ 1 root root 64 Apr 12 12:19 /proc/13534/fd/29 -> /var/log/nginx/ssl.access.log.1\ (deleted) 886997022 0 l-wx------ 1 root root 64 Apr 12 12:19 /proc/13534/fd/30 -> /var/log/nginx/ssl.error.log.1\ (deleted)
Имена псевдо-директорий в файловой системе /proc , выделенные красным - это pid процессов, которые держат открытыми удалённые файлы. Тут надо принять решение, что делать с процессами. Можно просто убить, можно остановить соответствующие сервисы, можно просто усечь файл:
# Усечём первый файл из списка:
echo > /proc/13534/fd/29
Этот способ сработает в Linux, но можно попробовать и на других UNIX-like ОС.
|
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем. |
|
Автор: hellevil | 12-04-2017, 12:22 | Просмотров: 1 696 |
|
|
|
|