Kako sigurno očistiti Linux poslužitelj bez prekida rada usluga
Razina: Srednja (produkcijski sustavi)
Procijenjeno vrijeme: ~30 minuta
Cilj: Osloboditi prostor na disku na Linux poslužitelju uklanjanjem neiskorištenih paketa, starih jezgri, zastarjelih dnevnika i predmemoriranih datoteka – bez zaustavljanja bilo kojih aktivnih usluga.
Ovaj vodič pretpostavlja SSH pristup produkcijskom ili produkcijskom sličnom VPS-u. Nemojte ga pokretati naslijepo na kritičnim sustavima bez snimaka stanja.
Uvod
S vremenom čak i malo korišten VPS nakuplja suvišan balast: siročad paketa, zastarjele jezgre, gigabajte neobrađenih dnevnika i ostatke predmemorije paketa. Ako se to ne provjeri, puni disk će srušiti vaš web poslužitelj, ometati pisanje u bazu podataka i napuniti red za poštu. Ovaj vodič za čišćenje Linux sustava vodi vas kroz sigurno čišćenje Linux poslužitelja – prvo provjerom iskorištenosti diska, uklanjanjem onoga što je sigurno ukloniti i provjerom jesu li vaše usluge preživjele postupak. Svaku ovdje navedenu naredbu možete sigurno izvršiti na aktivnom poslužitelju bez zastoja.
Što ćete očistiti
| Kategorija | Primjeri | Tipične uštede |
|---|---|---|
| Neiskorišteni paketi i ovisnosti | Siročine biblioteke, zamijenjeni upravljački programi | 100 MB - 2 GB |
| Stari kerneli | Prethodne verzije jezgre | 200 MB po jezgri |
| Kesh paketa | Preuzete .deb / .rpm datoteke | 500 MB - 5 GB |
| Zapisnici Journala | Arhive dnevnika systemd-a | 100 MB - 10 GB |
| Rotirane datoteke dnevnika | /var/log/*.gz, *.1 | Varira |
Preduvjeti
Prije nego što započnete, provjerite ispunjavaju li se sljedeći uvjeti:
- Operativni sustav: Ubuntu 24.04/26.04 LTS, Debian 13 ili AlmaLinux 10
- Pristup: sudo ili root pristup poslužitelju putem SSH-a
- Potrebno znanje: Sigurno korištenje Linux terminala i osnovna navigacija kroz naredbeni redak
- Sigurnosna kopija: Uvijek napravite snimku ili sigurnosnu kopiju prije masovnog uklanjanja paketa na produkcijskom poslužitelju. Na INTROSERV-u možete naručiti potpunu sigurnosnu kopiju izravno iz korisničkog područja.
Ovaj vodič za čišćenje Linux sustava pokriva i sustave temeljene na APT-u (Ubuntu, Debian) i sustave temeljene na DNF/YUM-u (AlmaLinux, RHEL). Naredbe koje se razlikuju među obiteljima prikazane su odvojeno. Naredbe koje su identične na svim sustavima prikazane su samo jednom.
Nemojte nastaviti ako je bilo što od sljedećeg točno:
/particija je više od 95 % puna – vaš sustav možda već ima problema s upisima. Prvo otklonite neposredni uzrok (ručno pronađite i izbrišite jednu veliku datoteku).- Usluge su već neispravne ili se ponašaju neočekivano. Istražite osnovni uzrok prije čišćenja kako biste izbjegli prekidanje usluga na koje se Linux sustavi oslanjaju.
- Nemate sigurnosnu kopiju ili snimku. Prvo napravite jednu – na INTROSERV-u to traje manje od 2 minute iz korisničkog sučelja.
Korak 1: Provjerite iskorištenost diska prije početka
Razina rizika: NISKA - Samo naredbe za čitanje. Ništa se ne mijenja.
Nikada ne čistite naslijepo. Prvo shvatite što zapravo zauzima prostor.
1.1 Provjerite ukupnu iskorištenost diska
Pokrenite df za provjeru iskorištenosti diska na razini datotečnog sustava:
df -h
Očekivani izlaz:
Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 34G 3.8G 90% / tmpfs 1.0G 0 1.0G 0% /dev/shm
Particija / iznad 80% iskorištenosti je znak upozorenja. Iznad 95% usluge će početi otkazivati.
1.2 Pronađite najveće potrošače prostora
Koristite du za detaljniju analizu direktorija. Počnite od korijena i radite prema dolje:
sudo du -h --max-depth=1 / 2>/dev/null | sort -rh | head -20
Ovo prikazuje 20 najvećih direktorija ispod /. Uobičajeni krivci su /var/log, /var/cache, /usr i /home.
Užite pretragu dalje:
sudo du -h --max-depth=1 /var/log | sort -rh | head -10
1.3 Provjerite upotrebu inoda
Diskovni prostor nije jedino ograničenje. Inodi prate broj datoteka. Podjela može imati slobodnog prostora, ali može ostati bez inoda, što će također uzrokovati neuspjeh zapisa.
df -i
Očekivani izlaz:
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 2621440 210543 2410897 9% /
Ako je IUse% iznad 80%, vjerojatno imate direktorij s desecima tisuća malih datoteka – često red za poštu, direktorij sesije ili PHP predmemoriju. Koristite du --inodes da ga pronađete:
sudo du --inodes -h --max-depth=2 /var | sort -rh | head -10
Prije nastavka trebali biste provjeriti iskorištenost diska koju prikazuju Linux sustavi. Na INTROSERV KVM VPS planovima, kvote diska primjenjuju se i na razini blokova i inoda. Iscrpljivanje bilo kojeg od njih uzrokovat će isti simptom: pisanje će tiho neuspjeti ili će usluge izvijestiti o poruci "no space left on device".
Korak 2: Uklonite neiskorištene pakete i ovisnosti
Razine rizika: SREDNJA - Uklanjanje paketa je reverzibilno putem povijesti upravitelja paketa, ali pregledajte popis prije potvrde.
Neiskorišteni paketi su najsigurnija stavka za čišćenje. Oni stoje na disku, nemaju aktivnih procesa i u nekim slučajevima sadrže nepopravljive ranjivosti (CVE).
2.1 Ubuntu / Debian - apt autoremove
apt autoremove uklanja pakete koji su instalirani kao ovisnosti, ali više nikome ne trebaju:
sudo apt autoremove --purge -y
Zastavica --purge također uklanja preostale konfiguracijske datoteke. Bez nje, binarna datoteka paketa je uklonjena, ali konfiguracijske datoteke ostaju na mjestu.
Očekivani izlaz:
The following packages will be REMOVED: libfoo1 libbar2 old-driver-utils ... 0 upgraded, 0 newly installed, 8 to remove and 0 not upgraded.
apt autoremove je najsigurniji način za uklanjanje neiskorištenih paketa za koje upravljači ovisnosti u Linuxu znaju da su siročad. Ne uklanja pakete koje ste ručno instalirali, a koje više ne koristite. Za njih je potreban ručni pregled pomoću naredbe apt list --installed.
2.2 AlmaLinux / RHEL - dnf autoremove
sudo dnf autoremove -y
Na starijim sustavima RHEL 7 / CentOS 7 koristite yum autoremove:
sudo yum autoremove -y
Na sustavima iz obitelji RHEL, dnf autoremove i yum autoremove agresivniji su od svojih Debianskih pandana. Mogu predložiti uklanjanje paketa koji se u grafu ovisnosti čine neiskorištenima, ali su i dalje potrebni vašoj aplikaciji. Pažljivo pregledajte popis za uklanjanje prije potvrde.
2.3 Čišćenje keša paketa
Nakon ažuriranja i instalacija, upravitelji paketa lokalno pohranjuju preuzete arhivske datoteke. Sigurno ih je izbrisati nakon završetka instalacije.
Ubuntu / Debian:
sudo apt clean
Ovo uklanja sve keširane .deb datoteke iz /var/cache/apt/archives/. Da biste uklonili samo pakete koji više nisu dostupni u repozitoriju (nadjašane verzije):
sudo apt autoclean
AlmaLinux / RHEL:
sudo dnf clean all
Očekivani izlaz:
16 files removed
apt clean je uvijek siguran. On uklanja samo predmemoriju preuzimanja. Ako kasnije trebate ponovno instalirati paket, on će biti ponovno preuzet iz repozitorija.
Korak 3: Izbrišite stare kernele
Razine rizika: VISOKA - Uklanjanje pogrešnog kernela ostavlja poslužitelj nepokretnim nakon sljedećeg ponovnog pokretanja. Uvijek provjerite uname -r prije nastavka.
Svaka nadogradnja jezgre ostavlja prethodnu verziju na mjestu kao sigurnosnu mrežu. Nakon što potvrdite da je vaš poslužitelj stabilan na novoj jezgri, stari jezgri se mogu sigurno ukloniti – svaka obično oslobađa 200–400 MB.
3.1 Provjerite koji se kernel pokreće
Nikada ne uklanjajte kernel na kojem ste trenutno pokrenuti:
uname -r
Očekivani izlaz:
5.15.0-105-generic
3.2 Popis svih instaliranih kernela
Ubuntu / Debian:
dpkg -l | grep linux-image | awk '{print $2}'
Očekivani izlaz:
linux-image-5.15.0-100-generic linux-image-5.15.0-105-generic linux-image-generic
Meta-paket se ne smije ukloniti - on prati trenutni preporučeni kernel:
- Ubuntu:
linux-image-generic - Debian:
linux-image-amd64 - AlmaLinux: Ne koristi se meta-paket, oslanja se na
installonly_limitudnf-u.
Uklonite samo specifične pakete s verzijom koji nisu vaš trenutni kernel.
AlmaLinux / RHEL:
rpm -q kernel
Očekivani izlaz:
kernel-5.14.0-284.11.1.el9_2.x86_64 kernel-5.14.0-362.8.1.el9_3.x86_64
3.3 Uklonite stare kernele
Ubuntu / Debian - automatska metoda:
apt autoremove iz koraka 2 već obrađuje stare kernele na Ubuntu ako je instaliran linux-image-generic. Možete ih također eksplicitno ciljati. Zamijenite verziju onom koju želite ukloniti (ne onom koja je trenutno u upotrebi):
sudo apt remove --purge linux-image-5.15.0-100-generic -y
AlmaLinux / RHEL:
Upravitelj paketa dnf zadržava konfigurabilan broj starih jezgri. Postavite ograničenje u /etc/dnf/dnf.conf:
sudo nano /etc/dnf/dnf.conf
Dodajte ili ažurirajte redak:
installonly_limit=2
Zatim pokrenite:
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q)
Ovo uklanja sve osim dva najnovija kernela.
Potvrdite da uname -r odgovara jednom od kernela koje zadržavate prije nego što izbrišete stare kernele koji su još uvijek potrebni Linux poslužiteljima. Uklanjanje aktivnog kernela neće narušiti rad sustava, ali nakon sljedećeg ponovnog pokretanja nećete imati na što se pokrenuti.
Korak 4: Očistite dnevnike journala
Razine rizika: NISKA - Uklanja samo arhivirane zapise dnevnika. Pokrenute usluge nisu pogođene.
systemd-journald prikuplja dnevnike iz svake usluge na sustavu. Po zadanome može rasti bez ograničenja sve dok ne dosegne ograničenje prostora na disku – ili dok vam prostor na disku ne ponestane.
4.1 Provjerite trenutnu veličinu journala
journalctl --disk-usage
Očekivani izlaz:
Archived and active journals take up 2.3G in the filesystem.
4.2 Skratite journal
Za zadržavanje samo posljednjih 7 dana dnevnika:
sudo journalctl --vacuum-time=7d
Da biste sačuvali samo posljednjih 500 MB:
sudo journalctl --vacuum-size=500M
Očekivani ishod:
Deleted archived journal /var/log/journal/.../[email protected] (64.0M). Vacuuming done, freed 1.8G of archived journals from /var/log/journal/.
4.3 Spriječiti budući rast dnevnika
Napravite konfiguracijsku datoteku koja će trajno ograničiti dnevnik (na AlmaLinuxu 10 glavna konfiguracijska datoteka ionako nije prisutna u /etc/ po zadanom, što čini ovaj pristup standardnim):
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
Primijenite promjenu:
sudo systemctl restart systemd-journald
Tijekom čišćenja dnevnika sustava (journal logs) Linux sustavi ne utječu na dnevnike aplikacija u /var/log/ – njima upravlja logrotate. Journal obuhvaća samo sustavne usluge (services) nativne za systemd koje izravno pišu u journal (poput sshd-a, nginx-a pri korištenju systemd jedinice, cron-a itd.).
Korak 5: Očistite rotirane i stare dnevničke datoteke
Razina rizika: SREDNJA - Brišu se samo komprimirane arhive. Ne dirajte datoteke bez ekstenzije .gz ili numeričke oznake.
Zapise aplikacija u /var/log/ upravlja logrotate. Normalno, logrotate zadržava određeni broj rotiranih kopija i automatski ih komprimira. Ako je logrotate bio pogrešno konfiguriran ili nije radio, možete pronaći velike nakupine datoteka s ekstenzijama .gz, .1, .2.
5.1 Pronalaženje velikih log datoteka
find /var/log -type f -name "*.gz" -o -name "*.log" | xargs du -sh 2>/dev/null | sort -rh | head -20
Ili jednostavnije:
sudo du -h /var/log | sort -rh | head -20
5.2 Izbrišite stare komprimirane arhive dnevnika
Komprimirane rotirane log datoteke (.gz) sigurno je izbrisati. To su arhive već zatvorenih log datoteka.
Prvo, pregledajte što će biti izbrisano – pokrenite naredbu bez opcije -delete kako biste vidjeli popis:
sudo find /var/log -name "*.gz" -mtime +30
Ako izlaz izgleda ispravno, pokrenite stvarno brisanje:
sudo find /var/log -name "*.gz" -mtime +30 -delete
Ovo briše .gz arhive dnevnika starije od 30 dana.
Nemojte brisati aktivne datoteke dnevnika – one bez sufiksa za rotaciju ili ekstenzije .gz. Brisanje datoteke /var/log/nginx/access.log dok je nginx pokrenut ne sprječava nginx da piše u upravo izbrisan inode. Prostor se ne oslobađa dok se nginx ne ponovno učita. Umjesto toga, sigurno je skratite: sudo truncate -s 0 /var/log/nginx/access.log.
5.3 Provjerite je li logrotate ispravno konfiguriran
Provjerite koji servisi imaju konfiguracije za logrotate:
ls /etc/logrotate.d/
Pokrenite logrotate ručno u načinu otklanjanja pogrešaka (debug) kako biste potvrdili da radi bez pogrešaka:
sudo logrotate -d /etc/logrotate.conf
Zastavica -d je probni rad – ništa se ne mijenja, ali vidjet ćete točno što bi se dogodilo. Ako neka usluga nedostaje u /etc/logrotate.d/, stvorite konfiguraciju za nju. Pogledajte vodič za rotaciju log datoteka za potpune upute za konfiguraciju logrotatea.
Korak 6: Ispraznite privremene datoteke
Razine rizika: SREDNJA - PHP sesije i predmemorije aplikacija utječu na korisnike koji su trenutno aktivni. Pogledajte sadržaj prije brisanja.
6.1 Očistite /tmp
Većina distribucija briše/tmp prilikom ponovnog pokretanja. Ako je vaš poslužitelj radio mjesecima, možda je nakupio velike privremene datoteke:
du -sh /tmp
Da biste uklonili datoteke starije od 7 dana, prvo ih pregledajte:
sudo find /tmp -type f -mtime +7
Ako popis izgleda siguran, pokrenite brisanje:
sudo find /tmp -type f -mtime +7 -delete
6.2 Čišćenje predmemorija aplikacija
Mnoge aplikacije pišu vlastite predmemorije. Provjerite ove uobičajene lokacije (napomena: provjerite postoje li ovi direktoriji na vašem sustavu; na čistom sustavu možda neće biti prisutni i vidjet ćete pogrešku "Ne postoji takva datoteka ili direktorij"):
# PHP session files (often forgotten, if installed) sudo du -sh /var/lib/php/sessions/ # Pip / Python package caches (if running as root and installed) sudo du -sh /root/.cache/pip/ # npm cache (if node is installed system-wide) sudo du -sh /root/.npm/
Ove direktorije je sigurno izbrisati ako aplikacija ne koristi njihovu sadržajnu memoriju.
Prije čišćenja predmemorije aplikacije, provjerite da usluga nije usred transakcije. Praznjenje direktorija PHP sesije dok su korisnici prijavljeni odjavit će sve korisnike.
Korak 7: Provjerite jesu li usluge i dalje aktivne
Razina rizika: NISKA - provjera samo za čitanje. Pokrenite ovo nakon svakog koraka, a ne samo na kraju.
Nakon svakog čišćenja provjerite jesu li vaše usluge preživjele. Učinite to prije zatvaranja SSH sesije.
7.1 Provjerite status kritičnih usluga
Provjerite samo usluge koje su zapravo instalirane na vašem poslužitelju (na čistom sustavu provjera nginx ili mysql vratit će " 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
Svaki bi trebao prikazivati Active: active (running). Ako se bilo koji prikaže kao failed ili inactive, provjerite njegove logove:
journalctl -u nginx --since "10 minutes ago"
7.2 Potvrdite da se korištenje diska poboljšalo
df -h
Usporedite stupac Use% s onim što ste vidjeli u koraku 1. Promjena bi trebala odražavati prostor koji ste oslobodili.
7.3 Testirajte svoju aplikaciju
Ako pokrećete web poslužitelj, pošaljite testni zahtjev:
curl -I http://localhost
Očekivani izlaz:
HTTP/1.1 200 OK Server: nginx/1.24.0
Kod 200 OK potvrđuje da nginx normalno poslužuje promet.
Rješavanje problema
`df` ne pokazuje poboljšanje nakon uklanjanja paketa
Uklanjanje paketa odmah oslobađa prostor. Ako se df ne promijeni, datoteke su još uvijek otvorene. Pronađite otvorene, ali izbrisane datoteke:
sudo lsof | grep deleted
Ponovno pokrenite uslugu koja drži datoteku otvorenom i prostor će biti vraćen.
`apt autoremove` želi ukloniti nešto što izgleda važno
Pažljivo pročitajte popis. Ako vidite naziv paketa koji prepoznajete kao ovisnost pokrenute usluge, pritisnite N i istražite. Pokrenite apt-cache rdepends <paket> da biste vidjeli što ovisi o njemu.
`journalctl --vacuum-time` ne mijenja ništa
Dnevnik možda već jest manji od cilja. Provjerite pomoću journalctl --disk-usage. Također potvrdite da je dnevnik trajan: provjerite postoji li /var/log/journal /. Ako postoji samo /run/log/journal/, dnevnik se pohranjuje u RAM-u i automatski se briše pri ponovnom pokretanju.
Usluga ne uspijeva nakon `apt autoremove`
Pokrenite systemctl status <service> i provjerite pogrešku. Ako je uklonjena zajednička biblioteka, ponovno instalirajte paket koji je osigurava:
sudo apt install --fix-broken
Ponestaje inoda unatoč slobodnom prostoru na disku
Pronađite direktorij s najviše datoteka:
find / -xdev -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -10
Uobičajeni uzročnici: mail redovi u /var/spool/mail, PHP sesije u /var/lib/php/sessions ili nekontrolirani cron zadatak koji stvara privremene datoteke.
Povrat
Većina operacija čišćenja nije reverzibilna – izbrisane datoteke su zauvijek izgubljene. Zbog toga je korak izrade sigurnosne kopije u preduvjetima obavezan.
Za uklanjanje paketa konkretno, možete ponovno instalirati ono što je uklonjeno:
Ubuntu / Debian:
sudo apt install <package-name>
AlmaLinux / RHEL:
sudo dnf install <package-name>
Za pregled povijesti onoga što je uklonjeno u trenutačnoj sesiji:
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 vraća pakete uklonjene u najnovijoj transakciji – koristan alat za oporavak ako je automatsko uklanjanje otišlo dalje od zamišljenog.
Zaključak
Čišćenje Linux poslužitelja bez zastoja svodi se na tri stvari: prvo izmjerite, uklonite samo ono što sustav potvrdi da se ne koristi i provjerite usluge nakon svakog koraka. Pokrenite df -h i du prije nego što išta dirnete. Koristite apt autoremove / yum autoremove za neiskorištene pakete, journalctl --vacuum-time za čišćenje dnevničkih zapisa i find /var/log -name "*.gz" za stare rotirane arhive. Starije kernele uklanjajte tek nakon što potvrdite da se uname -r podudara s onim što zadržavate. I uvijek provjerite systemctl status prije nego što zatvorite terminal.
Za INTROSERV VPS, održavanje / ispod 80 % iskorištenosti praktični je cilj – ostavlja prostor za nagle poraste dnevnika i ažuriranja paketa bez hitne intervencije. Ako je prostor na disku ponavljajući problem, razmislite o promjeni veličine pohrane vašeg VPS-a izravno iz INTROSERV klijentskog područja.
Verzija dokumenta: 1.0
Zadnje ažuriranje: svibanj 2026.
Vlasnik: Tim za tehničku dokumentaciju