Szerző: surmo

2000. április 12. 00:00

A linux alapjai III.

A filerendszer ismerete minden linuxos számára elengedhetetlen. Olyannyira, hogy már az installáló program - egyébként egyszerű - kérdéseire sem tudunk válaszolni, ha nem ismerjük a fogalmakat, amelyek legfeljebb a másfajta elnevezések miatt lehetnek először furcsák, azonban hamar világossá válik a jelentésük.

A linux filerendszerének logikai felépítése hasonlatos a dos/windows-éhoz. Pontosabban, ez utóbbi hasonlít a linuxhoz, hiszen a harminc éves Unix szabvány (gyenge minőségű) koppintása. Az állományok ugyanúgy könyvtárakban vannak, a könyvtárak pedig ugyanolyan hierarchikus szervezésűek, azzal az eltéréssel, hogy nem (backslash) karakter az elválaszó, hanem / (per). A meghajtók (merevlemezek, partíciók) nem betűjelekkel (A:, C:, stb.) vannak azonosítva, hanem a könyvtárstruktúra részeként jelennek meg (erről kicsit később, a Mount oldalon). Mit is takar ez? Egy, és csak egy gyökérkönyvtár (root directory) van, ennek jelölése "/", minden alkönyvtárnak a gyökérkönyvtár tagjának kell lennie. Van egy speciális könyvtár linuxban, a "/dev" - itt a per jel azt jelöli, hogy a "dev" könyvtár közvetlenül a gyökérkönyvtárhoz kapcsolódik -, ez a "devices" rövidítése. Mint a neve is mutatja, ebben találhatók az eszközök, legalábbis azok logikai megjelenése a linux számára. Eszközök alatt minden olyan hardware elem értendő, amelyhez a kernel driverrel rendelkezik, tehát merevlemezek, CD-olvasó/író, IDE, SCSI és egyéb csatolóbuszra kapcsolt perifériák, hangkártyák, billentyűzet, egér és még sokminden más. Minden eszköz egy file-ként érhető el, így például:
  • /dev/mouse: egér, valójában egy mutató a /dev/psaux-ra (PS/2 device), vagy /dev/ttyS0-ra (serial port 1 - a COM0 megfelelője, soros egér esetén), stb.
  • /dev/hda: az első merevlemez, illetve az egyetlen, ha nincs több a gépben (hd = hard disk). A továbbiak /dev/hdb, /dev/hdc, stb. sorrendben kerülnek automatikusan elnevezésrea gép bootolásakor, ide a CD-k is beszámítanak. Az adott periféria esetleges partíciói pedig számozva vannak, pl. /dev/hda1, /dev/hda2.
  • /dev/cdrom: neve elég jól mutatja, hogy mi is ez, egy mutató a megfelelően besorolt CD rom-ra, pl. /dev/hdb.
  • /dev/console: ha olvasunk róla, akkor ez a billentyűzet, ha írunk bele, akkor alapértelmezés szerint a monitor.
Ha ezeket a file-bejegyzéseket piszkáljuk, akkor valójában a kernel driverével kommunikálunk, a kernel tudja, hogy melyik file mit jelent a számára és mit kell vele tennie. Ez a legalacsonyabb (leggépközelibb) szintje az operációs rendszernek, amivel a felhasználónak foglalkoznia kell(het), ennél mélyebbre már csak a programozóknak kell ásniuk. Egy szemléletes példa ezeknek a /dev/xxx bejegyzéseknek a közvetlen használatára az image olvasása/írása: ahogyan az ismert Norton Ghost program a partíciót teljes egészében leolvassa és file-ba menti, úgy érhetjük el mi is a merevlemez partícióját közvetlenül a /dev/hda[X] olvasásával/írásával. Ha CD-ROM-ot adunk meg (például /dev/hdb), akkor az eszköz olvasása ISO formátumú CD image-t for produkálni. (Bátrabbaknak: dd parancs, NAGYON vigyázzunk az írással!) A linux filerendszerében további meghatározott nevű és funkciójú könyvtárak találhatók, ezeket később részletesebben bemutatjuk.

[oldal:A mount]

