Ugrás a tartalomhoz

Operációs rendszerek mérnöki megközelítésben

Benyó Balázs, Fék Márk, Kiss István, Kóczy Annamária, Kondorosi Károly, Mészáros Tamás, Román Gyula, Szeberényi Imre, Sziray József

Panem Kiadó

6.6. A Windows NT fájlrendszere (NTFS)

6.6. A Windows NT fájlrendszere (NTFS)

Ebben az alfejezetben a Windows NT fájlrendszerének belső felépítését és működését mutatjuk be. A Windows NT által használt fájlrendszer elterjedt rövid elnevezése: NTFS (Windows NT File System).

6.6.1. Elvárások az NTFS-sel szemben

Tervezéskor az NTFS elé állított legfontosabb követelmények a következők voltak:

  • Megbízható fájlrendszer, vagyis adatállományok sikertelen műveletek utáni visszaállíthatóságának, helyrehozhatóságának garantálása (re­cover­ability).

  • Állományok biztonságának, vagyis illetéktelen elérésektől történő vé­delmének garantálása (security).

  • Hibatűrés, redundáns tárolás lehetősége, vagyis az egyes fájlok elérhetőségének biztosítása (fault tolerance).

  • Nagy diszkek és nagy fájlok tárolásának lehetősége.

A megbízható fájlrendszer megvalósítását két alapvető eszközzel éri el a Windows NT:

  • Tranzakciónkénti feldolgozás (transaction processing).

  • Redundáns tárolása a fontos adatoknak.

A tranzakciónkénti feldolgozás a lemezműveletek biztonságos végrehajtásának elve, melyet a következő alfejezetben mutatunk be.

A redundáns tárolás azt jelenti, hogy a rendszer duplikálja a működés szempontjából fontos adatállományokat a lemezen. Igyekszik a lemez egymástól távoli régióiban tárolni a másolatokat, hogy csökkentse mindkét másolat egy időben történő sérülésének valószínűségét.

A fájlrendszer biztonságának garantálása érdekében a rendszer minden állomány-hozzáféréskor ellenőrzi az elérési jogosultságot. A fájlelérés ellenőrzése illeszkedik az NT általános objektumelérést ellenőrző biztonsági rendszerébe, amiről a későbbiekben még szólunk.

A nagy diszkek kezelését, illetve nagy fájlok tárolását az NT 64 bites clus­ter-leíró használatával támogatja. Egy fájlrendszerben összesen 248 fájl lehet egyidőben. Egy fájl mérete maximum 264 byte lehet. A fájlrendszer további korlátainak ismertetésére a tárolás részleteinek leírásakor még visszatérünk.

6.6.1.1. Tranzakciónkénti feldolgozás

A tranzakciónkénti feldolgozás (műveletenkénti feldolgozás) a fájlhozzáférések megbízható végrehajtását teszi lehetővé.

A tranzakciónkénti feldolgozás a „Mindent vagy semmit” elvre épül. Ez esetünkben azt jelenti, hogy egy lemezművelet vagy teljesen végre­hajtódik, vagy ha valamilyen oknál fogva megszakadna, a rendszer visszaállítja a fájlrendszer eredeti állapotát. Így mindig konzisztens fájlrendszer lesz a lemezen.

A rendszer az egyes fájlrendszeren végzett műveleteket lépésekre bontja, és kiegészíti azokat a megbízhatóságot növelő redundáns adminisztrációs lépésekkel. Ezek után meghatározza a lépések olyan sorozatát, mely lehetővé teszi azt, hogy a lemezen minden pillanatban csak konzisztens adatok legyenek, illetve a lemezen lévő adatok alapján visszaállítható legyen egy-egy művelet megkezdése előtti állapot.

Egy fájlírási művelet során végrehajtott lépéseket a 6.17. ábra mutatja be:

6.17. ábra. ábra - Egy lemezírási művelet kiszolgálása

Egy lemezírási művelet kiszolgálása


