Як безпечно очистити Linux-сервер без зупинки сервісів | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Як безпечно очистити Linux-сервер без зупинки сервісів

Рівень: Середній (production-системи)
Орієнтовний час: ~30 хвилин
Мета: Звільнити місце на диску Linux-сервера шляхом видалення невикористовуваних пакетів, старих ядер, застарілих журналів та кешованих файлів – без зупинки жодного із запущених сервісів.

Цей посібник передбачає SSH-доступ до production або production-подібного VPS. Не виконуйте команди наосліп на критичних системах без знімків стану (snapshot).

Вступ

З часом навіть мало використовуваний VPS накопичує «мертвий вантаж»: осиротілі пакети, застарілі ядра, гігабайти неротованих журналів і залишки кешу пакетного менеджера. Якщо не контролювати це, переповнений диск завалить ваш веб-сервер, порушить запис у базу даних і заповнить чергу пошти. Цей посібник з очищення Linux-системи проведе вас через безпечне очищення Linux-сервера – спершу перевірте використання диска, видаліть лише те, що безпечно видаляти, і переконайтеся, що ваші сервіси пережили процес. Кожна команда тут є безпечною для запуску на живому сервері без простоїв.

Що буде очищено

Категорія Приклади Типова економія
Невикористовувані пакети та залежності Осиротілі бібліотеки, замінені драйвери 100 МБ – 2 ГБ
Старі ядра Попередні версії ядра 200 МБ на ядро
Кеш пакетів Завантажені файли .deb / .rpm 500 МБ – 5 ГБ
Журнали journal Архіви журналів systemd 100 МБ – 10 ГБ
Ротовані файли журналів /var/log/*.gz, *.1 Змінюється

Передумови

Перш ніж почати, переконайтеся, що виконані такі умови:

  • Операційна система: Ubuntu 24.04/26.04 LTS, Debian 13 або AlmaLinux 10
  • Доступ: Права sudo або root до сервера через SSH
  • Необхідні знання: Впевнене використання терміналу Linux та базова навігація в командному рядку
  • Резервна копія: Завжди робіть знімок або резервну копію перед масовим видаленням пакетів на production-сервері. На INTROSERV ви можете замовити повну резервну копію безпосередньо з Клієнтської зони.

Info

Цей посібник з очищення Linux-системи охоплює як системи на базі APT (Ubuntu, Debian), так і системи на базі DNF/YUM (AlmaLinux, RHEL). Команди, що відрізняються між сімействами, показано окремо. Команди, однакові для всіх систем, показано один раз.

Не продовжуйте, якщо істинною є хоча б одна з наступних умов:

  • Розділ / заповнений більш ніж на 95% – ваша система, можливо, вже зазнає збоїв запису. Спершу усуньте безпосередню причину (знайдіть і вручну видаліть один великий файл).
  • Сервіси вже не працюють або поводяться неочікувано. Дослідіть першопричину перед очищенням, щоб не порушити роботу сервісів, від яких залежать Linux-системи.
  • У вас немає резервної копії або знімка. Спершу створіть її – на INTROSERV це займає менше 2 хвилин із Клієнтської зони.

Крок 1: Перевірте використання диска перед початком

Рівень ризику: НИЗЬКИЙ – Тільки команди читання. Нічого не змінюється.

Ніколи не прибирайте наосліп. Спочатку зрозумійте, що насправді займає місце.

1.1 Перевірте загальне використання диска

Запустіть df, щоб перевірити використання диска на рівні файлової системи:

df -h

Очікуваний вивід:

Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 34G 3.8G 90% / tmpfs 1.0G 0 1.0G 0% /dev/shm

Розділ / вище 80% використання – тривожний сигнал. Вище 95% – сервіси почнуть давати збої.

1.2 Знайдіть найбільших споживачів простору

Використовуйте du, щоб заглибитися в каталоги. Починайте з кореня і рухайтеся вниз:

sudo du -h --max-depth=1 / 2>/dev/null | sort -rh | head -20

Це показує 20 найбільших каталогів під /. Типові винуватці: /var/log, /var/cache, /usr та /home.

Звузьте пошук далі:

sudo du -h --max-depth=1 /var/log | sort -rh | head -10

1.3 Перевірте використання inode

Місце на диску – не єдине обмеження. Inode відстежують кількість файлів. Розділ може мати вільне місце, але вичерпати inode, що також призведе до збоїв запису.

df -i

Очікуваний вивід:

Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 2621440 210543 2410897 9% /

Якщо IUse% вище 80%, швидше за все, є каталог із десятками тисяч дрібних файлів – часто черга пошти, каталог сесій або кеш PHP. Використовуйте du --inodes, щоб знайти його:

sudo du --inodes -h --max-depth=2 /var | sort -rh | head -10

Tip

Вам слід перевіряти використання диска в Linux-системах, перш ніж продовжувати. На тарифах INTROSERV KVM VPS дискові квоти застосовуються як на рівні блоків, так і на рівні inode. Вичерпання будь-якого з них призводить до одного й того самого симптому: запис мовчки завершується невдачею, або сервіси повідомляють «no space left on device».

Крок 2: Видалення невикористовуваних пакетів і залежностей

Рівень ризику: СЕРЕДНІЙ – Видалення пакетів є оборотним через історію пакетного менеджера, але перегляньте список перед підтвердженням.

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

2.1 Ubuntu / Debian – apt autoremove

apt autoremove видаляє пакети, які були встановлені як залежності, але більше нікому не потрібні:

sudo apt autoremove --purge -y

Прапор --purge також видаляє залишкові конфігураційні файли. Без нього двійковий файл пакету видаляється, але конфігураційні файли залишаються на місці.

Очікуваний вивід:

The following packages will be REMOVED: libfoo1 libbar2 old-driver-utils ... 0 upgraded, 0 newly installed, 8 to remove and 0 not upgraded.

Info

apt autoremove – найбезпечніший спосіб видалити невикористовувані пакети в Linux, які менеджер залежностей вважає осиротілими. Він не видаляє пакети, які ви встановили вручну і якими більше не користуєтеся. Для них потрібна ручна перевірка за допомогою apt list --installed.

2.2 AlmaLinux / RHEL – dnf autoremove

sudo dnf autoremove -y

На старіших системах RHEL 7 / CentOS 7 використовуйте yum autoremove:

sudo yum autoremove -y

Warning

У системах сімейства RHEL команди dnf autoremove і yum autoremove агресивніші за свої аналоги в Debian. Вони можуть запропонувати видалити пакети, які виглядають невикористовуваними за графом залежностей, але все ще потрібні вашому додатку. Уважно перегляньте список видалення перед підтвердженням.

2.3 Очищення кешу пакетів

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

Ubuntu / Debian:

sudo apt clean

Це видаляє всі кешовані файли .deb з /var/cache/apt/archives/. Щоб видалити лише пакети, яких більше немає в репозиторії (застарілі версії):

sudo apt autoclean

AlmaLinux / RHEL:

sudo dnf clean all

Очікуваний вивід:

16 files removed

Tip

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

Крок 3: Видалення старих ядер

Рівень ризику: ВИСОКИЙ – Видалення неправильного ядра зробить сервер незавантажуваним після наступного перезавантаження. Завжди перевіряйте uname -r перед продовженням.

Кожне оновлення ядра залишає попередню версію на місці як страховку. Після підтвердження стабільності сервера на новому ядрі старі ядра безпечно видалити – кожне, як правило, звільняє 200–400 МБ.

3.1 Перевірте, яке ядро запущено

Ніколи не видаляйте ядро, у яке ви завантажилися:

uname -r

Очікуваний вивід:

5.15.0-105-generic

3.2 Перегляньте всі встановлені ядра

Ubuntu / Debian:

dpkg -l | grep linux-image | awk '{print $2}'

Очікуваний вивід:

linux-image-5.15.0-100-generic linux-image-5.15.0-105-generic linux-image-generic

Мета-пакет не можна видаляти – він відстежує поточне рекомендоване ядро:

  • Ubuntu: linux-image-generic
  • Debian: linux-image-amd64
  • AlmaLinux: Мета-пакет не використовується, натомість застосовується installonly_limit у dnf.

Видаляйте лише конкретні версіоновані пакети, які не є вашим поточним ядром.

AlmaLinux / RHEL:

rpm -q kernel

Очікуваний вивід:

kernel-5.14.0-284.11.1.el9_2.x86_64 kernel-5.14.0-362.8.1.el9_3.x86_64

3.3 Видалення старих ядер

Ubuntu / Debian – автоматичний метод:

apt autoremove з Кроку 2 вже обробляє старі ядра в Ubuntu, якщо встановлено linux-image-generic. Ви також можете вказати їх явно. Замініть версію на ту, яку хочете видалити (не поточну):

sudo apt remove --purge linux-image-5.15.0-100-generic -y

AlmaLinux / RHEL:

Пакетний менеджер dnf зберігає налаштовувану кількість старих ядер. Встановіть ліміт у /etc/dnf/dnf.conf:

sudo nano /etc/dnf/dnf.conf

Додайте або оновіть рядок:

installonly_limit=2

Потім запустіть:

sudo dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q)

Це видаляє всі ядра, крім двох найновіших.

Warning

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

Крок 4: Очищення журналів journal

Рівень ризику: НИЗЬКИЙ – Видаляються лише архівні записи журналу. Запущені сервіси не зачіпаються.

systemd-journald збирає журнали від кожного сервісу в системі. За замовчуванням він може рости без обмежень, поки не досягне ліміту диска – або поки вільне місце на диску не досягне нуля.

4.1 Перевірте поточний розмір журналу

journalctl --disk-usage

Очікуваний вивід:

Archived and active journals take up 2.3G in the filesystem.

4.2 Обрізання журналу

Щоб зберегти лише журнали за останні 7 днів:

sudo journalctl --vacuum-time=7d

Щоб зберегти лише останні 500 МБ:

sudo journalctl --vacuum-size=500M

Очікуваний вивід:

Deleted archived journal /var/log/journal/.../[email protected] (64.0M). Vacuuming done, freed 1.8G of archived journals from /var/log/journal/.

4.3 Запобігання майбутньому зростанню журналу

Створіть файл конфігурації drop-in, щоб постійно обмежити розмір журналу (на AlmaLinux 10 основний конфігураційний файл за замовчуванням відсутній у /etc/, тому це стандартний підхід):

sudo mkdir -p /etc/systemd/journald.conf.d sudo tee /etc/systemd/journald.conf.d/99-size.conf <<EOF [Journal] SystemMaxUse=500M MaxRetentionSec=30day EOF

Застосуйте зміни:

sudo systemctl restart systemd-journald

Info

Очищення журналів journal у Linux-системах не зачіпає журнали додатків у /var/log/ – ними керує logrotate. Journal охоплює лише нативні сервіси systemd, які пишуть у журнал напряму (наприклад, sshd, nginx при використанні systemd-юніта unit, cron тощо).

Крок 5: Очищення ротованих і старих файлів журналів

Рівень ризику: СЕРЕДНІЙ – Видаляються лише стиснуті архіви. Не чіпайте файли без розширення .gz або числового суфіксу.

Журнали додатків у /var/log/ керуються logrotate. Зазвичай logrotate зберігає встановлену кількість ротованих копій і автоматично стискає їх. Якщо logrotate був неправильно налаштований або не запускався, ви можете знайти великі накопичення файлів .gz, .1, .2.

5.1 Знайдіть великі файли журналів

find /var/log -type f -name "*.gz" -o -name "*.log" | xargs du -sh 2>/dev/null | sort -rh | head -20

Або простіше:

sudo du -h /var/log | sort -rh | head -20

5.2 Видалення старих стиснутих архівів журналів

Стиснуті ротовані журнали (.gz) безпечно видаляти. Це архіви вже закритих файлів журналів.

Спочатку перегляньте, що буде видалено – запустіть без -delete, щоб побачити список:

sudo find /var/log -name "*.gz" -mtime +30

Якщо вивід виглядає правильно, виконайте фактичне видалення:

sudo find /var/log -name "*.gz" -mtime +30 -delete

Це видаляє архіви журналів .gz старші за 30 днів.

Warning

Не видаляйте файли журналів, у які йде активний запис – ті, що не мають суфікса ротації або розширення .gz. Видалення /var/log/nginx/access.log під час роботи nginx не заважає nginx продовжувати запис в уже видалений inode. Місце не звільняється, доки nginx не буде перезавантажено. Натомість безпечно обнуліть файл: sudo truncate -s 0 /var/log/nginx/access.log.

5.3 Перевірте правильність налаштування logrotate

Перевірте, які сервіси мають конфігурації logrotate:

ls /etc/logrotate.d/

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

sudo logrotate -d /etc/logrotate.conf

Прапор -d – це пробний запуск: нічого не змінюється, але ви побачите, що саме відбулося б. Якщо сервіс відсутній у /etc/logrotate.d/, створіть для нього конфігурацію. Дивіться посібник з ротації журналів для повних інструкцій з налаштування logrotate.

Крок 6: Очищення тимчасових файлів

Рівень ризику: СЕРЕДНІЙ – PHP-сесії та кеші додатків впливають на живих користувачів. Перегляньте перед видаленням.

6.1 Очищення /tmp

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

du -sh /tmp

Щоб видалити файли старші за 7 днів, спочатку перегляньте список:

sudo find /tmp -type f -mtime +7

Якщо список виглядає безпечним, виконайте видалення:

sudo find /tmp -type f -mtime +7 -delete

6.2 Очищення кешів додатків

Багато додатків записують власні кеші. Перевірте ці поширені розташування (зверніть увагу: переконайтеся, що ці каталоги існують у вашій системі; на чистій системі вони можуть бути відсутні, і ви побачите помилку «No such file or directory»):

# PHP-файли сесій (часто забуваються, якщо встановлено) sudo du -sh /var/lib/php/sessions/ # Кеші pip / Python (якщо запущено від root та встановлено) sudo du -sh /root/.cache/pip/ # Кеш npm (якщо node встановлено на рівні системи) sudo du -sh /root/.npm/

Ці каталоги безпечно очищати, якщо додаток активно їх не використовує.

Tip

Перед очищенням кешу додатка переконайтеся, що сервіс не перебуває посеред транзакції. Очищення каталогу PHP-сесій, поки користувачі авторизовані, призведе до виходу всіх із системи.

Крок 7: Перевірка роботи сервісів

Рівень ризику: НИЗЬКИЙ – Перевірка тільки для читання. Запускайте після кожного кроку, а не лише в кінці.

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

7.1 Перевірте статус критичних сервісів

Перевіряйте лише ті сервіси, які фактично встановлені на вашому сервері (на чистій системі перевірка nginx або mysql поверне Unit not found).

Ubuntu / Debian:

systemctl status nginx systemctl status mysql systemctl status ssh

AlmaLinux / RHEL:

systemctl status nginx systemctl status mysqld systemctl status sshd

Кожен має показувати Active: active (running). Якщо будь-який показує failed або inactive, перевірте його журнали:

journalctl -u nginx --since "10 minutes ago"

7.2 Підтвердьте покращення використання диска

df -h

Порівняйте стовпець Use% з тим, що ви бачили в Кроці 1. Зміна повинна відображати звільнений простір.

7.3 Протестуйте ваш додаток

Якщо ви запускаєте веб-сервер, надішліть тестовий запит:

curl -I http://localhost

Очікуваний вивід:

HTTP/1.1 200 OK Server: nginx/1.24.0

Відповідь 200 OK підтверджує, що nginx нормально обслуговує трафік.

Усунення несправностей

`df` не показує покращення після видалення пакетів

Видалення пакетів звільняє місце негайно. Якщо df не змінюється, файли все ще відкриті. Знайдіть відкриті, але видалені файли:

sudo lsof | grep deleted

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

`apt autoremove` хоче видалити щось важливе

Уважно прочитайте список. Якщо ви бачите назву пакета, який є залежністю запущеного сервісу, натисніть N і розберіться. Запустіть apt-cache rdepends <package>, щоб побачити, що від нього залежить.

`journalctl --vacuum-time` не дає жодного результату

Журнал уже може бути меншим за цільовий розмір. Перевірте за допомогою journalctl --disk-usage. Також переконайтеся, що журнал є постійним: перевірте наявність /var/log/journal/. Якщо існує лише /run/log/journal/, журнал зберігається в RAM і автоматично очищається при перезавантаженні.

Сервіс не працює після `apt autoremove`

Запустіть systemctl status <service> і перевірте помилку. Якщо було видалено спільну бібліотеку, перевстановіть пакет, що її надає:

sudo apt install --fix-broken

Закінчуються inode незважаючи на вільне місце на диску

Знайдіть каталог з найбільшою кількістю файлів:

find / -xdev -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -10

Типові винуватці: черги пошти у /var/spool/mail, PHP-сесії у /var/lib/php/sessions або задача cron, що некероване створює тимчасові файли.

Відкат

Більшість операцій очищення незворотні – видалені файли зникають. Це робить крок резервного копіювання в розділі «Передумови» обов'язковим, а не опціональним.

Для видалення пакетів зокрема ви можете перевстановити видалене:

Ubuntu / Debian:

sudo apt install <package-name>

AlmaLinux / RHEL:

sudo dnf install <package-name>

Щоб переглянути історію того, що було видалено в поточній сесії:

Ubuntu / Debian:

cat /var/log/dpkg.log | grep "^$(date +%Y-%m-%d)" | grep " remove "

AlmaLinux / RHEL:

sudo dnf history list sudo dnf history undo last

dnf history undo last перевстановлює пакети, видалені в останній транзакції – корисний інструмент відновлення, якщо autoremove зайшов далі, ніж передбачалося.

Висновок

Очищення Linux-сервера без простоїв зводиться до трьох речей: спочатку виміряйте, видаляйте лише те, що система підтверджує як невикористовуване, і перевіряйте сервіси після кожного кроку. Запустіть df -h і du, перш ніж щось чіпати. Використовуйте apt autoremove / yum autoremove для невикористовуваних пакетів, journalctl --vacuum-time для очищення журналів journal і find /var/log -name "*.gz" для старих ротованих архівів. Видаляйте старі ядра лише після підтвердження, що uname -r відповідає тому, що ви залишаєте. І завжди перевіряйте systemctl status перед закриттям термінала.

Для VPS на INTROSERV підтримання використання / нижче 80% є практичною метою – це залишає місце для сплесків журналів і оновлень пакетів без аварійного втручання. Якщо місце на диску є постійною проблемою, розгляньте можливість збільшення сховища VPS безпосередньо з Клієнтської зони INTROSERV.

Версія документа: 1.0
Останнє оновлення: Травень 2026
Власник: Команда технічної документації

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA