Planetahost VPS
Перейти к основному контенту

Как найти и удалить большие файлы в Linux

intro-How-find-and-delete-large-files-Linux-planetahost.png

Введение

Если на сервере или рабочей станции Linux неожиданно закончилось свободное место, важно как можно быстрее определить причину. Это могут быть большие файлы журналов, резервные копии, временные файлы, Docker-образы или другие данные, занимающие значительный объем дискового пространства.

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


Проверка использования дискового пространства

Первым делом рекомендуется посмотреть, насколько заполнены файловые системы. Для этого выполните команду:

df -h

Пример вывода:

изображение.png

В выводе каждая строка соответствует отдельной файловой системе.

Основные столбцы:

Поле Описание
Filesystem Устройство или файловая система
Size Общий размер файловой системы
Used Использованное пространство
Avail Доступное свободное место
Use% Процент заполнения
Mounted on Каталог, куда смонтирована файловая система

В данном примере основная система Linux расположена на разделе:

/dev/sdb2

Он имеет следующие параметры:

Size:   109G
Used:    13G
Avail:   91G
Use:     12%
Mount:   /

Это означает, что корневой раздел /, где находятся системные файлы, пакеты и настройки, занимает 13 ГБ из 109 ГБ. Свободно остается около 91 ГБ.


Отдельно подключен RAID-массив:

/dev/md0        916G   18G   853G   2% /mnt/raid

В данном случае:

  • размер массива - 916 ГБ;
  • занято - 18 ГБ;
  • свободно - 853 ГБ;
  • точка подключения - /mnt/raid.

То есть большая часть данных хранится именно на RAID-массиве.


Также в выводе присутствуют временные файловые системы:

tmpfs
udev

Они не занимают место на диске, а используют оперативную память.

Например:

tmpfs 3.7G 0 3.7G /dev/shm

Это виртуальная файловая система в RAM, используемая для временных данных между процессами.


Docker в выводе df -h

В системе с Docker могут отображаться строки вида:

overlay 109G 13G 91G 12% /var/lib/docker/overlay2/...

Они относятся к файловой системе контейнеров Docker.

overlay2 - это механизм хранения слоев Docker. Каждая запущенная контейнерная файловая система отображается отдельной строкой.

Внимание

Эти строки не означают, что Docker занял дополнительно 109 ГБ для каждого контейнера.

Они показывают тот же самый раздел:

/dev/sdb2

который используется Docker для хранения данных.

Чтобы посмотреть реальное использование Docker, лучше использовать:

docker system df

изображение.png

Если значение Use% приближается к 100%, необходимо определить, какие файлы или каталоги занимают больше всего места.


Поиск самых больших каталогов

Чтобы определить, какие каталоги занимают больше всего места в корневой файловой системе, выполните:

sudo du -h --max-depth=1 / | sort -hr

Пример:

изображение.png

Параметры команды:

  • du - подсчет размера каталогов;

  • -h - удобочитаемый формат;

  • --max-depth=1 - отображать только первый уровень вложенности;

  • sort -hr - сортировка по размеру.

После этого можно перейти в наиболее крупный каталог и повторить команду.

Например:

sudo du -h --max-depth=1 /var | sort -hr

изображение.png

Так постепенно можно определить источник использования дискового пространства.

Удаление папок

Удалить пустую папку:

rmdir /path/to/folder

Удалить папку со всем содержимым:

rm -rf /path/to/folder

Будьте осторожны: команда rm -rf безвозвратно удаляет файлы и каталоги. Перед выполнением убедитесь, что указан правильный путь.


Поиск самых больших файлов

Найти файлы размером более 1 ГБ:

sudo find / -type f -size +1G

изображение.png

Найти файлы более 500 МБ:

sudo find / -type f -size +500M

Поиск самых больших файлов с сортировкой

Для отображения десяти самых больших файлов выполните:

sudo find / -type f -exec du -h {} + 2>/dev/null | sort -hr | head -10
Часть команды Описание
sudo Запуск команды с правами администратора. Необходим, чтобы иметь доступ к файлам всех пользователей и системным каталогам
find / Поиск начинается с корневого каталога /, то есть проверяется вся файловая система
-type f Искать только обычные файлы, исключая каталоги, ссылки и специальные файлы
-exec Выполнить указанную команду для каждого найденного файла
du -h Показать размер файла в удобном формате (KB, MB, GB)
{} Подставляется имя найденного файла
+ Передает найденные файлы группой, что работает быстрее, чем запускать du отдельно для каждого файла
2>/dev/null Скрывает сообщения об ошибках доступа к каталогам
sort -hr Сортирует результат по размеру: h — учитывает размеры в KB/MB/GB, r — сортировка от большего к меньшему
head -10 Показывает только первые 10 строк результата