A fájlírási művelet kiszolgálásának lépései:

  • Az NTFS driver üzenetet küld az LFS-nek, hogy írás tranzakció következik, adminisztrálja azt (készítsen a tranzakcióról ún. log rekordot).

  • Az LFS írja a cache-ben lévő log fájlt.

  • Az NTFS végrehajtja a kért utasítást, írja a (cache-ben lévő) fájlt.

  • A CM üzen, hogy az írás befejeződött, minden adat megvan.

  • Az LFS megadja, hogy milyen adatokat kell a cache-ből üríteni. (A meg­változtatott fájlt és a log fájlt.)

  • A CM kiírja a lemezre a log fájlt.

  • A CM kiírja a lemezre az adatokat, vagyis a megváltoztatott fájlt.

A lemezen történt műveletek adminisztrálása úgy történik, hogy a rendszer a műveletek leírását, illetve a visszaállításukhoz szükséges adatokat egy ún. log fájlba írja. Ennek a Log File Service modul által használt fájlnak a szerkezetét a 6.18 ábra mutatja be.

6.18. ábra. ábra - A lemezműveletek adminisztrálására használt log fájl szerkezete

A lemezműveletek adminisztrálására használt log fájl szerkezete


6.6.1.2. Réteg szerkezetű device driver struktúra

A réteg szerkezetű device driver struktúra lehetővé teszi a különböző funkcionalitású driverek rugalmas használatát, illetve a driverekből az igényeknek megfelelő rendszer építését. A módszer lényege, hogy a drivereknek különböző szintjeit különbözteti meg. A szintek funkcionalitása, illetve az adott funkcionalitáshoz tartozó interfész jól definiált. Emiatt a drivereket egyszerű egymáshoz illeszteni.

A réteg szerkezetű device driver struktúra lényegét legegyszerűbben egy példán keresztül érthetjük meg. A 6.19 ábrán egy lemez írási művelet végrehajtása látható. Az API-hívást az Executive réteg továbbítja az B/K Manager felé, amely eléri a Disc Drivereket. A File Manager Driver előállítja a fájl-handle és az adatbuffer alapján az írandó lemezen a megcímzendő cluster címét, illetve az írandó adatot.

Egyszerű esetben a File System Driver (az I/O Manageren keresztül) eléri a Disk Drivert, ami végrehajtja a lemez írását.

A réteg szerkezetű driverstruktúrának köszönhetően lehetőség van azonban további driverréteget a két szint közé illeszteni. Ebben az esetben a beillesztett driverréteg a File System Driver felé úgy viselkedik, mit egy egyszerű Disc Driver, de belül bonyolultabb többletszolgáltatásokat nyújtó funkciókat valósíthat meg. Megvalósíthat például hibatűrő (redundáns) tárolást (például lemez tükrözést) vagy megvalósíthat több lemezen tárolt (multivolume file system) fájlrendszert, ami lehetővé teszi különösen nagy fájlok tárolását.

6.19. ábra. ábra - Réteg szerkezetű device driver struktúra

Réteg szerkezetű device driver struktúra


Az NT által támogatott hibatűrő adattárolási technikák:

  • RAID level 1: diszkek tükrözése,

  • RAID level 5: diszkszeletek prioritásos védelme.

A RAID a Redundant Array of Inexpensive Disks (olcsó lemezegységek redundáns tára) rövidítése. Ezek a hibatűrő tárolást kommersz elemekkel lehetővé tevő módszerek szabványban definiáltak.

6.6.2. Az NTFS további előnyös tulajdonságai

A fenti tulajdonságokon kívül az NTFS további előnyös tulajdonságokkal rendelkezik. Ezek a következők:

  • Streamek használata. Egy adott néven elérhető adatállománynak több függetlenül elérhető alszekciója (streamje) lehet. Ezeket külön-külön írhatjuk és olvashatjuk.

  • UNICODE használható a fájlnevek megadásakor. A UNICODE használatán túl lehetőség van maximum 255 karakter hosszú fájlnevek választására, ami szóközöket, illetve pontokat is tartalmazhat.

  • Indexelés lehetősége. Egy fájlrendszerben készíthetünk egy ún. index buffert, ami egy adott tulajdonság alapján tartalmaz közvetlen hivatkozásokat fájlokra.

  • Dinamikus hibás (bad) szektorkezelés. A rendszer futás közben észleli, ha egy cluster meghibásodik, és utána többet nem használja. Hibatűrő fájlrendszer esetén akár el is fedheti a rendszer az adott lemezhibát.

  • POSIX-szabvány támogatása:

    – hard link

    – kisbetűt és nagybetűt megkülönböztethető (case sensitive) fájlnevek

    – időbélyegek (time stampek) használata.

