Log in


Forgot your password?
prijatelji LUGoNSa
gnu.gif
linuxzasve.jpg
hulk.jpg
zextras_logo.png
 
You are here: Home / Uputstva / Teorija / Uopšteno o UNIX-u: sve je u inodama

Uopšteno o UNIX-u: sve je u inodama

by Vladimir Atanackovic last modified Jan 31, 2011 12:01 AM
Datoteke i direktoriji bili bi gotovo potpuno beskorisni u UNIX-u bez ruke pomoći koje pružaju inode. Nadamo se da ćete nakon čitanja ovog članka bolje shvatiti ulogu inoda, njihovog značaja za *NIX, te kako ih uređivati. Možda nikada više nećete gledati na df kao do sada. Izvorni tekst napisao je Adam Cormany za IBM, i može se preuzeti iz DeveloperWorks kolekcije tekstova.

Uopšteno o UNIX-u: sve je u inodama

Jedna inoda (eng: an "inode") je struktura podataka koju susrećemo kod UNIX operativnih sistema, i ona sadrži važne informacije koje se tiču datoteke u sistemu datoteka (eng: a "file system"). U UNIX-u, kada se pravi sistem datoteka, napravi se i određeni broj inoda, takođe. Občno se oko 1% ukupnog prostora dodijeljenog nekom sistemu datoteka dodijeli tabelama s inodama.

Ponekada, ljudi istovijetno koriste termine "inode" i "inumber". Termini su slični, i donekle i podudarni, ali, ipak, ne odnose se na iste stvari. "Inode" se odnosi na strukturu podataka; "inumber" je zapravo identifikacioni broj same inode - otud i termin "inode number", odnosno "inumber". Inumber je samo jedan bitan element informacije o datoteci. Neke druge osobine jedne inode pojašnjene su u tekstu koji slijedi.

Tabela s inodama sadrži spisak svih brojeva inoda nekog sistema datoteka. Kada korisnici traže neku datoteku, ili pristupaju nekoj datoteci, UNIX sistem pretražuje tablelu inoda, tražeći odgovarajući broj inode. Kada je odgovarajući broj inode pronađen, komanda koja je u pitanju potom može pristupiti inodi i napraviti željene promijene, ako ih je moguće obaviti.

Uzmimo, na primijer, uređivanje datoteke pomoću vi-ja. Kada otkucate vi <filename>, broj inode pronađen je u tabeli inoda, omogućivši tako otvaranje inode. Neki od atributa se izmijene tokom sesije uređivanja vi-jem, i kada se završi s uređivanjem i otipka :wq, inoda se zatvara, i oslobađa. Na ovaj način, ako dva korisnika pokušaju da istovremeno uređuju istu datoteku, inoda bi već bila dana na obradu prvom, korisniku identifikovanom preko ID-a (UID) za tu sesiju, i drugo uređivanje bi moralo da sačeka da se inoda oslobodi.

Struktura inoda

Struktura inoda relativno je jasna prekaljenim programerima i administatorima UNIX-a, ali postoji još mnoštvo informacija o sadržaju inode koje mnoge mogu iznenaditi. Slijedeće definicije pokazuju samo neke od važnih informacija u inodama koje korisnici UNIX-a redovno koriste:
- broj inode
- tačna inofrmacija od stanju i vrsti datoteke, koja služi i stat C funkciji
- broj linkova do datoteke
- UID vlasnika
- ID grupe (GID) vlasnika
- veličina datoteke
- stvaran broj blokova koje datoteka koristi
- vrijeme posljednje djelimične promijene (eng: "modified")
- vrijeme posljednjeg pristupa
- vrijeme posljednje promijene [pristupanja] (eng: "changed")


U suštini, inoda sadrži sve informacije o datoteci, izuzev imena datoteke i sadržaja datoteke. Puna struktura inode može se naći u header-u datoteke /usr/include/jfs/ino.h u AIX-u ili na Mreži, na lokaciji http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.files/doc/aixfiles/inode.h.htm.

Informacije koje su gore navedene važne su informacije o datotekama, i mnogo se upotrebljavaju u UNIX-u. Bez ovih informacija, datoteka bi se [ostatku sistema] prikazivala kao korumpirana i neupotrebljiva.

Direktoriji i datoteke mogu samo naizgled biti različite na UNIX-oilikm sistemima, kada se uporede s drugim sistemima, ali - nisu. Kod UNIX-a, direktoriji su zapravo datoteke koje imaju par dodatnih podešavanja u svojim inodama. Jedan direktorij je suštinski datoteka koja sadrži druge datoteke. Takođe, informacije o stanju podešavaju markere tako da obavijeste sistem da je posmatrana datoteka zapravo direktorij.

