Windows - Az NTFS fájlrendszer programozói megközelítésben

3. rész

Cikksorozatunk harmadik részében az NTFS hard linkekkel foglalkozunk. Megnézzük mi a különbség a parancsikonokhoz képest, milyen körülmények között használhatók és használatuk milyen további feltételekhez van kötve. Programozóknak szól a létrehozást végző Windows API függvény, de rendszergazdák is készíthetnek hard linkeket parancssorból egy egyszerű utasítás segítségével.
Parancsikonok (Shortcuts)
A parancsikonok a Windows 95-el terjedtek el a Microsoft operációs rendszerek világában. Ésszerű megoldást nyújtottak annak megakadályozására, hogy egy fájlt több példányban kelljen tárolni a merevlemezen. Maguk a parancsikonok is fájlok (lnk kiterjesztéssel) és egy másik fizikai fájlra mutatnak. Ha rákattintunk, olyan mintha arra a fájlra kattintanánk, amelyikre mutatnak. Egy fájlhoz több parancsikont rendelhetünk, több néven. Leggyakrabban az Asztalon (Desktop) és a Start menüben használjuk őket a lehető legjobban leegyszerűsítve egy program elindítását vagy egy mappa megnyitását.
A legfőbb probléma velük kapcsolatban, hogy amint áthelyezzük, átnevezzük a célfájlt, melyre mutatnak, elveszítik működőképességüket. A rendszer ilyenkor azonnal felajánlja, hogy megkeresi a hivatkozás tárgyát, de ez egyrészt sokáig tart, másrészt nem jár 100%-os eredménnyel. A célvesztés legfőbb oka, hogy a parancsikonok alkalmazás szinten működnek, ellentétben más operációs rendszerek hasonló célú ikonjaival, melyek a rendszer illetve a fájlrendszer szintjén helyezkednek el.
Hard Linkek (Hard Links)
A hard linkek is parancsikonok csak az NTFS fájlrendszer szintjén találhatók, így viselkedésük és megjelenési formájuk merőben eltér az átlagos parancsikonokétól. Adva van egy fájl, készítünk hozzá egy vagy több hard linket. Mi történik? Az Intézőben úgy látszik, mintha az adott fájlt átmásoltuk volna, mert annyi példány jön létre belőle, ahány hard link tartozik hozzá. A "másolatok" lehetnek különböző könyvtárban és lehetnek azonosban is, de ekkor különböző névvel. Ha bármelyik példánynak változik a tartalma, a változás azonnal megjelenik a többiben is. Ez azért van, mert csak egy fájl létezik és a többi rámutató hivatkozás csak úgy látszik, mint egy másik fájl. A példányokat - pontosabban hivatkozásokat - tetszés szerint másolhatjuk, mozgathatjuk, mindig működőképesek maradnak, mert a rendszer az NTFS fájlrendszer szintjén gondoskodik az elérési információ valósidejű frissítéséről.
Mi történik ha egy hard linket nem NTFS fájlrendszerre másolunk? Készül egy másolat az eredeti fájlból, de azután már két különböző állománynak minősülnek, külön szerkeszthetők, eltérhet a tartalmuk és többé nem lesz közük egymáshoz. Ha visszamásoljuk NTFS-re, megmarad a különbözőség, hard linket visszaállítani nem lehet.
Fontos, hogy hálózati mappákhoz nem hozhatók létre, még akkor sem, ha meghajtó betűjelhez csatlakoztatjuk őket.
A rendszer helyreállítás (System Restore) szolgáltatás és a hard linkek
Tegyük fel, hogy egy fájlhoz készítünk egy hard linket, majd letöröljük. A Windows XP-ben található rendszer helyreállítás szolgáltatással megpróbáljuk visszaállítani a készítés utáni állapotot. Joggal várnánk el, hogy megmarad az eredeti állomány és a rámutató hard link. A valóságban azonban ez nem így működik, mert az eredeti fájlról keletkezik egy másolat (nem hard link!) és ezután két különböző állományként viselkednek.
Hard linkek készítése
Windows XP-ben található egy parancssori segédprogram FSUTIL néven. Az alábbi paraméterekkel indítva létrehoz egy hard linket:
fstuil hardlink create új_fájl meglévő_fájl
Programból a CreateHardLink() API függvényt lehet használni erre a célra.
BOOL CreateHardLink(
  LPCTSTR lpFileName,                          
  LPCTSTR lpExistingFileName,               
  LPSECURITY_ATTRIBUTES lpSecurityAttributes  
);  
Ahol az "lpFileName" paraméterbe a létrehozandó hard link fájlnevet kell beírni, az "lpExistingFileName"-be pedig annak a fájlnak a nevét, mely a link hivatkozását jelenti. Az "lpSecurityAttributes" nem kerül feldolgozásra. Ha a függvény visszatérési értéke nullától eltérő, akkor minden rendben zajlott. Ha viszont nulla, akkor a "GetLastError" függvény meghívása adja vissza a hiba kódját. Ezzel a módszerrel maximum 1023 db hard link hozható létre. Csak Windows NT/2000/XP rendszerekben található meg, a Windows 9x sorozatból kimaradt (értelemszerűen, hiszen azok nem kezelik az NTFS fájlrendszert).
Sajnos a Windows felhasználói felülete (shell) nem nyújt támogatás a hard linkek kezeléséhez.

Az NTFS fájlrendszer programozói megközelítésben cikksorozat