Закончилось место на сервере Linux. Как узнать, чем занято?

2018-11-08 23:51:52


Начинающие мастера часто сталкиваются с проблемой, когда заканчивается свободное место на хостинге или VPS с Linux. При этом объёмных работ по наполнению сайтов, работающих на сервере, не производилось. У моего коллеги был случай, когда из-за нехватки места не могли создастся файлы сессий на сайте. Давайте разберёмся, как это предотвратить на реальном примере.

Как узнать в linux, сколько осталось свободного места

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

df -h

Данная команда отобразит информацию о свободном пространстве на жёстком диске в гигабайтах. Кроме того, программа вычисляет процент занятого пространства, чтоб облегчить восприятие. Если занято более 90% - уже стоит беспокоиться.

Свободное место в Linux

Печальная картина - sda1 у нас занят 21 ГБ из 24. Место скоро закончится, но лучше это предотвратить.

Как узнать, чем занято место на сервере

Часто, причинами разрастания объёмов данных на сервер являются файлы логов. Например, из-за какой-нибудь 
ошибки в скрипте сайта при каждом его выполнении ошибки пишется в лог.

Поищем 10 самых больших файлов на сервере, выполнив команду:

find / -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}'

Нашли самые объёмные файлы

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

Видим, что самый большой файл лежит в папке mysql и имеет расширение MYD. Его трогать нельзя, так как в этом файлы хранятся данные для базы данных MySQL. Это относится и к файлам ipdata1 и ib_logfile*.

В файле selogs.txt хранилась информация о ботах поисковых систем, приходящих на сайт. Такие файлы можно безболезненно удалять, выполнив команду:

rm /var/www/****/protected/logs/selogs.txt

Файлы логов btmp.* содержат в себе информацию о неудачных попытках входа в систему. Возможно вас пытаются взломать, подобрав пароль методом bruteforce. Чтобы себя обезопасить, рекомендую настроить авторизация по ssh ключу. Изучив содержимое этих файлов (при необходимости), их тоже можно удалить.

Очистка linux системы с помощью утилиты apt

Если у вас дистрибутив семейства Debian, можете удалить ненужные пакеты и кэш с помощью утилиты apt.

sudo apt-get clean

Перед установкой какого-либо пакета через apt-get, он кэшируется в локальный репозиторий. Объём сохранённых deb пакетов может достигать внушительных размеров. Команда команда apt-get clean удалит все закэшированные deb пакеты и освободит обширное пространство на диске.

sudo apt-get autoremove

При установке программы, вмести с ней в linux устанавливаются дополнительные пакеты, которые использует эта программа. Если программа была удалена, то её зависимости автоматически не удаляются. Данная команда и предназначена для удаления этих пакетов. Но если доля зависимостей ваших программ может быть невелико, то размер зависимостей устаревших версий ядра операционной системы linux может быть огромным. Выполните эту команду и увидите эффект.

Освобождение места с помощью утилиты yum

В семействе дистрибутивов RedHat аналогичные операции можно произвести с помощью следующих команд:


yum clean packages
yum autoremove

Детальное исследование занятого места на дисках в Linux

Для детального исследования занятого пространства в linux рекомендую использовать утилиту ncdu. Установить ее можно командой:

sudo apt-get install ncdu

Если у вас yum, вместо apt-get, то:

sudo yum install

После установки перейдите в любую папку и выполните в консоли команду:

ncdu

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

Результат работы программы ncdu

Таким образом, можно искать папки, занимающие большие объёмы дискового пространства.