Rad s inodama

Znati kako raditi s inodama u UNIX-u može uštedjeti mnogo vremena i frustracije. Možete koristiti sljedeće komande kako biste prevazišli neke glavobolje nastale nepoznavanjem inoda.

Komanda df

Kao što je već pomenuto, kada kreirate sistem datoteka u UNIX-u, otprilike 1% ukupnog prostora dodijeljuje se tabeli inoda. Svaki put kada kreirate datoteku na sistemu datoteka, inoda se dodijeljuje toj datoteci. Obično postoji dovoljan broj inoda koji se dodijeli sistemu, ali uvijek ostaje mogućnost da ostanete bez inoda na raspolaganju. Da biste to pratili, možete se poslužiti izlazom (eng: "output") komande df.

Upotrebom komande df, možete pogledati sve postavljene (eng: "mounted") ili samo pojedine sisteme datoteka. U ovom pregledu, možete vidjeti broj inoda koje se trenutno koriste za svaki od posmatranih sistema datoteka, kao i postotak prosječne iskorištenosti sistema, kao što se i vidi na listingu 1:

# df -k | head -6
Filesystem          1024-blocks      Used     Avail Capacity  Mounted on
/dev/ad0s1a             1012974    469728    462210    50%    /
devfs                         1         1         0   100%    /dev
/dev/ad0s1g           186959510      9212 171993538     0%    /home
/dev/ad0s1f             1012974      3728    928210     0%    /tmp
/dev/ad0s1e           101554150  68807964  24621854    74%    /usr



Ako, iz nekog razloga, sistem datoteka dosegne 100% iskorištenosti dodijeljenih inoda, nećete biti u mogućnosti da kreirate dodatne datoteke, alatke, direktorije, i drugo, na tom sistemu. Jedno od rješenja je da se doda više prostora sistemu datoteka pomoću alatke za proširenje (prim. prev: u originalnom tekstu koristi se AIX-ova komanda smitty chfs; iskoristite resize2fs, LVM resize, ili drugu, adekvatnu alatku na vašem sistemu). Drugačije rješenje bilo bi da se kreiraju manje nastavci inoda (eng "inode extents"). Imajte na umu da, ako ovo napravite na IBM-ovom AIX-u 5L, takav sistem neće više biti dostupan prethodnim verzijama.

istat i stat

Brz način da ispitate inode na AIX-u je upotreba komande istat. Ovom komandom možete naći borj inoda neke datoteke, kao i neke druge osobine inode, poput dozvola nad inodom, vrste datoteke, UID, GID, broj linkova (ne misli se na simboličke linkove), veličinu datoteke, te vremenske markere za posljednje ažuriranje, modifikaciju i pristup.

Listing 2. pokazuje informacije za datoteku /usr/bin/ksh u AIX-u.

# istat /usr/bin/ksh

Inode 18150 on device 10/8      File
Protection: r-xr-xr-x
Owner: 2(bin)           Group: 2(bin)
Link count:   5         Length 237804 bytes

Last updated:   Wed Oct 24 17:37:10 EDT 2007
Last modified:  Wed Apr 18 23:58:06 EDT 2007
Last accessed:  Mon Apr 28 11:25:35 EDT 2008


Pored standardnih informacija koje prikaže istat, možemo saznati i broj inode (inumber) za /usr/bin/ksh. Ako saznamo i logičku particiju na kojoj počiva datoteka, možemo prikazati još više informacija. Jedan od načina da saznamo ovu informaciju je da pogledamo u postavke sistema datoteka (mounted file system) na kom počiva datoteka koja nas interesuje, upotrebom komande df:

# df /usr/bin

Filesystem    512-blocks      Free %Used    Iused %Iused Mounted on
/dev/hd2        16056320   1925384   89%   110034    33% /usr


Datoteka /usr/bin/ksh nalazi se u direktoriju /usr/bin. Posmatrajući izlaz komande df, možemo zaključiti da se direktorij /usr/bin nalazi na sistemu datoteka /usr unutar logičke jedinice /dev/hd2. Tad, kada znamo i broj inode i ime logičke jedinice, upotrebom komande istat s obje informacije kao argumentima komande, možemo odrediti heksadecimalnu adresu bloka diska koji čini datoteku, kako je i prikazano na listingu 3:

# istat 18150 /dev/hd2

Inode 18150 on device 10/8      File
Protection: r-xr-xr-x
Owner: 2(bin)           Group: 2(bin)
Link count:   5         Length 237804 bytes

Last updated:   Wed Oct 24 17:37:10 EDT 2007
Last modified:  Wed Apr 18 23:58:06 EDT 2007
Last accessed:  Mon Apr 28 11:44:20 EDT 2008

