Kako varno očistiti strežnik Linux, ne da bi motili delovanje storitev
Raven: Srednje napredna (proizvodni sistemi)
Predviden čas: ~30 minut
Cilj: Osvoboditi prostor na disku na strežniku Linux z odstranitvijo neuporabljanih paketov, starih jedr, zastarelih dnevnikov in datotek v predpomnilniku – brez prekinitve delovanja katerih koli storitev.
Ta vodnik predpostavlja dostop prek SSH do produkcijskega ali produkcijsko podobnega VPS-a. Ne izvajajte tega slepo na kritičnih sistemih brez varnostnih posnetkov.
Uvod
Sčasoma se tudi na redko uporabljanem VPS-ju nabere nepotrebna obremenitev: osiroteli paketi, zastarela jedra, gigabajti dnevnikov, ki niso bili izbrisani, in ostanki predpomnilnika paketov. Če tega ne preverite, bo poln disk povzročil sesutje vašega spletnega strežnika, prekinil pisanje v bazo podatkov in napolnil vašo poštno vrsto. Ta vodnik za čiščenje sistema Linux vas vodi skozi varno čiščenje strežnika Linux – najprej preverite porabo prostora na disku, odstranite tisto, kar je varno odstraniti, in preverite, ali so vaše storitve preživele proces. Vsak ukaz v tem vodniku je varen za izvajanje na aktivnem strežniku brez izpadov.
Kaj boste počistili
| Kategorija | Primeri | Tipični prihranki |
|---|---|---|
| Neuporabljeni paketi in odvisnosti | Osamljene knjižnice, zamenjani gonilniki | 100 MB – 2 GB |
| Stara jedra | Prejšnje različice jedra | 200 MB na jedro |
| Predpomnilnik paketov | Prenesene datoteke .deb / .rpm | 500 MB – 5 GB |
| Dnevniški zapisi | arhivi dnevnikov systemd | 100 MB – 10 GB |
| Zamenjane dnevniške datoteke | /var/log/*.gz, *.1 | različno |
Predpogoji
Preden začnete, se prepričajte, da so izpolnjeni naslednji pogoji:
- Operacijski sistem: Ubuntu 24.04/26.04 LTS, Debian 13 ali AlmaLinux 10
- Dostop: dostop sudo ali root do strežnika prek SSH
- Potrebno znanje: samozavestna uporaba terminala Linux in osnovno upravljanje prek ukazne vrstice
- Varnostna kopija: Pred množičnim odstranjevanjem paketov na produkcijskem strežniku vedno naredite posnetek ali varnostno kopijo. Na INTROSERV-u lahko naročite popolno varnostno kopijo neposredno iz uporabniškega območja.
Ta vodnik za čiščenje sistema Linux zajema tako sisteme, ki temeljijo na APT (Ubuntu, Debian), kot tudi sisteme, ki temeljijo na DNF/YUM (AlmaLinux, RHEL). Ukazi, ki se med družinami razlikujejo, so prikazani ločeno. Ukazi, ki so na vseh sistemih enaki, so prikazani enkrat.
Ne nadaljujte, če velja katero koli od naslednjega:
- Particija
/je zapolnjena več kot 95 % – vaš sistem morda že ne more več zapisovati. Najprej odpravite neposredni vzrok (ročno poiščite in izbrišite eno veliko datoteko). - Storitve so že izklopljene ali delujejo nepričakovano. Pred čiščenjem ugotovite glavni vzrok, da ne bi motili delovanja storitev, od katerih so Linux sistemi odvisni.
- Nimate varnostne kopije ali posnetka stanja. Najprej jo naredite – na INTROSERV to traja manj kot 2 minuti iz uporabniškega območja.
Korak 1: Preverite porabo prostora na disku, preden začnete
Raven tveganja: NIZKA – Uporabljajo se le ukazi za branje. Nič se ne spreminja.
Nikoli ne čistite na slepo. Najprej ugotovite, kaj dejansko zaseda prostor.
1.1 Preverite skupno porabo prostora na disku
Za preverjanje porabe prostora na ravni datotečnega sistema zaženite ukaz df:
df -h
Pričakovani izpis:
Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 34G 3.8G 90% / tmpfs 1.0G 0 1.0G 0% /dev/shm
Particija / z več kot 80 % zasedenosti je opozorilni znak. Pri več kot 95 % bodo storitve začele odpovedovati.
1.2 Poiščite največje porabnike prostora
Uporabite ukaz `du`, da podrobno pregledate imenike. Začnite v korenskem imeniku in se pomikajte navzdol:
sudo du -h --max-depth=1 / 2>/dev/null | sort -rh | head -20
To prikaže 20 največjih map pod /. Pogosti krivci so /var/log, /var/cache, /usr in /home.
Omejite iskanje še bolj:
sudo du -h --max-depth=1 /var/log | sort -rh | head -10
1.3 Preverite porabo inodov
Prostor na disku ni edina omejitev. Inodi spremljajo število datotek. Particija lahko ima prost prostor, vendar zmanjka inodov, kar prav tako povzroči napake pri pisanju.
df -i
Pričakovani izpis:
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 2621440 210543 2410897 9% /
Če je vrednost IUse% višja od 80 %, verjetno imate imenik z deset tisoči majhnih datotek – pogosto gre za čakalno vrsto pošte, imenik sej ali predpomnilnik PHP. Uporabite ukaz du --inodes, da ga poiščete:
sudo du --inodes -h --max-depth=2 /var | sort -rh | head -10
Preden nadaljujete, morate preveriti porabo prostora na disku, ki jo prikazujejo sistemi Linux. Pri načrtih INTROSERV KVM VPS se kvote prostora na disku uveljavljajo tako na ravni blokov kot na ravni inodov. Če zmanjka enega ali drugega, bo to povzročilo enak simptom: zapisovanje tiho ne uspe ali storitve poročajo, da »na napravi ni več prostora«.
Korak 2: Odstranite neuporabljene pakete in odvisnosti
Stopnja tveganja: SREDNJA – Odstranitev paketov je mogoče povrniti prek zgodovine upravitelja paketov, vendar pred potrditvijo preglejte seznam.
Neuporabljeni paketi so najvarnejša stvar za čiščenje. Zasedajo prostor na disku, ne služijo nobenemu tekočemu procesu, v nekaterih primerih pa vsebujejo nepopravljene CVE-je.
2.1 Ubuntu / Debian – apt autoremove
apt autoremove odstrani pakete, ki so bili nameščeni kot odvisnosti, a jih nič več ne potrebuje:
sudo apt autoremove --purge -y
Z oznako --purge se odstranijo tudi preostale konfiguracijske datoteke. Brez nje se izvršilna datoteka paketa odstrani, konfiguracijske datoteke pa ostanejo na mestu.
Pričakovani izpis:
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 najvarnejši način za odstranjevanje neuporabljanih paketov, za katere upravitelji odvisnosti v Linuxu vedo, da so osiroteli. Ne odstrani paketov, ki ste jih namestili ročno in jih ne uporabljate več. Te je treba ročno pregledati z ukazom apt list --installed.
2.2 AlmaLinux / RHEL – dnf autoremove
sudo dnf autoremove -y
Na starejših sistemih RHEL 7 / CentOS 7 uporabite yum autoremove:
sudo yum autoremove -y
Na sistemih družine RHEL sta ukaza ` dnf autoremove ` in `yum autoremove` bolj agresivna kot njuni ustrezniki v Debianu. Lahko predlagata odstranitev paketov, ki se v grafu odvisnosti zdijo neuporabljeni, vendar jih vaša aplikacija še vedno potrebuje. Pred potrditvijo skrbno preglejte seznam za odstranitev.
2.3 Očistite predpomnilnik paketov
Po posodobitvah in namestitvah upravitelji paketov lokalno shranijo prenesene arhivske datoteke. Po končani namestitvi jih lahko varno izbrišete.
Ubuntu / Debian:
sudo apt clean
S tem se odstranijo vse datoteke .deb iz predpomnilnika v mapi /var/cache/apt/archives/. Če želite odstraniti le pakete, ki niso več na voljo v skladišču (zamenjane različice):
sudo apt autoclean
AlmaLinux / RHEL:
sudo dnf clean all
Pričakovani izpis:
16 files removed
apt clean je vedno varen. Odstrani le predpomnilnik prenosov. Če boste kasneje morali ponovno namestiti paket, se bo ta ponovno prenesel iz repozitorija.
Korak 3: Izbrišite stare jedra
Stopnja tveganja: VISOKA – Če odstranite napačno jedro, se strežnik po naslednjem ponovnem zagonu ne bo mogel zagnati. Vedno preverite uname -r, preden nadaljujete.
Vsaka posodobitev jedra pusti prejšnjo različico na mestu kot varnostno mrežo. Ko se prepričate, da strežnik stabilno deluje z novim jedrom, lahko stare jedre varno odstranite – vsako običajno sprosti 200–400 MB prostora.
3.1 Preverite, katero jedro teče
Nikoli ne odstranjujte jedra, v katerem ste trenutno zagnani:
uname -r
Pričakovani izpis:
5.15.0-105-generic
3.2 Prikaži seznam vseh nameščenih jedr
Ubuntu / Debian:
dpkg -l | grep linux-image | awk '{print $2}'
Pričakovani izpis:
linux-image-5.15.0-100-generic linux-image-5.15.0-105-generic linux-image-generic
Meta-paketa ne smete odstraniti – ta namreč spremlja trenutno priporočeno jedro:
- Ubuntu:
linux-image-generic - Debian:
linux-image-amd64 - AlmaLinux: Metapaket se ne uporablja, saj se zanaša na
installonly_limitvdnf.
Odstranite le določene pakete z določeno različico, ki niso vaš trenutni jedro.
AlmaLinux / RHEL:
rpm -q kernel
Pričakovani izpis:
kernel-5.14.0-284.11.1.el9_2.x86_64 kernel-5.14.0-362.8.1.el9_3.x86_64
3.3 Odstranite stare jedra
Ubuntu / Debian – avtomatska metoda:
apt autoremove iz 2. koraka že poskrbi za stara jedra v Ubuntu, če je nameščen linux-image-generic. Lahko jih tudi izrecno izberete. Zamenjajte različico s tisto, ki jo želite odstraniti (ne s tisto, ki trenutno teče):
sudo apt remove --purge linux-image-5.15.0-100-generic -y
AlmaLinux / RHEL:
Upravitelj paketov dnf hrani nastavljivo število starih jedr. Omejitev nastavite v datoteki /etc/dnf/dnf.conf:
sudo nano /etc/dnf/dnf.conf
Dodajte ali posodobite vrstico:
installonly_limit=2
Nato zaženite:
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q)
S tem odstranite vse jedra razen dveh najnovejših.
Preden izbrišete stare jedra, ki jih linux strežniki še vedno potrebujejo, preverite, ali se izpis ukaza uname -r ujema z enim od jedra, ki jih želite obdržati. Odstranitev aktivnega jedra ne bo povzročila okvare delujočega sistema, vendar po naslednjem ponovnem zagonu ne boste imeli ničesar, s čimer bi lahko zagnali sistem.
Korak 4: Počistite dnevnike
Stopnja tveganja: NIZKA – odstrani se le arhivirani vnosi dnevnika. To ne vpliva na tekoče storitve.
systemd-journald zbira dnevnike iz vseh storitev v sistemu. Privzeto se lahko neomejeno povečuje, dokler ne doseže omejitve prostora na disku – ali dokler se vaš prostor na disku ne izčrpa.
4.1 Preverite trenutno velikost dnevnika
journalctl --disk-usage
Pričakovani izpis:
Archived and active journals take up 2.3G in the filesystem.
4.2 Zmanjšajte dnevnik
Če želite obdržati le dnevnike zadnjih 7 dni:
sudo journalctl --vacuum-time=7d
Če želite obdržati le zadnjih 500 MB:
sudo journalctl --vacuum-size=500M
Pričakovani izpis:
Deleted archived journal /var/log/journal/.../[email protected] (64.0M). Vacuuming done, freed 1.8G of archived journals from /var/log/journal/.
4.3 Preprečite nadaljnje povečevanje dnevnika
Ustvarite konfiguracijsko datoteko, ki bo trajno omejila dnevnik (v AlmaLinux 10 glavna konfiguracijska datoteka privzeto ni prisotna v mapi /etc/, zato je to standardni pristop):
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
Uporabite spremembo:
sudo systemctl restart systemd-journald
Med čiščenjem dnevniških datotek v sistemih Linux to ne vpliva na dnevniške datoteke aplikacij v mapi /var/log/ – te upravlja logrotate. Dnevnik zajema le storitve, ki so del sistema systemd in pišejo neposredno v dnevnik (kot so sshd, nginx ob uporabi enote systemd, cron itd.).
Korak 5: Počistite rotirane in stare dnevniške datoteke
Stopnja tveganja: SREDNJA – Izbrišejo se le stisnjene datoteke. Ne dotikajte se datotek brez končnice .gz ali številčnega pripona.
Dnevniki aplikacij v mapi /var/log/ jih upravlja logrotate. Običajno logrotate hrani določeno število rotiranih kopij in jih samodejno stiska. Če je bil logrotate napačno nastavljen ali ni deloval, lahko najdete velike količine datotek .gz, .1, .2.
5.1 Poiščite velike dnevniške datoteke
find /var/log -type f -name "*.gz" -o -name "*.log" | xargs du -sh 2>/dev/null | sort -rh | head -20
Ali preprosteje:
sudo du -h /var/log | sort -rh | head -20
5.2 Izbrišite stare stisnjene arhive dnevnikov
Stisnjene rotirane dnevnike (.gz) lahko brez skrbi izbrišete. To so arhivi že zaprtih dnevniških datotek.
Najprej si oglejte, kaj bo odstranjeno – za prikaz seznama zaženite program brez parametra -delete:
sudo find /var/log -name "*.gz" -mtime +30
Če je izpis pravilen, izvedite dejansko brisanje:
sudo find /var/log -name "*.gz" -mtime +30 -delete
S tem se izbrišejo arhivi dnevnikov .gz, starejši od 30 dni.
Ne izbrišite dnevniških datotek, v katere se trenutno zapisuje – tistih brez končnice za rotacijo ali končnice .gz. Izbris datoteke /var/log/nginx/access.log med delovanjem nginx ne prepreči, da bi nginx še naprej zapisoval v zdaj izbrisani inode. Prostor se ne sprosti, dokler se nginx ne ponovno zažene. Namesto tega jo varno skrajšajte: sudo truncate -s 0 /var/log/nginx/access.log.
5.3 Preverite, ali je logrotate pravilno nastavljen
Preverite, katere storitve imajo konfiguracije logrotate:
ls /etc/logrotate.d/
Ročno zaženite logrotate v načinu odpravljanja napak, da se prepričate, da deluje brez napak:
sudo logrotate -d /etc/logrotate.conf
Zastavica -d pomeni simulacijo – nič se ne spremeni, vendar boste natančno videli, kaj bi se zgodilo. Če v mapi /etc/logrotate.d/ manjka katera od storitev, ustvarite konfiguracijo zanjo. Za celotna navodila za konfiguracijo programa logrotate glejte vodnik za rotacijo dnevnikov.
Korak 6: Izbrišite začasne datoteke
Raven tveganja: SREDNJA – PHP-seje in predpomnilniki aplikacij vplivajo na dejanske uporabnike. Pred brisanjem si oglejte predogled.
6.1 Očistite mapo /tmp
Večina distribucij ob ponovnem zagonu počisti mapo /tmp. Če vaš strežnik deluje že več mesecev, so se v njej morda nabrale velike začasne datoteke:
du -sh /tmp
Če želite odstraniti datoteke, starejše od 7 dni, si jih najprej oglejte:
sudo find /tmp -type f -mtime +7
Če se seznam zdi varen, izvedite brisanje:
sudo find /tmp -type f -mtime +7 -delete
6.2 Očistite predpomnilnike aplikacij
Mnoge aplikacije pišejo svoje lastne predpomnilnike. Preverite te pogoste lokacije (opomba: preverite, ali ti imeniki obstajajo v vašem sistemu; v čistem sistemu jih morda ni in boste videli napako »Takšne datoteke ali imenika ni«):
# 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/
Te mape je varno izbrisati, če jih aplikacija trenutno ne uporablja.
Preden počistite predpomnilnik aplikacije, se prepričajte, da storitev ni sredi transakcije. Če počistite imenik sej PHP, medtem ko so uporabniki prijavljeni, se bodo vsi odjavili.
Korak 7: Preverite, ali storitve še vedno delujejo
Stopnja tveganja: NIZKA – Preverjanje samo za branje. To izvedite po vsakem koraku, ne le na koncu.
Po vsakem ciklu čiščenja preverite, ali vaše storitve še delujejo. To storite pred zaprtjem seje SSH.
7.1 Preverite stanje kritičnih storitev
Preverite le storitve, ki so dejansko nameščene na vašem strežniku (na čistem sistemu bo preverjanje nginx ali mysql vrnilo sporočilo »Enota ni najdena«).
Ubuntu / Debian:
systemctl status nginx systemctl status mysql systemctl status ssh
AlmaLinux / RHEL:
systemctl status nginx systemctl status mysqld systemctl status sshd
Vsaka storitev mora prikazovati »Active: active (running)«. Če katera koli storitev prikazuje »failed« ali »inactive«, preverite njene dnevnike:
journalctl -u nginx --since "10 minutes ago"
7.2 Preverite, ali se je poraba prostora na disku izboljšala
df -h
Primerjajte stolpec »Use%« s tistim, kar ste videli v koraku 1. Sprememba naj bi odražala prostor, ki ste ga sprostili.
7.3 Preizkusite svojo aplikacijo
Če uporabljate spletni strežnik, pošljite testno zahtevo:
curl -I http://localhost
Pričakovani izpis:
HTTP/1.1 200 OK Server: nginx/1.24.0
Odgovor 200 OK potrjuje, da nginx normalno obdeluje promet.
Odpravljanje težav
`df` ne kaže izboljšanja po odstranitvi paketov
Odstranitev paketov takoj sprosti prostor. Če se izpis uk aza `df` ne spremeni, so datoteke še vedno odprte. Poiščite odprte, a izbrisane datoteke:
sudo lsof | grep deleted
Ponovno zaženite storitev, ki drži datoteko odprto, in prostor bo spet na voljo.
`apt autoremove` želi odstraniti nekaj, kar izgleda pomembno
Seznam natančno preberite. Če opazite ime paketa, ki ga prepoznate kot odvisnost od zagnane storitve, pritisnite N in preverite. Izvedite ukaz `apt-cache rdepends <paket> `, da vidite, kaj je od njega odvisno.
`journalctl --vacuum-time` ne prinese nobene spremembe
Dnevnik je morda že manjši od ciljne vrednosti. Preverite z ukazom `journalctl --disk-usage`. Preverite tudi, ali je dnevnik trajen: preverite, ali obstaja mapa `/var/log/journal/`. Če obstaja le mapa `/run/log/journal/`, je dnevnik shranjen v pomnilniku RAM in se ob ponovnem zagonu samodejno izbriše.
Storitev ne deluje po `apt autoremove`
Zaženite `systemctl status <storitev> ` in preverite napako. Če je bila odstranjena skupna knjižnica, ponovno namestite paket, ki jo zagotavlja:
sudo apt install --fix-broken
Zmanjkuje inodov kljub prostemu prostoru na disku
Poiščite imenik z največ datotekami:
find / -xdev -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -rn | head -10
Pogosti krivci: poštne čakalne vrste v /var/spool/mail, PHP-seje v /var/lib/php/sessions ali nebrzdano delo cron, ki ustvarja začasne datoteke.
Povrnitev
Večina postopkov čiščenja ni reverzibilna – izbrisane datoteke so za vedno izgubljene. Zaradi tega je korak varnostnega kopiranja v poglavju »Predpogoji« obvezen.
Kar zadeva odstranjevanje paketov, lahko ponovno namestite tisto, kar je bilo odstranjeno:
Ubuntu / Debian:
sudo apt install <package-name>
AlmaLinux / RHEL:
sudo dnf install <package-name>
Če želite videti zgodovino tega, kar je bilo odstranjeno v trenutni seji:
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 ponovno namesti pakete, odstranjene v zadnji transakciji – uporabno orodje za obnovo, če je avtomatska odstranitev šla dlje, kot je bilo nameravano.
Zaključek
Čiščenje strežnika Linux brez izpadov se zreducira na tri stvari: najprej izmerite, odstranite le tisto, kar sistem potrdi kot neuporabljeno, in po vsakem koraku preverite storitve. Preden se česarkoli dotaknete, zaženite ukaza df -h in du. Za neuporabljene pakete uporabite apt autoremove / yum autoremove, za čiščenje dnevniških zapisov journalctl --vacuum-time, za stare rotirane arhive pa find /var/log -name "*.gz". Stara jedra odstranite šele potem, ko se prepričate, da se izpis ukaza ` uname -r ` ujema s tistim, kar želite obdržati. In vedno preverite `systemctl status`, preden zaprete terminal.
Za VPS INTROSERV je praktični cilj ohranjanje izkoriščenosti prostora / pod 80 % – to pušča prostor za nenadne povečanje dnevniških datotek in posodobitve paketov brez nujnega posredovanja. Če je prostor na disku ponavljajoč se problem, razmislite o spremembi velikosti prostora za shranjevanje na vašem VPS neposredno iz stranke INTROSERV.
Različica dokumenta: 1.0
Zadnja posodobitev: maj 2026
Lastnik: Ekipa za tehnično dokumentacijo