Kui töötate Linuxi serveritega, siis varem või hiljem puutute kokku inode'idega ja kõige parem on seda teha enne, kui süsteem hakkab kardetud teadet kuvama. „Seadmel pole enam ruumi”, kuigi kettaruumi on vabaInoodid on failisüsteemi oluline osa ja kuigi need võivad esialgu kõlada puhta teooriana, võib nende mõistmine säästa teid teenusekatkestustest, andmete kadumisest ja suurematest tootmisprobleemidest.
Selles artiklis vaatleme lähemalt, mis on inode, mida see salvestab, kuidas see kettal on korraldatud, mis juhtub, kui need otsa saavad ja mis kõige tähtsam, Kuidas Linuxis inode'i kasutamist kontrollida ja optimeerida praktiliste käskudega. Idee on liikuda teoreetilisest osast praktilise poole, kuid arusaadava keelega ja ilma tarbetute ilustusteta.
Mis on inode ja milline on selle roll Linuxis?
Inood (inglise keelest indeksisõlm) Kas failisüsteemi sisemine andmestruktuur, mis salvestab kõik faili või kataloogi metaandmed, välja arvatud selle nimi ja sisu. Iga fail ja iga kataloog Unixi-laadses failisüsteemis (Linux, macOS jne) ja isegi Windowsi keskkondades, kus on WSL2, on sellega seotud täpselt üks inode, mida tähistab täisarv, mida nimetatakse inode numbriks.
Sama failisüsteemi sees iga inode number on unikaalneSama numbrit võib aga korrata teistes samale masinale paigaldatud failisüsteemides. Faili tegelik identiteet määratakse failisüsteemi identifikaatori ja selle inode-numbri kombineerimise teel; see paar muudab iga elemendi süsteemis globaalselt unikaalseks.
Oluline on seda rõhutada failinimi ei ole osa inode'istFailinimed salvestatakse kataloogikirjetesse, mis on lihtsalt loendid, mis seovad failinime inode'i numbriga. Seega Linuxis viidatakse failidele tegelikult nende inode'i järgi ja nimi on lihtsalt silt, mis sellele viitab.
Millist teavet inode salvestab: detailseid metaandmeid?
Inode salvestab kogu teabe, mida failisüsteem vajab selle faili või kataloogi käsitlemiseks, ilma et peaks teadma selle nime. Nende hulgas on Linuxi süsteemides inode'i poolt salvestatud tavalised metaandmed on:
- Faili tüüp (tavaline, kataloog, sümboolne link, seade jne).
- Juurdepääsuload (lugemine, kirjutamine, käivitamine kasutaja, grupi ja teiste jaoks).
- Omaniku UID (faili omaniku kasutajanumber).
- Grupi GID (rühma number, kuhu see kuulub).
- Faili suurus baitides.
- Kõvade linkide arv mis osutavad sellele inode'ile.
- Andmeplokkide arv et fail kettal hõivab.
- Salvestusseade kus see asub (seadme ID), kui see on kohaldatav.
- ajatemplidviimane lugemine (atime), viimane sisu muutmine (mtime) ja viimane metaandmete muutmine (ctime); mõnes süsteemis ka loomise kuupäev.
- Andmeplokkide aadressid kuhu faili sisu salvestatakse.
- Kaudsed plokk-aadressid (ümbersuunamisplokid), kui fail on liiga suur, et sellele viidata ainult otseste pointerite abil.
- Versiooninumber või muud sisemised väljad olenevalt failisüsteemist.
Lühidalt, inood koondub Kõik, mida süsteem peab faili kohta teadma, välja arvatud selle nimi ja sisuTegelik sisu asub ketta andmeplokkides; nimi kataloogikirjetes.
Plokikood, kuidas inoded sisemiselt töötavad