6.6.3. Az NTFS által használt adattípusok, adatszerkezetek

Kötet (volume)

A lemez egy logikai partícióját nevezzük kötetnek. Minden kötethez egy logikai fájlrendszerhez tartozik, ami formázáskor alakul ki. Egy lemezen így lehet akár több, akár eltérő típusú (például FAT és NTFS) volume is.

Cluster

Az adattárolás alapegysége (lásd blokk). Néhány egymás után következő szektor, melyeket a rendszer együtt kezel. Az NT csak clustereket tart nyilván.

Logical Cluster Number (LCN)

Egy adatszerkezethez, például egy fájlhoz tartozó clusterek sorszáma. Egy fájlhoz tartozó clustereket például 0-tól n-ig folyamatosan számozzuk.

Virtual Cluster Number (VCN)

A lemezen elhelyezkedő clusterek azonosítására szolgáló sorszám. A rendszer egy lemezt a clusterek sorozatának lát. A lemezmeghajtó feladata, hogy a VCN alapján megtaláljon és elérjen egy adott a VCN-hez tartozó clustert.

A lemezen tárolt adatszerkezetek eléréséhez pontosan az LCN-ek VCN-ekhez történő hozzárendelését kell megadni, vagyis azt, hogy a fájl egy adott LCN-el jelölt clustere, melyik disk clusterben tárolódik, vagyis melyik VCN-el érhető el. Mindezt a 6.20. ábrán szemléltetjük.

6.20. ábra. ábra - LCN és VCN egymáshoz rendelése

LCN és VCN egymáshoz rendelése


NTFS metadata

Azoknak az adatoknak a gyűjtőneve, amelyek egy fájlrendszer kezeléséhez, illetve a benne tárolt fájlok eléréshez szükségesek. Az NTFS tartja magát ahhoz az elvhez, hogy minden, ami a lemezen van, az fájl. Így például a volume-leíró, a boot információ, a hibás szektorok leírása stb. mind-mind egy-egy fájlként van eltárolva.

Az NTFS metadata információkat tároló fájlokat a 6.21. ábra mutatja be.

6.21. ábra. ábra - NTFS metadata információk

NTFS metadata információk


MFT (Master File Table)

A Master File Table a fájlrendszerben tárolt fájlok leírását, elérésükhöz szükséges információt tartalmazza. Az NT szemlélete a következő.

Egy fájl nem más, mint egymással összerendelt adatok halmaza. A fájl neve, keletkezési időpontja, elérhetősége stb. mind-mind egy-egy adatokkal jellemzett „attribútuma” az adott fájlnak. Maguk a fájlban tárolt adatok is a fájl tartalom nevű attribútumának leírása.

A fájlok az ún. file rekordokban tárolódnak, amelyben a fájl attribútumok (file attribute) azonosítója (neve) és az attribútumhoz tartozó adatmezők van egymás után felsorolva.

A Master File Table nem más, mint file rekordok sorozata. A tárolás megkönnyítése érdekében a Mastar File Table nem az egész file rekordot, hanem csak annak első 1K-s darabját tartalmazza. A későbbiekben majd meglátjuk, milyen technikával tárolja az NT az 1K-nál nagyobb file rekordokat, illetve a rekordokban levő attribútumokat.

Ha végiggondoljuk az NT tárolási technikáját, akkor látjuk, hogy a Master File Table nem más, mint egy 1K-s bejegyzéseket tartalmazó táblázat. A táblázat minden bejegyzése egy-egy fájlt azonosít. A fájl egyedi azonosítója ezek után az a sorszám lesz, ami megmondja, hogy az MFT hányadik bejegyzése tartozik hozzá. A bejegyzések minden fájlra vonatkozó információt tartalmaznak, azonban szerkezetük nem kötött. A rekordok szerkezetének leírását, vagyis az egyes attribútumok tárolásának módját későbbi fejezetben ismertetjük.

A Master File Table első 16 bejegyzése mindig azonos fájlokhoz tartozik. Ezek az ún. rendszerfájlok a fájlrendszer számára fontos adatokat tartalmazzák. Nevük mindig $ jellel kezdődik. A Master File Table szerkezetét a 6.22. ábra tünteti fel:

