Если составить своеобразный рейтинг причин проблем в работе сервера, то однозначно можно сказать, что переполненный диск будет в самых верхних строчках чарта. Поэтому так важно своевременно отслеживать угрозу этого переполнения или уметь оперативно освобождать место на диске.
Рассмотрим ситуацию, когда уже все случилось.
Как правило, в таких случаях на сервере отключаются многие службы, могут возникнуть проблемы с загрузкой файлов и есть вероятность, что зайти на сервер вы сможете только по 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 мегабайт.
Мы перечислили все основные моменты, которые встречаются чаще всего при переполнении диска, но, конечно, бывает и много частных случаев. Если не удастся с ними справиться, напишите запрос в поддержку, поможем разобраться.