Unixi ja Linuxi süsteemid haldavad kõvakettaid jagades need fikseeritud suurusega andmeplokkideksMitte klastrites nagu FAT-is. Faili salvestamisel jaotatakse selle sisu failisüsteemi ühe või mitme vaba ploki vahel. Kui fail on suurem kui üks plokk, fragmenteeritakse see nii paljudeks plokkideks kui vaja.
Inood toimib omamoodi "sisukorrana": See sisaldab viiteid füüsilistele kettaplokkidele, kus fail asub.Kui fail mahub mõne ploki sisse, osutab inode otse neile, kasutades otseseid adresseerimiskirjeid. Kui fail kasvab liiga suureks, tulevad mängu kaudsed adresseerimistabelid.
Otsesed ja kaudsed marsruutimise tabelid
Failisüsteemides nagu ext4 on iga inode tavaliselt reserveeritud. 15 adresseerimiskirjet oma andmeplokkide jaoks. Esimesed 12 kirjet on otseviited: igaüks neist osutab otse andmeplokkile. See võimaldab suhteliselt väikeseid faile väga tõhusalt hallata.
Kui 12 otsesisendist enam ei piisa, pöördub süsteem kaudne marsruutimine:
- Kirje 13 on tavaliselt a lihtne kaudne pointer: osutab plokile, mis ei sisalda failiandmeid, vaid tabelit rohkemate andmeplokkide aadressidega.
- Kirjet 14 kasutatakse järgmiselt kahekordselt kaudne pointer: osutab plokile, mis omakorda sisaldab andmeplokkide loendeid sisaldavate plokkide aadresse.
- Sissepääs 15 on kolmekordselt kaudne pointer: kolmetasandiline tabelite ahel enne andmetega viimaste plokkideni jõudmist.
See astmeline mehhanism võimaldab ühel inodel viidata väga suurtele failidele ilma et sisemine struktuur muutuks ülemäära suureks, mis aga muudaks juurdepääsu väga suure faili korral keerukamaks.
Kus kettale inode'id salvestatakse?
Inoodid ei ole failid, mida tavaliselt "näha" saab; Need on andmestruktuurid, mille failisüsteem reserveerib ketta teatud piirkondadesse.Näiteks ext2/ext3/ext4 süsteemides genereeritakse failisüsteemi loomisel eelnevalt rühmadesse jaotatud inode-tabelid.
Ext4-s on partitsioon sisemiselt jagatud mitmeks plokkide rühmaks. Iga rühma alguses reserveeritakse inode'ide tabel. ja muud metaandmed. Selle rühma inode'id viitavad tavaliselt füüsiliselt lähestikku asuvatele andmeplokkidele, mis vähendab mehaaniliste ketaste pea liikumist ja parandab jõudlust.
Kuna igal inodel on fikseeritud suurus (näiteks Vaikimisi 256 baiti ext4-s) ja kettaplokid on tavaliselt 4096 baiti, Iga plokk mahutab 16 inode'iInoodide koguarv määratakse failisüsteemi vormindamise ajal ja üldiselt ei saa seda muuta ilma seda uuesti loomata.
Kuidas inode luuakse, kopeeritakse ja liigutatakse
Uue faili loomisel failisüsteem määrab sellele vaba inode'i ja unikaalse inode'i numbri selles partitsioonis. Kui kopeerite faili sama failisüsteemi piires, saab koopia erineva inode'i oma numbriga, isegi kui andmesisu on identne.
Faili teisaldamisel sama partitsiooni piires (näiteks koos mv), inode ei muutu: Värskendatakse ainult neid kataloogikirjeid, mis seovad failinime selle inode numbriga.Seepärast on suure faili teisaldamine sama failisüsteemi piires nii kiire: andmeid ei kopeerita, uuendatakse ainult nimesid.
Kui liigutate faili erinevate failisüsteemide vahel (näiteks / teise partitsiooni külge, mis on paigaldatud /mnt), on aluseks olev protsess tegelikult koopia, millele järgneb kustutamine. Sellisel juhul inode number muutub sest "uus" fail kuulub teise failisüsteemi, millel on oma inode'ide komplekt.
Inoodid ja kõvad sidemed: miks need on nii võimsad
Nagu me oleme arutanud, Linuxis Faile identifitseeritakse sisemiselt nende inode-numbri, mitte nime järgi.See võimaldab mitmel erineval nimel viidata samale inode'ile ja seega ka samale failisisule. Seda nimetatakse kõvaks lingiks.raske link).
Kui loote käsuga kõva lingi ln, sa lisad uus kataloogikirje, mis osutab samale inode numbrile kui algne failAndmeid ei dubleerita ja sisu jaoks ei kasutata lisaruumi. Niikaua kui sellele inode'ile viitab vähemalt üks nimi, jäävad andmed kettale.
See seletab ka seda, miks Faili kustutamine ei pruugi tingimata koheselt selle andmeid eemaldada.Eemaldatakse nimekirje. Alles siis, kui inode'i kõvalingi loendur jõuab nullini, vabastab failisüsteem seotud andmeplokid.
Inoodide koguarv ja nende piirang
Igal failisüsteemil on maksimaalne inode'ide arv, mida see suudab käsitleda. Teoreetiliselt on see piir paljude süsteemide puhul umbes 2^32 inode'i ehk umbes 4,3 miljarditPraktikas on saadaolev arv palju väiksem ja sõltub sellest, kuidas failisüsteem loodi.
Ext2/ext3/ext4 süsteemides kasutatakse tavaliselt heuristilist reeglit: umbes üks inode iga 16 KB kettamahu kohtaSee tähendab, et kui luua mitmesaja gigabaidise failisüsteemi vaikekonfiguratsiooniga, on sul miljoneid inode, aga mitte lõpmatu arv.
Peamine fakt on see, et Inoodide koguarv määratakse vormindamise ajal. tööriistadega nagu mkfsSeal saab muuta parameetreid, näiteks baitide arvu inode'i kohta (valik -iSee mõjutab loodavate inode'ide arvu. Selle hilisem muutmine hõlmab failisüsteemi uuesti loomist või ümberpartitsioonimist, millega kaasneb andmete kadumise oht, kui midagi valesti läheb.
Miks võivad inode'id otsa saada isegi siis, kui kettaruumi on?
Inoodide otsa saamine tähendab seda, et Uute failide või kataloogide esitamiseks pole enam struktuure saadavalKuigi ketta andmeplokkidel on veel palju ruumi. See on küll vähem levinud olukord kui toores mälu otsa saamine, aga täiesti võimalik.
Mõned tüüpilised stsenaariumid, mis käivitavad inode'ide kasutamise, on järgmised:
- Genereerige tohutul hulgal väga väikeseid faile (näiteks logid, kettal olevad üksikud meilid, ajutised seansid).
- Konteinerite intensiivne kasutaminekus kihtide, piltide ja konteinerite failid ja kataloogid vohavad.
- Loo failisüsteeme väga väikeste plokkidega (näiteks vähendatud ploki suurusega ext3), mis soodustavad paljude pisikeste failide genereerimist.
- Vahemälud, ajalise mälu haldamise tööriist (TMP) ja seansikataloogid mis koguvad vanu faile aastaid, kui neid ei puhastata.
Sellistel juhtudel võite kokku puutuda veaga „Seadmel pole enam ruumi"uute failide loomisel, kuigi a-d tehes df -h Näete ikka veel gigabaite vaba ruumi. Probleem ei ole toormälus, vaid pigem selles, et Saadaval olevate inode'ide varu on otsa saanud..
Tualettruumide otsa saamise sümptomid ja riskid
Kui süsteem anoodidega oma piirini jõuab, hakkab ilmnema mitmesuguseid rikkeid. Mõned neist levinumad probleemid, kui vabu inode pole Heli:
- Võimetus luua uusi faile või kataloogeisegi saadaoleva kettaruumi korral.
- Rakendus jookseb kokku ja hangub mis üritavad kirjutada logisid, ajutisi faile või püsivaid andmeid.
- Ootamatu serveri taaskäivitamine või operatsioonisüsteemi tõrked, kui kriitilised protsessid ei saa kirjutada.
- Andmete kadumine või riknemine kui kirjutamine ebaõnnestub operatsiooni keskel.
- Ajastatud ülesanded (cron-tööd), mis ei tööta õigesti sest nad ei saa luua ajutisi ega väljundfaile.
Tootmiskeskkondades tähendab see kõik selget riski: Kui sa inode'e ei jälgi, võid ruumi "puuduse" tõttu terveid teenuseid sulgeda, kui ketas on veel pooltühi..
Inoodide arvu ja nende kasutamise kontrollimine Linuxis
Linux pakub mitmeid käske kontrollida konkreetseid inode ja jälgida üldist inode'i kasutamist süsteemisVaatame neist kõige kasulikumaid.
Kuva täielik inode'i teave stat abil
Käsk stat proov kõik metaandmed, mida süsteem faili või kataloogi kohta teab, sealhulgas selle inode number, load, omanik ja ajatemplid.
Näiteks:
root@equipo:~# stat /var/log/lastlog
File: /var/log/lastlog
Size: 292292 Blocks: 96 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17381397 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 22/ utmp)
Access: 2022-01-12 11:28:19.900058928 +0100
Modify: 2022-01-12 11:28:19.900058928 +0100
Change: 2022-01-12 11:28:19.900058928 +0100
Birth: 2021-06-25 17:40:57.254208200 +0200
Sellel väljapääsul saate hõlpsalt tuvastada inode'i number (inode'i väli), linkide arv, suurus ja asjakohased kuupäevad.
Inoodi numbri vaatamiseks kasuta käsku ls -i
Kui sind huvitab ainult faili või kataloogi inode number ilma liigsete üksikasjadeta, võid kasutada ls valikuga -i. See käsk Loetle failid, näidates esimeses veerus nende inode'i.
Näide faili kasutamise kohta:
root@equipo:~# ls -i /var/log/lastlog
17381397 /var/log/lastlog
Ja kataloogi jaoks lisan veel mõned valikud kirje enda vaatamiseks:
root@equipo:~# ls -idl /var/log
16813380 drwxr-xr-x. 18 root root 4096 Jun 6 12:33 /var/log
Kontrollige inode'i kasutamist failisüsteemi tasandil käsuga df -i
Käsk df Seda kasutatakse failisüsteemide ruumikasutuse vaatamiseks ja valikuga -i Seejärel näidatakse edasi Teave kogu-, kasutatud ja vabade inode'ide kohta.
Näiteks:
root@equipo:~# df -i /dev/sda1
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 524288 379 523909 1% /boot
Nii näete inode'ide koguarv, kui palju neist on kasutuses, kui palju on vaba ja kui palju on neid kasutatud protsentidesSee on kiire viis kontrollida, kas lähened piirile.
Loendage, mitu inode'i (faili) kataloogis on
Kui soovite saada aimu, kui palju faile ja katalooge kindla tee all on, saate need kombineerida find koos wc -lKui iga fail või kataloog kasutab ühte inode'i:
root@equipo:~# find /var/log | wc -l
120
See number ütleb sulle umbes Mitu inode'i selles kataloogipuus kasutatakse?See on väga kasulik süsteemi piirkondade leidmiseks, mis genereerivad tuhandeid väikeseid faile.
Partitsiooni inode'i omaduste vaatamine
Inoodi konfiguratsiooni kontrollimiseks ext2/ext3/ext4 partitsioonil saate kasutada tune2fsJärgmine käsk näitab inode'ide koguarv, nende arv rühmas ja iga inode'i suurus:
root@equipo:~# tune2fs -l /dev/sda1 | grep Inode
Inode count: 2031616
Inodes per group: 8192
Inode blocks per group: 512
Inode size: 256
Selle teabe abil saate hinnata Mitu inode'i teil on saadaval ja mitu mahub plokki?Näiteks 256-baidiste inode'ide ja 4096-baidiste plokkide korral mahutame 16 inode'i ploki kohta.
Failisüsteemide erinevused: ext, XFS, Btrfs ja teised