Пример вывода:

изображение.png

Рассмотрим результат выполнения команды:

1.6G    /mnt/raid/volumes/zabbix/mysql/zabbix/history.ibd
1.4G    /mnt/raid/volumes/zabbix/mysql/zabbix/history_uint.ibd
1.1G    /mnt/raid/volumes/zabbix/mysql/binlog.000152
1.1G    /mnt/raid/volumes/zabbix/mysql/binlog.000151
1.1G    /mnt/raid/volumes/zabbix/mysql/binlog.000150
...

В данном случае сразу видно, что основное место на диске занимают файлы базы данных MySQL, используемой системой мониторинга Zabbix.

Самые большие файлы:

/mnt/raid/volumes/zabbix/mysql/zabbix/history.ibd

Размер:

1.6G

Файл history.ibd содержит исторические данные Zabbix - значения, которые собирают агенты и другие источники мониторинга. При большом количестве узлов и частом сборе метрик эта таблица может занимать значительный объем.

Следующий крупный файл:

/mnt/raid/volumes/zabbix/mysql/zabbix/history_uint.ibd

Размер:

1.4G

Данный файл хранит целочисленные значения истории (history_uint), например:

  • состояние служб;
  • счетчики;
  • количество подключений;
  • сетевой трафик;
  • другие числовые метрики.

Также в списке находятся файлы:

/mnt/raid/volumes/zabbix/mysql/binlog.000152
/mnt/raid/volumes/zabbix/mysql/binlog.000151
...

Размер каждого файла:

1.1G

Это бинарные журналы MySQL (binary logs).

Они используются для:

  • репликации MySQL;
  • восстановления данных;
  • отслеживания изменений в базе.

Однако если репликация не используется и настроено длительное хранение binlog, эти файлы могут постепенно занимать много места.

Этот способ позволяет быстро определить, какие файлы занимают больше всего места.

Удаление файлов

После того как ненужные файлы были найдены, их можно удалить с помощью команды rm.

Удаление одного файла:

rm /path/to/file

Удаление нескольких файлов:

rm /path/to/file1 /path/to/file2

Удаление всех файлов с определённым расширением в каталоге:

rm /path/to/directory/*.log

Удаление файлов, найденных с помощью find:

find /path/to/directory -type f -size +100M -delete

Команда rm безвозвратно удаляет файлы. Перед её выполнением рекомендуется убедиться, что указан правильный путь и выбраны именно те файлы, которые необходимо удалить.


Проверка размера каталога

Чтобы узнать размер конкретного каталога:

du -sh /var/log

Например:

изображение.png


Проверка размера файлов в каталоге

Вывести размер файлов текущего каталога:

ls -lh

изображение.png

Или отсортировать по размеру:

ls -lhS

Самые большие файлы будут отображаться первыми.


Проверка журналов системы

Довольно часто причиной заполнения диска становятся журналы.

Проверить их размер можно командой:

journalctl --disk-usage

Например:

изображение.png

При необходимости старые журналы можно удалить:

sudo journalctl --vacuum-size=500M

или

sudo journalctl --vacuum-time=7d

Проверка Docker

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

Посмотреть использование пространства:

docker system df

изображение.png

При необходимости удалить неиспользуемые объекты:

docker system prune

Для удаления вместе с неиспользуемыми образами:

docker system prune -a

Внимание

Перед очисткой Docker убедитесь, что удаляемые образы и контейнеры больше не используются.


Проверка удаленных, но открытых файлов

Иногда файл уже удален, но место на диске не освобождается, поскольку его продолжает использовать работающий процесс.

Найти такие файлы можно командой:

sudo lsof +L1

изображение.png

Если в выводе присутствуют записи с пометкой (deleted), освободить место можно после перезапуска соответствующего процесса или службы.


Полезные команды

Проверить заполнение файловых систем:

df -h

Показать самые большие каталоги:

sudo du -h --max-depth=1 / | sort -hr

Найти файлы больше 1 ГБ:

sudo find / -type f -size +1G

Показать 10 самых больших файлов:

sudo find / -type f -exec du -h {} + 2>/dev/null | sort -hr | head

Проверить размер журналов:

journalctl --disk-usage

Проверить использование диска Docker:

docker system df

Проверить удаленные, но открытые файлы:

sudo lsof +L1

Заключение

Если в Linux закончилось свободное место, рекомендуется начинать диагностику с команды df -h, после чего определить наиболее крупные каталоги с помощью du, найти самые большие файлы через find и проверить журналы, Docker и удаленные, но открытые файлы.

Комплексное использование этих инструментов позволяет быстро определить причину заполнения диска и безопасно освободить необходимое пространство.