Заметки: Очистка свободного места в Linux

Linux symbolОчистка свободного места в Linux не выглядит трудной задачей. Гораздо сложнее на незнакомом сервере найти те файлы, появление которых послужило причиной нехватки места на диске и принять решение что с ними можно сделать. В этой статье буду коллекционировать команды, которых постоянно не найти под рукой, когда они так нужны.

Очистка свободного места в Linux

Представим ситуацию, когда вы попадаете впервые на незнакомый сервер с задачей освободить место на диске. Возможно некоторое время до этого вы получили алерт по этому серверу и вам нужно что-то предпринять, чтобы устранить проблему.

Базовые команды

Первым делом нужно понять что из себя представляет дисковая подсистема сервера. Для этого как нельзя лучше подойдут следующие команды. Для начала выведем список блочных устройств:

А вот вывод:

Примечание: в выводе команды вы можете заметить больше количество loop-устройств. Это snap таким образом монтирует свои пакеты. В качестве ОС используется Ubuntu, как вы уже догадались. Подробнее о работе snap можно почитать в статьях The snap format и Ubuntu snap – что это такое и с чем его едят?.

Кстати, уже из вывода команды df можно выяснить, что используется lvm.

Оценка размера файлов и каталогов

В этом поможет всем известная команда du, с работой которой, однако, есть пара нюансов. Вот так можно посмотреть размер вложенных файлов и каталогов определенного раздела:

Но если вы запустите её в корне своей домашней директории, то обнаружите, что каталоги с точкой в начале имени она не выведет:

Чтобы это обойти, команду придется усложнить 1:

Еще одной полезной опцией у du является -x (–one-file-system), которая позволяет не проваливаться в другие файловые системы, если например вы хотите посчитать размер каталогов из корня, но при этом у вас в /mnt подмонтированы другие разделы:

Возможно вам также будет полезен ключ –time, который показывает самое свежее время изменения файла в каталоге или его подкаталогах, но я эту опция обычно не использую.

Поиск файлов

Теперь пришло время find. Всем известная команда с очень широким функционалом и возможностями. В контексте поиска нас интересует время модификации файлов (например за последние сутки):

Если мы ищем файлы больше определенного размера, то добавим еще ключ -size (- и + означают меньше и больше определенного размера соответственно):

Если вы хотите найти файлы определенного пользователя, то на помощь придет ключ -user:

Примечание: ключ -user особенно полезен, если вы дебажите проблему нехватки места пользователей при установленных квотах диска, ведь пользователь может хранить свои файлы не толькоо в домашнем каталоге.

Ну и напоследок команда, с помощью которой легко удалить найденные файлы (будьте аккуратны!):

А теперь переходим к задачке поинтереснее.

Поиск удаленных файлов

Очень может получиться так, что файл был удален, но еще не освобожден процессом. В этом случае к имени файла уже не обратиться и потому du не учтет его в итоговом объеме, но реальные блоки данных все еще не будут удалены с диска и, следовательно, df справедливо отобразит их в итоговом занятом объеме. Отыскать такие файлы можно командой:

Примечание: подробонее о работе файловой системы Linux я рассказывал в отдельной статье – Удаление открытого файла в Linux.

Далее уже вам решать что делать с найденными файлами. Можно корректно перезапустить процесс и тогда файловый дескриптор будет освобожден, а сами блоки данных файла окончательно удалятся с диска. Если процесс беспросветно завис, то поможет kill -9.

Стороннее программное обеспечение

Есть много программного обеспечения, которое самостоятельно управляет дисковыми ресурсами. Всем известно, что Docker особым образом оптимизирует занимаемое образами место на диске, используя слои.

Примечание: любой слой может быть переиспользован другими образами. Тем не менее в итоговом объеме каждого образа будет указан суммарный размер всех слоев, а не реальный занимаемый объем на диске. Это может ввести в заблуждение.

Посмотреть подробный отчет об использовании дискового пространства Docker можно командой:

Ну а очистить неиспользуемые слои и образы можно командой:

Команда также удаляет “подвисшие” образы (dangling images) – образы с <none> вместо имени и тега. Это самый безопасный способ очистки места, занимаемого образами Docker, не пытайтесь сами удалять слои в каталоге /var/lib/docker/overlay2!

На этом все. Как будет появляться что-то полезное, обязательно дополню статью. Если нужна помощь в изучении основ Linux, пишите.

Яндекс.Метрика