Блог компанії 3v-Hosting

Як знайти файли, які займають найбільше місця на сервері

Адміністрування

7 хв.


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

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

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

У цій короткій статті ми наведемо кілька способів, які допомагають знайти головних «пожирачів» дискового простору на Linux-сервері та з’ясувати, які файли займають найбільше місця. Поїхали!

 

 

 

 

Почніть із загальної оцінки стану диска

Шукати великі файли навмання - не найкраща ідея, і спочатку варто в загальних рисах зрозуміти, наскільки заповнені файлові системи та який розділ відчуває брак вільного місця.

Для цього виконайте команду:

df -h

Вона покаже розмір кожного розділу, обсяг зайнятого та вільного простору, а також відсоток використання диска у зручному для читання вигляді завдяки аргументу -h (від human). Нерідко виявляється, що проблема криється зовсім не в кореневому розділі /, а, наприклад, у /var, де накопичуються логи та дані додатків, або у /home, якщо на сервері працюють кілька користувачів і зберігають у своїх домашніх папках завантажені з мережі файли.

Якщо якийсь розділ заповнений майже повністю, то подальший пошук краще зосередити саме на ньому, причому не відкладаючи цю роботу на потім і не чекаючи, поки вільне місце закінчиться остаточно. Вже при заповненні диска на 90–95 % деякі служби, наприклад поштові сервери, бази даних або системи журналювання, можуть почати працювати з помилками або помітно сповільнити свою роботу.

 

 

 

 

Які каталоги займають найбільше місця

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

Для цього виконайте команду:

du -h --max-depth=1 /

Вона підрахує розмір кожного каталогу першого рівня. Найчастіше найбільше місця займають /var, /home, /opt, /srv або /tmp, хоча на конкретному сервері ситуація може виявитися зовсім іншою.

Коли ви знайшли підозрілий каталог, продовжуйте й заглиблюйтеся ще на один рівень. Наприклад, якщо найбільше місця займає /var, тоді виконайте команду:

du -h --max-depth=1 /var

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

 

Якщо каталогів занадто багато, то найзручніше буде відразу відсортувати їх за розміром:

du -h --max-depth=1 /var | sort -hr

Найоб’ємніші каталоги опиняться на початку списку, і вам не доведеться переглядати результати вручну, прокручуючи вивід.

 

Такий підхід особливо зручний під час роботи з VPS або віддаленим виділеним сервером через SSH, коли під рукою немає зручних графічних утиліт для аналізу використання диска.

 

 

 

 

Пошук найбільших файлів

Коли проблемний каталог виявлено, можна переходити до пошуку найбільших файлів у ньому, про які давно забули, але які інколи можуть займати десятки гігабайтів.

Для цього підійде команда:

find / -type f -size +500M

Вона знайде всі файли розміром понад 500 МБ. За потреби поріг легко змінити, вказавши, наприклад, +1G або +100M.

 

Якщо відомо, у якому каталозі чи розділі закінчується місце, а це ми з’ясували вище, то краще обмежити область пошуку саме цим каталогом:

find /var -type f -size +500M

Так команда виконається значно швидше, оскільки не буде обходити всю файлову систему.

 

Буває, що потрібен не просто список файлів, розмір яких перевищує певний, а рейтинг найважчих об’єктів. У цьому випадку допоможе комбінація find, du та sort:

find / -type f -exec du -h {} + | sort -hr | head -20

Ця команда виведе двадцять найбільших файлів на сервері. Зазвичай у цьому списку виявляються старі резервні копії баз даних, ISO-образи, архіви, дампи пам’яті, журнали додатків або інші файли, які давно перестали бути потрібними, але продовжують займати дисковий простір.

 

 

 

Коли весь простір займають журнали

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

Отже, спочатку варто перевірити, скільки місця займають усі журнали в каталозі /var/log:

du -sh /var/log/*

Якщо сервер використовує systemd, то корисно буде перевірити розмір системного журналу:

journalctl --disk-usage

Буває, що саме journald займає кілька гігабайтів, особливо на серверах із великою кількістю подій або увімкненим детальним логуванням.

 

Старі записи можна видалити, залишивши лише журнали за останні сім днів:

journalctl --vacuum-time=7d

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

 

 

 

 

Docker теж може непомітно заповнити диск

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

Перевірити, скільки місця займає кожен тип даних, допоможе команда:

docker system df

Вона покаже загальний обсяг, зайнятий образами, контейнерами, томами та кешем збірки.

 

Якщо непотрібні дані дійсно накопичилися, їх можна видалити:

docker system prune -a

!!!АЛЕ, з цією командою краще не поспішати. Перед очищенням перевірте, які об’єкти будуть видалені, особливо якщо ваш сервер використовується в робочому середовищі, адже часто старий образ виявляється єдиною можливістю швидко відкотити додаток після невдалого оновлення.

 

 

 

 

Зручні інструменти для аналізу

Стандартних утиліт Linux зазвичай цілком вистачає, щоб знайти причину нестачі місця. Але є програми, з якими ця робота стає помітно швидшою. І одна з найпопулярніших - це ncdu.

Після встановлення достатньо виконати:

ncdu /

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

Багато системних адміністраторів використовують ncdu майже щодня, оскільки коли потрібно швидко з’ясувати, куди зник вільний простір, такий інтерфейс виявляється зручнішим, ніж послідовний запуск du, find та sort.

 

 

 

Краще не доводити диск до переповнення

Одноразове очищення звільняє місце, але очевидно, що через деякий час проблема повториться, і причиною цього є постійне накопичення даних.

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

Не менш корисним є моніторинг вільного місця, щоб сервер заздалегідь надсилав повідомлення про те, що розділ заповнений, наприклад, на 80-85% - тоді часу на реагування буде достатньо, і вам не доведеться розбиратися з проблемою вже після того, як перестануть запускатися служби або база даних перейде в режим помилок. Для серверів, на яких працюють сайти, CRM, бази даних та інші важливі сервіси, такий підхід зазвичай виявляється набагато дешевшим за будь-яке аварійне очищення.

 

 

 

 

FAQ

Як часто варто перевіряти вільне місце на сервері?

На робочих серверах краще використовувати систему моніторингу, яка заздалегідь попередить про нестачу місця. Якщо її немає, то періодично перевіряйте стан дисків за допомогою df -h, особливо після оновлень та створення резервних копій. А періодичність залежить від інтенсивності використання сервера.

 

Чи можна просто видалити вміст /var/log?

Не варто. Деякі служби продовжують використовувати відкриті лог-файли. Найбезпечніше буде застосовувати logrotate або очищати журнали через journalctl.

 

Який інструмент найзручніше використовувати для пошуку великих файлів?

Для ручного аналізу чудово підходить ncdu. Але якщо потрібен пошук у скриптах або автоматизація, то зручніше використовувати find, du та sort.

 

Чому після видалення великого файлу вільне місце не звільнилося?

Швидше за все, файл досі відкритий якимось процесом. Перевірити це можна командою lsof +L1. Зазвичай достатньо перезапустити відповідну службу.

 

Чи безпечно використовувати docker system prune -a?

Не завжди. Ця команда видаляє всі невикористовувані образи та інші дані Docker. Перед запуском переконайтеся, що вони не знадобляться для відкату або повторного розгортання.

 

Як уникнути постійного браку місця на диску?

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

 

 

 

Висновок

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

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

Якщо обсяг даних постійно зростає, то при виборі VPS або виділеного сервера варто заздалегідь враховувати можливість розширення дискового простору. Це спростить масштабування інфраструктури та позбавить від термінового перенесення сервісів у найневідповідніший момент.

3v-Hosting Team

Автор

3v-Hosting Team

Команда 3v-Hosting складається з групи відданих своїй справі інженерів та операторів, які повністю присвятили себе створенню та підтримці основи наших сервісів. Щодня ми занурюємося у світ віртуальних та виділених серверів, займаючись усім, від розгортання та моніторингу до усунення реальних проблем, що виникають у виробничих середовищах. Більшість наших статей ґрунтуються на практичному досвіді, а не лише на теорії. Ми ділимося своїми думками щодо викликів, з якими стикаємося: перебоїв у роботі, помилок у налаштуваннях, складнощів мережевої взаємодії та архітектурних рішень, що впливають на стабільність і надійність. Наша місія проста - ми хочемо ділитися знаннями, які допоможуть вам керувати своїми проектами з меншою кількістю несподіванок та набагато більшою передбачуваністю.