Пользуясь Linux, можно столкнуться с ситуацией, когда диск переполнен. Вы хотите освободить место на диске, но когда смотрите сколько занимают Ваши файлы, то оказывается что они занимают намного меньше пространства, чем занято на диске…
Выглядит это приблизительно так:
Файлы могут быть визуально удалены, но еще заняты какими-либо процессами. Поэтому их невозможно удалить по-настоящему с диска. Для нахождения таких файлов используйте команду:
# lsof -nP | grep '(deleted)'
Эти файлы почемены как “(deleted)”, но до сих пор находятся на диске.
Аналогично можно найти с помощью awk:
# find /proc/*/fd -ls 2> /dev/null | awk '/deleted/ {print $11}';
Мы увидим номер процесса и номер файлового дескриптора (fd), который нам и нужен.
Вручную можно “освободить” эти файлы так:
# : > /proc/$PROC/fd/$FD
Где $PROC – номер процесса, а $FD – номер файлового дескриптора
Или так:
# > /proc/$PROC/fd/$FD
Или так:
# truncate -s 0 /proc/$PROC/fd/$FD
Чтобы пройтись по всем таким файлам разом, выполняем эту команду ( ВНИМАНИЕ! УБЕДИТЕСЬ В ТОМ, ЧТО ВЫ УВЕРЕНЫ В ТОМ, ЧТО ДЕЛАЕТЕ 🙂 ) :
# find /proc/*/fd -ls 2> /dev/null | awk '/deleted/ {print $11}' | xargs -p -n 1 truncate -s 0
Останется только подтверждать “усечение” кнопками y и Enter.
Вот теперь на диске есть столько свободного места, сколько должно быть:
Итак, в этой заметке мы рассмотрели как освободить место на диске от удаленных файлов (deleted) на Linux. Если Вам есть чем поделиться по этой теме, пишите в комментариях.