url image

Что делать, когда осталось мало места на диске

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

Рассмотрим ситуацию, когда уже все случилось.

Как правило, в таких случаях на сервере отключаются многие службы, могут возникнуть проблемы с загрузкой файлов и есть вероятность, что зайти на сервер вы сможете только по SSH или вовсе по VNC.

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

df -h

Отметим, что эта команда обычно применяется в паре с df -i, которую используют для проверки индексных дескрипторов (inode). Иначе говоря, проверяя место на диске, не забудьте проверить и индексные дескрипторы.

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

Filesystem      Size  Used Avail Use%  Mounted on
udev            488M     0  488M   0%  /dev
tmpfs           100M   12M   88M  12%  /run
/dev/vda5        20G   20G    0G 100%  /
tmpfs           499M     0  499M   0%  /dev/shm
tmpfs           5.0M     0  5.0M   0%  /run/lock
tmpfs           499M     0  499M   0%  /sys/fs/cgroup
/dev/vda1       236M   36M  188M  16%  /boot

В данном контексте нас интересует строка /dev/vda5, именно это устройство в системе хранит файлы вашего сервера. Название может отличаться, ориентируйтесь по /dev/ и общему объёму, он должен совпадать или быть близким к объёму вашего диска по тарифу. И если видите, что в этой строке в столбце Use% - 100, значит диск переполнен.

Что же сделать в этом случае?

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

Если такой информации у вас нет, то стоит поискать наиболее объёмные директории. Сделать это можно с помощью следующего однострочника:

du -hx --max-depth=15 / | grep "[[:digit:]]\.*G"

Эта команда подсветит все папки и их вложенные папки до определённой глубины, в весе которых будет значится буква G (гигабайт).

Будет выведен примерно такой список:

1.8G    /usr
5.3G    /root/backups
5.4G    /root
1.0G    /var/lib
1.0G    /var/www/httpd-logs
1.8G    /var/www/user1/data/www/site1.fvds.ru
2.0G    /var/www/user1/data/www/site1.fvds.ru_bak
4.9G    /var/www/user1/data/www
4.9G    /var/www/user1/data
4.9G    /var/www/user1
1.2G    /var/www/user2/data/www/site2.ru/upload/iblock
1.2G    /var/www/user2/data/www/site2.ru/upload/resize_cache/iblock
1.2G    /var/www/user2/data/www/site2.ru/upload/resize_cache
2.9G    /var/www/user2/data/www/site2.ru/upload
1.6G    /var/www/user2/data/www/site2.ru/bitrix/cache/s1/bitrix
1.7G    /var/www/user2/data/www/site2.ru/bitrix/cache/s1
1.8G    /var/www/user2/data/www/site2.ru/bitrix/cache
2.3G    /var/www/user2/data/www/site2.ru/bitrix
5.2G    /var/www/user2/data/www/site2.ru
5.2G    /var/www/user2/data/www
5.2G    /var/www/user2/data
5.2G    /var/www/user2
11G     /var/www
12G     /var
20G     /

Дальше поможет только ручной анализ выведенных данных. Вы должны изучить директории и понять, закономерен ли такой большой объём и можно ли их почистить. В нашем примере можно сразу «приметить» папку с бэкапами /root/backups, если эти копии не единственные и хранятся где-то ещё, то папку можно удалить. Кандидатом на удаление выглядит и сделанная явно вручную копия директории сайта /var/www/user1/data/www/site1.fvds.ru_bak.Если она точно не понадобится, можно удалить и её. 

Также некоторый объём может занимать кэш сайта, в нашем случае это сайт на Битриксе и директория /var/www/user2/data/www/site2.ru/bitrix/cache

Очистить её содержимое можно командой:

find /var/www/user2/data/www/site2.ru/bitrix/cache/* -delete

Будьте внимательны, «звёздочка» тут обязательна. Команда справедлива и для вышеупомянутых случаев по удалению директорий с бэкапами.

Ещё одна причина — «забившиеся» логи. Так случается, когда записи сыпятся в лог настолько часто и быстро, что место на диске заканчивается быстрее, чем происходит системная ротация логов. В нашем случае, хоть и немного, но занимает место директория с логами веб-сервера /var/www/httpd-logs
Очистить её так же, как мы очищали кэш и бэкапы, нельзя — это приведёт к тому, что служба, которая пишет лог, перестанет запускаться.

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

du -sh /var/www/httpd-logs/*

И вновь звездочка обязательна.

Увидим что-то вроде такого:

2.0M    /var/www/httpd-logs/site1.fvds.ru.access.log
128K    /var/www/httpd-logs/site1.fvds.ru.error.log
223M    /var/www/httpd-logs/site2.ru.access.log
765M    /var/www/httpd-logs/site2.ru.error.log
24K     /var/www/httpd-logs/site3.fvds.ru.access.log
4.0K    /var/www/httpd-logs/site3.fvds.ru.error.log

Отсюда явно прослеживается, что больше всего дискового пространства занимают логи:  /var/www/httpd-logs/site2.ru.error.log и /var/www/httpd-logs/site2.ru.access.log

Удалять их нам нельзя, только очистить содержимое.

Введём команду:

cat /dev/null > /var/www/httpd-logs/site2.ru.access.log

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

Если окажется, что логов много и все они занимают приличный объём, можно «занулить» их командой:

find /var/www/httpd-logs/ -type f -size +100M -exec truncate -s 0 {} \;

Этой командой очищается содержимое всех логов, которые занимают более 100 мегабайт. 

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

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!