Как освободить место на сервере VDS/VPS

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

Чем грозит занятое на 100% место на сервере?

Ответ на этот вопрос довольно прост, но не все сразу могут понять всю суть проблемы. На первый взгляд может показаться, что если мы не планируем на сервер загружать новые данные, то отсутствие на нём свободного места ничем не грозит, но это не так. Работа сервера, его служб и размещенных на нем сайтов напрямую зависит от возможности работать с файлами, а при отсутствии свободного места сервер не может вносить изменения в файлы, то есть не может полноценно работать.

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

  • Не работает авторизация на сайте;
  • Не создаются файлы сессий;
  • На сайте не работает добавление товаров в корзину, не работают формы и нет возможности загрузить какой- либо файл;
  • Не доступен сервер баз данных, возможна та же ситуация с другими службами;
  • Повредились таблицы баз данных;
  • Все ошибки, в которых указано «disk quota exceeded», «spaces are not allowed» или «can not create…» и т.п.

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

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

Если вы уже являетесь нашим клиентом и у вас есть аккаунт с услугой VPS, вы могли заметить, что мы предусмотрели возникновение ситуации с нехваткой места: как только на сервере остаётся мало свободного пространства, владельцу услуги приходит соответствующее уведомление на контактный почтовый ящик от нашей системы мониторинга. Для тех, кому следить за уведомлениями на почту не совсем удобно, а о том, что происходит с сервером, хотелось бы знать максимально быстро — у нас есть удобное решения с Telegram-ботом

Что занимает все место на диске?

Если на сервере закончилось или заканчивается место, и мы знаем об этом — это уже половина решения или предотвращения проблемы. Теперь нам нужно понять, что на сервере занимает место, и на основе этого удалить ненужные файлы или же прийти к выводу, что используемого тарифа не достаточно, и нужно перейти на следующий с большим количеством дискового пространства. Рассмотрим основные инструменты (bash-команды), которые нам помогут найти самые большие файлы и папки. Для использования данных команд нужно подключиться к серверу по SSH, чтобы иметь доступ до всех файлов сервера нужно подключаться под пользователем root (root пароль к VPS серверу отправляется на контактный почтовый ящик при заказе услуги). Первая нужная нам команда:

df -h

Ориентироваться нужно на / — корневой раздел, в примере это строка:

/dev/vda1        25G   20G  3,9G  84% /

С данной строки мы видим, что на сервере всего 25G и с которых занято 20G (84%) и свободно 3,9G. Вывод команды округлен до гигабайт, по этому сума занятого (25G) и свободного (3,9G) места может не совпадать с полным размером диска (25G). Все остальные разделы в примере, это системные виртуальные разделы.

Проверить размер файла или директории (папки), в примере каталог /var/log/, можно командой:

du -sh /var/log/

Следующий набор команд поможет понять, какие каталоги занимают больше всего места:

cd /
du -sh * | sort -h


По аналогии можем зайти в нужный каталог и узнать размер директорий и файлов в нём:

Следующая комбинация команд удалит все архивы старых логов сервера:

find /var/log/ -name "*gz"  | xargs -i rm {}

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

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

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

Удалить какой либо файл или каталог можно командой:

rm -rf /backup/backup_20_03_2019.tar.gz

Где /backup/backup_20_03_2019.tar.gz путь к файлу, что мы удаляем.

Если мы обнаружили, что какой то log-файл занимает много места — его нужно очистить, именно очистить — удалять файлы, в которые пишутся логи нельзя. Очистить файл можно командой:

> /var/log/nginx/access.log

Где /var/log/nginx/access.log — это путь к файлу который мы хотим очистить.

Большинство выше указанных команд будут актуальны и для услуг общего хостинга и помогут освободить место на хостинге.

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

Inodes — индексные дескрипторы

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

df -i

Вывод данной команды аналогичен df -h.

Максимально возможное число Inodes зависит от файловой системы и от размера диска. Как правило, их более чем достаточно, но случаются такие случаи, когда Inodes заканчиваются быстрее дискового пространства. Три основные причины такой ситуации:

  1. Кеш-файлы сайтов — если сайт регулярно создаёт свой кэш и при этом не удаляет старый, вы можете достигнуть лимита по инодам. Данная ситуация объясняется тем, что кэш-файлы представляют собой очень большое количество маленьких по размеру файлов.
  2. Не настроена автоочистка файлов сессий вашего движка. Сессии также представляют собой файлы практически нулевого размера, а при достаточной посещаемости ресурса их может накопиться очень много.
  3. Почтовая очередь сервера — если по какой то причине у вас на сервере не работает отправка почты, а письма только скапливаются в очереди, скорее всего вы также столкнётесь с лимитом Inodes. В большинстве случаев причина такой ситуации — взлом сервера и рассылка с него спама.

Следующие две команды помогут узнать количество занятых индексных дескрипторов в текущем каталоге и подкаталогах:

find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -nr | head -n 10

for i in *; do echo $i; find $i |wc -l; done

Выполнение этих команд тоже может занять продолжительное время при большом объеме диска или количестве файлов.

Вывод

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