Az ábrán látható, hogy az első 16 bejegyzést az operációs rendszer használja, utána pedig a felhasználói fájlok következnek.

6.22. ábra. ábra - A virtuális cím felépítése

A virtuális cím felépítése


Fontos megjegyezni, hogy a könyvtárak leírása is egyszerű felhasználói fájlokban tárolódik. Ebben az adott könyvtárban levő fájlok neveinek és a fájlokhoz tartozó MFT-bejegyzés sorszámának összerendelése található. Ennek megfelelően az egyik felhasználói fájl például a főkönyvtár leírását fogja tartalmazni. Ennek helyét azonban a fix helyen elérhető rendszerfájlok tartalmazzák.

6.6.4. Fájlok elérése NTFS alatt

Egy lemeztranzakciót az NT következő módon hajt végre. A lépések többségét csak a kötet rendszerindulás utáni első elérésekor kell végrehajtani.

  1. A $Boot fájl elérése, amely rögzített helyen van.

  2. $MFT elérése. A $Boot tartalmazza az MFT kezdetének helyét. Az $MFT mindig az első MFT rekordhoz tartozik, $MFTMirr a másodikhoz. $LogFile a harmadikhoz stb.

  3. $MFT ($MFTMirr) elérése, memóriába tárolása.

  4. $LogFile és más meta-fájlok beolvasása.

  5. A kötet (volume) rendszerindulás (boot) utáni első elérésekor végrehajtja az ún. recovery műveletet. A recovery nem más, mint a fájlrendszer konzisztens állapotának ellenőrzése, szükség esetén annak helyreállítása. A log fájl alapján ellenőrzi a rendszer, hogy kell-e tranzakciót „visszagörgetni” vagy újra végrehajtani. Recovery után a lemez konzisztens állapotba kerül.

  6. A root „\” könyvtárhoz tartozó MFT-bejegyzés megkeresése, illetve a memóriában tárolása a későbbi elérések gyorsítása érdekében.

  7. A tényleges fájltranzakció végrehajtása. Természetesen a log fájl írása minden tranzakciónál folyamatosan történik.

6.6.5. File ReKord

Mint már említettük, a file rekord tartalmazza a fájlhoz tartozó összes információt. Az adatok attribútumok formájában tárolódnak. Egy tipikus attribútum halmazt mutat be a 6.23. ábra.

Az attribútumok értéke tárolódhat rezidens és nem rezidens módon attól függően, hogy fizikailag hol helyezkedik el az attribútumot jellemző adathalmaz. Ha közvetlenül az attribútum header után tárolódik, akkor rezidens tárolásról beszélünk. Nem rezidens tárolás esetén az attribútum után csak egy hivatkozást találunk, hogy a lemez mely clustere tartalmazza az attribútum adatait.

6.23. ábra. ábra - Egy tipikus file rekord

Egy tipikus file rekord


6.6.5.1. Rezidens tárolás

Az attribútum értékét reprezentáló bináris információ közvetlenül az attribútum header után van tárolva a rekordban. Erre vonatkozóan nézzünk egy példát a 6.24. ábrán:

6.24. ábra. ábra - Attribútumok rezidens tárolása

Attribútumok rezidens tárolása


6.6.5.2. Nem rezidens tárolás

A header után csak az attribútum értékét reprezentáló adatok helye van rögzítve. Például az adatokat tartalmazó buffer címeit tárolja a rendszer a rekordban. Például egy könyvtár nem rezidens tárolása a 6.25. ábra szerint néz ki (kétszintű indexelés, dinamikus méretű indextáblával).

A nem rezidens tárolás esetén a header jelzi a nem rezidens tárolás tényét. A fájl rekordba ezután egy indextábla kerül, ami megmutatja, mely buffe­rek-ben tárolódik az adott attribútum értéke. Ezután egy VCN–LCN megfeleltetési táblázat következik, amelynek segítségével az attribútumok értékét tároló bufferek közvetlenül elérhetők. Az attribútum leírás végén egy táblázat következik, mely megmutatja, mely clusterek kihasználtak és mely clusterek nem használtak a bufferekben.

Az adatok fent leírt módon történő tárolását nevezzük dinamikusan növekvő indextáblát használó egyszintű indexelésnek.

6.25. ábra. ábra - Attribútumok nem rezidens tárolása

Attribútumok nem rezidens tárolása