Kõik failisüsteemid ei halda inode ühtemoodi. Nagu me oleme näinud, siis ext2/ext3/ext4 perekonnas... Inooditabelid luuakse staatiliselt failisüsteemi initsialiseerimisel.Inoodid hõivavad fikseeritud, reserveeritud ruumi, mida ei saa millekski muuks kasutada ja nende arv ei saa dünaamiliselt kasvada.
Täiustatud süsteemides, näiteks XFS või BtrfsLähenemisviis on erinev. Suure laua ettebroneerimise asemel Inoodid luuakse nõudmisel. kui neid on vaja uute failide esitamiseks. See võimaldab suuremat paindlikkust, kuigi sisemine haldusloogika on keerulisem.
Samuti on vaja eristada Ketta inode'id (füüsilisel kettal talletatud inode'id) ja Põhilised inode'id (mälustruktuurid, mida kernel failidega töötamiseks kasutab). Kontseptsioon on sama, kuid tugi ja mõned rakenduse üksikasjad muutuvad.
Praktiline juhtum: df -i kasutamine ja selle väljundi lugemine
Kui jooksed df -i Saate tabeli, mis sisaldab mitut veergu. Iga veeru tähenduse mõistmine aitab teil tõlgendada oma inode'ide terviseseisundit:
- Failisüsteem: paigaldatud seade või helitugevus (näiteks
/dev/sda1o/dev/disk1s2macOS-is). - Inoodid / iused / ifree: inode'ide koguarv, kasutatud inode'id ja vabad inode'id.
- %iused: kasutusel olevate inode'ide protsent.
- Paigaldatud peale: failisüsteemi ühenduspunkt.
Kuigi koguarvud võivad tunduda tohutud, Need võivad otsa saada ammu enne, kui ketas täis saabNäiteks sülearvutil, millel on 1 TB kettaruumi ja umbes 4 900 000 vaba inode'i, saaksite luua 4 900 000 ühebaidist faili, kasutades vaid mõne MB salvestusruumi, ja ikkagi lõpetada uute failide loomise, kuna inode'e pole enam alles.
Kuidas tuvastada ja lahendada kõrge inode'i probleeme
Kui rakendused hakkavad krahhima või ajastatud ülesanded ei käivitu, on hea mõte kahtlustada inode'e. Esimene asi, mida teha, on kontrolli kasutamist käsuga df -i asjakohastes failisüsteemides:
df -i
df -i /ruta/que/te/preocupa
Kui näete, et kasutatud inode'ide protsent on lähedal 100%-le, olete pudelikaela leidnud. Järgmine samm on tuvastada, kuhu väikesed failid koonduvad mis tarbivad nii palju inode.
Mõned kasulikud strateegiad on järgmised:
- Leidke katalooge, kasutades suur hulk faile kasutades kombinatsioone
find,duywc -l. - Sorteeri faile suuruse järgi millegi sarnasega
ls -laShrkindlal teel paljude pisikeste failide tuvastamiseks. - kontrollima vahemälu, ajutised ja allalaadimiskataloogidmis tihtipeale ununeb: näiteks
/tmp, veebirakenduste vahemälud, seansisalvestused jne. - Kui rakendus (näiteks meiliserver) salvestab palju üksusi failidena, koondada oma väljund kindlatesse kataloogidesse et seda saaks perioodiliselt puhastada.
Kui probleemi allikas on leitud, on tavaliselt kõige otsesem lahendus kustuta failid, mida enam vaja ei ole:
- Kõrvaldama vananenud kataloogid ja failid.
- Borrar vanad vahemälufailid mis on võimelised iseenesest taastuma.
- Korista e-posti arhiivid, seansid või ajutised failid, mis on vanemad kui teatud aeg (näiteks 14 päeva) cron-töö abil
find -mtimey-delete.
See võimaldab inode'ide kiiret taastamist ilma failisüsteemi struktuuri mõjutamata. Agressiivse automatiseerimisega on aga soovitatav olla ettevaatlik, sest Oluliste failide kustutamine võib rakendusi rikkudaEnne käskude tootmiskeskkonnas juurutamist on alati hea mõte need üle vaadata ja testida.
Kui sul on endiselt inode'idest puudus ja rohkem ei saa välja anda, on ainus järelejäänud võimalus raskem tee: failisüsteemi ümberpartitsioonimine või uuesti loomine suurema inode-suhtarvuga (baitide kohandamine inode kohta) mkfsSee on delikaatne protsess, mis hõlmab varukoopiaid ja võimalikku andmete kadumist, kui midagi valesti läheb.
Millal on tualeti sagedane kasutamine tõeliselt murettekitav?
Suure hulga inode'ide kasutamine ei tähenda automaatselt katastroofi. Mõnikord peegeldab see lihtsalt seda, et Sul on palju faile, aga ikka veel piisavalt ruumiTegelik probleem tekib siis, kui lähenete 100%-le, eriti kriitilistes partitsioonides, näiteks /, /var o /homekus faile pidevalt luuakse ja kustutatakse.
Paljudel juhtudel on liigne tarvitamine tingitud väikesemahulised üleliigsed andmedAjutised failid, vahemälud või seansifailid, mida pole kuude kaupa puhastatud. Automatiseeritud rutiinide (cron-tööde) rakendamine, mis kustutavad faile perioodiliselt vanuse põhjal, on sageli lihtne viis selleks. Hoidke inode'i tarbimine kontrolli all ilma süsteemi ülesehitust muutmata.
Samuti tasub kaaluda failisüsteemide erinevusi. Mõned, näiteks XFS või Btrfs, haldavad inode paindlikumalt kui ext4, mis võib olla kasulik keskkondades, kus inode'ide sagedane käsitlemine on teada. miljoneid väikeseid faile.
Inoodide toimimise, nende salvestatud teabe ja nende tühjenemise mõistmine võimaldab teil failisüsteemi uues valguses näha: Need ei ole enam lihtsalt "failid ja kaustad", vaid sisemised struktuurid väga spetsiifiliste piiridega..
Nende piirangute kontrollimise ja aeg-ajalt sobivate käskudega inode'i kasutuse kontrollimise abil on palju lihtsam vältida vigu „Seadmel pole ruumi” ja säilitada terve Linuxi süsteem isegi suure koormuse korral. Jaga infot ja rohkem inimesi saab teemast teada..