Як звільнити дисковий простір на сервері VPS/VDS

У цій статті ми розглянемо досить поширену причину збоїв в роботі сервера, яку можна легко уникнути. Як вже зрозуміло із назви, мова піде про ситуацію, коли на сервері закінчилося вільний простір, і потрібно зрозуміти, яка інформація займає все місце.

Чим загрожує зайнятий на 100% простір на сервері?

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

Основні ознаки і наслідки того, що на сервері немає вільного місця:

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

Як не допустити, щоб місце на сервері закінчилося

Як і в будь-який інший ситуації, краще не допустити проблему, а ніж усувати її наслідки, які бувають вкрай неприємні і в деяких випадках практично непоправні, наприклад, пошкоджені таблиці InnoDB. Тому дуже важливо своєчасно проводити очищення сервера від непотрібних файлів.

Якщо ви вже є нашим клієнтом і у вас є акаунт з послугою VPS, ви могли помітити, що ми передбачили виникнення ситуації з нестачею місця: як тільки на сервері залишається мало вільного простору, власнику послуги приходить відповідне повідомлення на контактнe поштову скриньку від нашої системи моніторингу. Для тих, кому стежити за повідомленнями на пошту не зовсім зручно, а про те, що відбувається з сервером, хотілося б знати максимально швидко – у нас є зручне рішення з Telegram-ботом

Що займає все місце на диску?

Якщо на сервері закінчилося або закінчується місце, і ми знаємо про це – це вже половина вирішення або запобігання проблеми. Тепер нам потрібно зрозуміти, що саме на сервері займає місце, і на основі цього видалити непотрібні файли або ж прийти до висновку, що використовуваного тарифу мало, і потрібно перейти на наступний з більшим обсягом дискового простору. Розглянемо основні інструменти (bash-команди), які нам допоможуть знайти найбільші файли і папки. Для використання цих команд потрібно підключитися до сервера по SSH. Щоб мати доступ до всіх файлів сервера потрібно підключатися під користувачем root (root-пароль до VPS відправляється на контактну поштову скриньку при замовленні послуги).

Перша потрібна нам команда:

df -h

Орієнтуватися треба на / – кореневий розділ, в прикладі це рядок:

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

З цього рядка ми бачимо, що на сервері всього 25 ГБ і з яких зайнято 20 ГБ (84%) і вільно 3,9 ГБ. Вивід команди заокруглений до гігабайт, тому сума зайнятого (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

Підрахунок цими командами теж може зайняти тривалий час при великому обсязі диска або кількості файлів.

Висновок

Трохи розібравшись в темі, бачимо що зовсім не складно стежити за роботою сервера, а точніше за його дисковим простором, і тим самим уникнути його тимчасової недоступності або некоректної роботи сайтів і куди більш серйозних проблем. Якщо ж питання все ще залишилися, завжди можна звернутися в нашу підтримку, де досвідчені фахівці дадуть відповідь на усі запитання.