Block pointers (hexadecimal):
11620     ef8c0


Linuks (eng: linux) ima vlastitu verziju komande istat: stat. Linuksova komanda stat pokazuje slične informacije, povrh kojih ima i neke opcije koje nisu dostupne u AIX-ovoj istat komandi:

# stat /bin/bash

File: `/bin/bash'
Size: 722684          Blocks: 1432       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 12799859    Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2008-04-06 19:13:50.000000000 -0400
Modify: 2006-07-12 03:11:53.000000000 -0400
Change: 2007-11-22 04:05:30.000000000 -0500


Komanda ls

Prije ili kasnije, u poslu ćete morati da se postarate da uklonite ili obradite datoteke koje imaju crtice ili druge specijalne karaktere u nazivima datoteka, ili datoteke za koje vam se učini da uopšte i nemaju ime. Vjerovatno će to biti slučaj u kom neko pogrešno imenuje neku datoteku.

Pošto većina UNIX-ovih komandi posjeduje "prekidače" (eng: switch) ili opcije, a koji obično počinju s crticom (-) ili dvostrukom crticom (--) može biti poprilično teško manipulisati ovim datotekama upotrebljavajući uobičajene komande poput rm, mv i cp. Srećom, postoje opcije koje pokazuju broj inode datoteke u pitanju. Komanda ls ima takvu opciju:


# ls

-      --     -p     fileA  fileB  fileC  fileD
fileE  fileF  fileG  fileH  fileI  fileJ  fileK  fileL


Koristeći komandu ls -i, možete vidjeti broj inode ispisan pored datoteke, kako se i vidi na listingu 4. Sada, kada znate inode, možete lako manipulisati datotekom:

# ls –i

38988        38991 -p     38984 fileC  38982 fileF  38977 fileI  38978 fileL
38989 -      38980 fileA  38986 fileD  38983 fileG  38987 fileJ
38990 --     38979 fileB  38976 fileE  38985 fileH  38981 fileK


Komanda find

Upotrebom UNIX-ove komande find možete lako privesti kraju ono što ste počeli upotrebom komande ls. Kada jednom saznate broj inoda koje vas interesuju a koje morate obraditi, možete početi!

Da uklonite datoteku koja izgleda kao da nema imena, prosto upotrijebite komandu find s -inum "prekidačem" kako biste locirali broj inode i datoteku. Potom, kada ste pronašli datoteku, koristite komandu file s "prekidačem" -exec kako biste uklonili datoteku:

# find . -inum 38988 -exec rm {} \;

Da preimenujete datoteku, učinite isto, ovaj put koristeći mv mjesto rm:

# find . -inum 38989 -exec mv {} fileM \;

Da biste provjerili da li ste postigli željene rezultate, prosto opet iskoristite komandu ls -i:

# ls -i

38990 --     38979 fileB  38976 fileE  38985 fileH  38981 fileK
38991 -p     38984 fileC  38982 fileF  38977 fileI  38978 fileL
38980 fileA  38986 fileD  38983 fileG  38987 fileJ  38989 fileM


Komanda fsck

Na žalost, hardver ne traje vječno, pa nakon neprekidne upotrebe, sistemi mogu da prestanu da funkcionišu ispravno u jednom momentu. Kada se ovo desi, operativni sistem obara rad na nepredvidljiv način, uslijed nestanka napajanja, ili drugog problema, pa se tako možete susresti s datotekama koje su bile otvorene u momentima pada sistema, i sada ih je potrebno urediti. U ovakvim slučajevima, možete nabasati na poruke o inodama koje treba popraviti, ili da postoji neka greška u vezi inoda. Ako se ovo desi, komanda fsck može biti spasilac! Mjesto potrebe da se povrati sistem iz kakve kopije ili da se čak iznova izoblikuje, možete upotrijebiti komandu fsck kako biste popravili sistem datoteka ili sredili štetu pričinjenu inodama.

Sljedeća komanda pokušava da popravi logičku jedinicu /dev/hd1:

# fsck –p /dev/hd1 –y

Upotrebom komande fsck možete suziti potragu za oštećenim inodama, takođe. Ako tražite neku posebnu inodu, možete koristiti "prekidač" --ii-NodeNumber uz fsck.

Zaključak

Datoteke i direktoriji bili bi gotovo potpuno beskorisni u UNIX-u bez ruke pomoći koje pružaju inode. Nadamo se da, nakon čitanja ovog članka, bolje shvatate ulogu inoda, njihovog značaja u AIX-u, te kako ih uređivati. Možda nikada više nećete gledati na df kao do sada.

 

 

Izvorni tekst napisao je Adam Cormany za IBM, i može se preuzeti iz DeveloperWorks kolekcije tekstova.

Document Actions