Освободить место на диске от удаленных файлов (deleted)

Thank you for reading this post, don't forget to subscribe! 

Поль­зу­ясь 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.

Вот теперь на дис­ке есть столь­ко сво­бод­но­го места, сколь­ко долж­но быть: