Uopšteno o UNIX-u: sve je u inodama
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.
Дејства на документ