Imenik člankov
Pred nekaj dnevi mi je prijatelj pozno ponoči poslal sporočilo, da se mu je strežnik sesul.
Specifični simptomi so bili še posebej nenavadni: spletno mesto je nenadoma začelo javljati napake, dnevnikov ni bilo mogoče zapisovati, ustvarjanje novih datotek pa je takoj sporočilo, da je disk poln.
Ko pa je preveril z ukazom `df -h`, je bil šokiran, ko je ugotovil, da je na disku očitno več deset gigabajtov prostega prostora. Kako je lahko poln?
Takoj sem mu rekel: "Brat, nimaš samo polnega prostora za shranjevanje, ampak tudi tvoj inode je preobremenjen."
Odgovoril je z vprašajem: Kaj točno je Inode?
Pravzaprav se mnogi ljudje odzovejo popolnoma enako kot on, ko so prvič padli v to past, ker jih nihče v šoli tega ni nikoli naučil.
Najprej pojasnimo, kaj je Inode.
Predstavljajte si to kot knjižnično indeksno kartico in zlahka jo boste razumeli.
Prostor na disku je kot knjižna polica; koliko knjig lahko nanjo postavite, je odvisno od njene zmogljivosti, kar je vsem enostavno razumeti.
Inode je kot indeksna kartica za vsako knjigo, ki beleži njeno ime, lokacijo in kdo jo je premaknil.
V Linuxu mora vsaka datoteka in vsak imenik zasesti inode, ne glede na to, kako majhna je datoteka.
Tudi če je datoteka prazna, bo sistem zanjo še vedno porabil indeksno kartico.
Sistem ima omejitev skupnega števila datotek, ki jih lahko ustvari; ta omejitev je skupno število notranjih vozlišč.
Ko je inode porabljen, operacijski sistem zavrne ustvarjanje novih datotek, tudi če ima vaš disk še vedno na stotine gigabajtov prostega prostora.
Dnevnikov ni mogoče zapisovati, predpomnilnika ni mogoče ustvariti in spletno mesto se popolnoma sesuje – to je bizaren prizor, ki mu priča.
Iskreno povedano, to je res zapletena situacija, ker je sporočilo o napaki poslano z lokacije, ki je ne gledate.
Prvi trik je uporaba ukaza `df -i` za hiter pregled.
V okolju HestiaCP se lahko preprosto prek SSH prijavite v terminal in vnesete to vrstico.
df -iPrikazalo bo skupno število notranjih vozlišč, število uporabljenih in število preostalih za vsako nameščeno particijo.
V izhodu je stolpec z imenom IUse%, ki je ključna metrika, na katero morate biti pozorni.
Če IUse% particije doseže 100 %, tudi če ima ta particija še vedno dovolj prostora na disku, ne bo več mogla ustvarjati novih datotek ali dnevnikov.
Prijatelju sem predlagal, naj najprej zažene to, da bo lahko v sekundi ugotovil, ali je težava v inode , kar bi bilo veliko hitreje kot ugibanje.
Druga metoda je uporaba funkcije `find` za natančno štetje določenega uporabnika.
Ko potrdimo, da je težava v notranjem vozlišču, je naslednji korak ugotoviti, kdo prekomerno porablja indeksno kartico.
HestiaCP ima ločen domači imenik za vsakega uporabnika. Preprosto lahko preštejete skupno število datotek in imenikov v določenem imeniku spletnega mesta.
find /home/用户名/web/你的域名/public_html | wc -l»Uporabniško ime« in »ime vaše domene« zamenjajte z dejansko potjo. Čisto število, ki ga vrne terminal, je vsota vseh datotek in map v tem imeniku.
Vsaka datoteka ali imenik ustreza enemu inode-u, zato ta številka predstavlja uporabo inode-a.

Če ste preveč leni, da bi preverjali vsakega posebej in želite hkrati videti porazdelitev uporabe vseh uporabnikov na celotnem spletnem mestu, je na voljo tudi ukaz z eno samo zanko.
for d in /home/*; do echo -n "$d: "; find "$d" 2>/dev/null | wc -l; doneTa vrstica bo izpisala skupno število datotek v vsakem uporabniškem imeniku pod /home, kar bo olajšalo prepoznavanje, kateri uporabniški imenik ima nenavadno veliko število datotek.
Tretja strategija je identifikacija poddirektorij, ki porabijo največ joda.
Včasih veste, da ima spletno mesto smešno visoke vrednosti Inode, vendar še vedno ne morete ugotoviti, kaj je narobe z zaslonom, polnim datotek.
V takih primerih morate poiskati podmape, ki vsebujejo veliko število majhnih datotek, kot so imeniki predpomnilnika, imeniki sej in imeniki dnevnikov – to so najbolj problematična področja.
find /home/用户名/web/你的域名/public_html -type d -exec sh -c 'echo -n "{}: "; find "{}" -maxdepth 1 | wc -l' \; | sort -n -r -k 2 | head -n 10Ta ukaz bo prikazal seznam 10 podmap, ki porabijo največ datotek.
Pot na samem vrhu seznama je tista, kjer je združenih veliko število majhnih datotek.
Prijatelju sem rekel, da gre verjetno za kakšen vtičnik za predpomnjenje, ki na skrivaj ustvarja majhne datoteke, in da bi zagon te vrstice to v bistvu potrdil.
Četrti nasvet je preverjanje omejitve kvote z uporabo repquota.
Če ima vaš strežnik omogočene kvote datotečnega sistema Linux, lahko na težavo pogledate z drugega zornega kota.
repquota -aTa ukaz bo prikazal omejitev datotek in dejansko uporabo datotek za vse uporabnike.
Bodite pozorni na razdelek Omejitve datotek v izhodu; stolpec uporabljeno označuje, koliko datotek je bilo uporabljenih.
Stolpca »mehka« in »trda« predstavljata pragova mehke in trde omejitve. Ko »uporabljeno« doseže »trdo«, bo sistem neposredno zavrnil ustvarjanje novih datotek.
To je povsem druga zgodba od tega, koliko prostora imate še na disku.
Za zaključek povežimo pike preiskave.
Vrnimo se k prijatelju, ki je sredi noči na začetku sesul strežnik.
Sledil je štirim korakom, ki sem jih opisal, začenši z `df -i`, da bi potrdil, da je inoda res polna.
Nato smo z uporabo funkcije find našli imenik predpomnilnika zapuščenega starega spletnega mesta, ki je noro ustvarjalo majhne datoteke.
Končno je preverjanje `repquota` potrdilo, da je dejansko dosegla fiksno omejitev.
Po čiščenju kupa neželene vsebine v predpomnilniku je spletno mesto takoj zaživelo.
Ko boste naslednjič naleteli na to nenavadno situacijo, ko je »na disku očitno prostor, vendar ne morete zapisovati datotek«, ne hitite z dodajanjem trdega diska.
Najprej uporabite `df -i`, da si ogledate inode; resnica se lahko skriva na tisti indeksni kartici, ki je še niste opazili.
Resnično verjamem, da so ti majhni delčki zdrave pameti, skriti v jedru sistema, bolj uporabni kot pomnjenje stotih seznamov za optimizacijo.
Upam, da vam bo članek »Kako preveriti uporabo Inode v HestiaCP? Krivec za razpoložljivost prostora na disku, vendar nezmožnost pisanja datotek«, objavljen na blogu Chen Weilianga ( https://www.chenweiliang.com/ ), v pomoč.
Delite povezavo do tega članka: https://www.chenweiliang.com/cwl-34619.html