Az egyik legfontosabb fogalom, amivel mindjárt az installálásnál találkozunk, a mount. Linux rendszerben ez egy parancs is: "mountolni" annyit jelent, mint valamely fizikai egységet, amin filerendszer van, logikailag a meglévő struktúrához csatolni. Ha például merevlemezünk első partícióján windows foglal helyet, ezt beilleszthetjük a linuxos könyvtárstruktúrába a kernelnek köszönhetően, amely gond nélkül írja-olvassa a FAT (dos és windows95/98 által használt filerendszer) valamennyi ismert változatát. Létrehozhatunk a példa kedvéért egy /win könyvtárat, ami valójában üres, de a windowsos partíció beillesztése után láthatjuk a tartalmát, mert a kernel tudni fogja, hogy az ezen a könyvtáron belüli hivatkozásokat a másik partícióra kell irányítani. Ezek az alkönyvtárakba beillesztett partíciók lesznek a C:, D: és a többi, windows-ban betűjellel azonosított meghajtó megfelelői. Így a "mountolás" után elérhető lesz a /win/Windows, /win/Windows/System, /win/Temp, és minden, amit windows alatt létrehoztunk. Természetesen írhatunk is ide, másolhatunk file-okat, amiket aztán windows-ban is látni fogunk. Visszafelé azonban ez nem igaz, a windows - néhány kényelmetlen és nem megbízható segédprogram nélkül - nem képes kezelni a linux lényegesen bonyolultabb (ext2) filerendszerét.

Itt kerül elő a /dev-ben található bejegyzések fontossága: a filerendszer csatolása nem más, mint egy könyvtár és egy meghajtó, például /win és /dev/hda2 összekapcsolása. Enélkül a partíción lévő adatokat csak image-ként érhetjük el, az egyes file-okat nem. Azért van szükség erre az eljárásra, mert mountolni sokféle filerendszert lehet, amelyek nem szükségszerűen a merevlemez partíciói vagy CD meghajtók, de lehetnek akár a hálózaton keresztül elérhető gépek kiajánlott vagy megosztott meghajtói is, a linux kernel pedig biztosítja a tökéletes átlátszóságot, azaz egy csatolt filerendszer használatakor a programok, illetve a felhasználó elől rejtve marad, hogy az valójában hol helyezkedik el. A file-okon végezhető műveletek általánosságban ugyanazok, a kernel pedig magától megoldja az esetlegesen szükséges hálózatkezelést. Jó példa erre a samba programcsomag, amellyel a windows-ban megismert share-elt (megosztott) könyvtárakat lehet linuxban mountolni egy alkönyvtárba és használni. Ezen kívül mountolható még az Unix világában általános szabványként elfogadott NFS (Network File System), illetve a fejlesztés alatt álló CODA filerendszer is. Ennek a modellnek az alkalmazásával általános módszerekkel lehet a csatolt filerendszereket kezelni, legyen az floppy meghajtó vagy file-ban levő ISO formátumú CD image, amelyet szintén lehet mountolni és így a tartalmát vizsgálni, illetve a file-okat egyenként elérni (kernel: loopback device support).

A csatolt filerendszereket, ha már biztosan nincs rájuk szükség, érdemes leválasztani a könyvtárstruktúrából. Erre szolgál az umount parancs, amely a gyorsítótárban (cache) esetlegesen levő adatokat felírja a helyükre, majd törli a csatolással kapcsolatos adminisztratív bejegyzéseket. Ezt mindenképpen el kell végezni - shutdownkor a scriptek le is csatolnak minden filerendszert -, mert különben előfordulhatna, hogy a felhasználó számára látszólag befejeződött írási művelet valójában még nem hajtódott végre, és a kiírandó adat a cache-ben várja a sorsát, miközben a médiumot (tipikusan pl. floppylemez) már eltávolítottuk, és ez adatvesztéshez vezetne. A másik ok a konzisztencia megőrzése. A kernel szereti megelőzni a problémát, és nem akar olyan helyzetbe kerülni, hogy el akar érni olyan file-t, ami az ő tudomása szerint elérhető, azonban a kedves felhasználó (rosszabb esetben - kivédhetetlen - a hálózat ördöge) már elérhetetlenné tette. Tehát a lecsatolás előbb-utóbb kötelező. A kernel védekezik, amennyire tőle telik, azaz például CD-rom használata esetén amíg a lecsatolás meg nem történt, a meghajtó lockolva van, a CD-t nem engedi kivenni. Ennek a mechanizmusnak egy kellemetlen következménye, hogy mindent, így az esetleg gyakran cserélt floppylemezeket is mountolni-umountolni kell. Szerencsére ennek a helyzetnek az orvoslására megszületett az mtools programcsomag, amellyel FAT formátumra formázott floppy lemezeket mount nélkül lehet kezelni (mdir, mcopy, stb).

Folyt. köv.
A cikkekkel kapcsolatos észrevételeket, javaslatokat, kritikákat szívesen fogadjuk.

Nagyon széles az a skála, amin az állásinterjú visszajelzések tartalmi minősége mozog: túl rövid, túl hosszú, semmitmondó, értelmetlen vagy semmi. A friss heti kraftie hírlevélben ezt jártuk körül. Ha tetszett a cikk, iratkozz fel, és minden héten elküldjük emailben a legfrissebbet!

a címlapról