Súborový systém UFS2V operačnom systéme FreeBSD existuje iba jediný súborový systém, ktorý je považovaný za jeho natívny, a je teda ako jediný odporúčaný na používanie pod týmto operačným systémom. Tento operačný systém sa nazýva Berkeley Fast File System, ale častejšie sa označuje skratkou UFS, ktorá znamená Unix File System, pretože sa používa na všetkých unixových a unixovských operačných systémoch, ktoré nedisponujú vlastným súborovým systémom. S príchodom vetvy 5 operačného systému FreeBSD sa začala používať nová verzia súborového systému označovaná ako UFS2. Bola vyvinutá, aby odstránila niektoré obmedzenia pôvodného súborového systému UFS. Je teda vhodná príležitosť dozvedieť sa niečo tak o pôvodnom súborovom systéme, ako aj o zlepšeniach v novej verzii. Dva hlavné problémy, s ktorými by sa mal každý súborový systém vedieť vyrovnať, je fragmentácia súborov a konzistencia údajov. Prvý problém nastáva, keď sú súbory uložené na disku tak, že nie sú všetky ich časti uložené súvisle za sebou. Tento jav môže značne znižovať rýchlosť čítania súborov, pretože čítacie hlavičky sa musia neustále presúvať na iné miesta nad povrchom platní pevného disku. V najnepriaznivejšom prípade môže fragmentácia veľkého súboru znížiť rýchlosť jeho čítania na polovicu oproti stavu, keď by bol ten istý súbor uložený na disku nefragmentovane. Dôležité však je, aby sa neudržiavali celistvé iba súbory, ale aj voľné miesto – len tak možno zabrániť fragmenovaniu súborov, ktoré budú zapísané v budúcnosti. Problém druhého typu – inkonzistencia údajov – nastáva, ak je z najrozličnejších príčin (najčastejšie výpadok napájacieho napätia) predčasne prerušená operácia zápisu údajov na pevný disk. Toto môže mať aj bezpečnostné dôsledky; predstavme si nasledujúcu situáciu: Používateľ A vytvorí súbor, uloží do neho svoje údaje a potom súbor zmaže. Používateľ B vyrobí súbor, súborový systém umiestni súbor na rovnaké miesto, kde bol predtým súbor používateľa A. Ak dôjde k výpadku prúdu v okamžiku, keď už boli na disk zapísané alokačné informácie súboru používateľa B, ale ešte neboli zapísané jeho údaje, po novom štarte bude používateľ B vo svojom súbore vidieť údaje používateľa A. Kvôli tomuto problému existujú rozličné nástroje na mazanie súborov (i keď podľa niektorých jazykovedcov sa súbory nemažú ale mastia, ale to len na okraj), ktoré súbor najskôr prepíšu nejakými údajmi (najčastejšie nulami alebo náhodnými znakmi), až potom súbor zmažú. Zmazanie súboru totiž znamená iba označenie miesta na disku, ktoré súbor zaberal, za voľné, neznamená zničenie jeho obsahu. Príkaz na mazanie súborov rm(1) prepisuje mazaný súbor pred jeho zmazaním pri použití voľby -P. Alokácia miesta na diskuSúborový systém začína tzv. superblokom a ďalej je členený na skupiny. Každá skupina obsahuje záložnú kópiu superbloku, nakoľko tento má pre správne fungovanie súborového systému kľúčovú úlohu a jeho strata by viedla k strate všetkých údajov uložených na súborovom systéme. Rozdelenie na skupiny umožňuje ukladať údaje na disku tak, aby mohli byť metaúdaje o súboroch uložené blízko skutočných údajov; pri čítaní sa tak optimálne využije prednačítavanie údajov z pevného disku. Rozdelenie na skupiny umožňuje zároveň implementovať algoritmus alokácie miesta na disku tak, aby sa čo najmenej fragmentovalo voľné miesto na disku. Určitá časť miesta na súborovom systéme môže slúžiť ako rezerva pre administrátora. Predvolená hodnota je 8 percent z kapacity súborového systému. Hodnotu je možné zmeniť pri vytváraní súborového systému programom newfs(8) použitím voľby -m, alebo pomocou rovnakej voľby programu funefs(8). Toto miesto zostane rezervované pre procesy spúšťané administrátorom, procesy bežných používateľov nebudú môcť rezervované miesto používať. Zatiaľ čo na súborových systémoch, kde sú uložené údaje používateľov, je vhodné túto rezervu nastaviť na 0 percent (pretože 8 percent zbytočne rezervovaných na partícii, kde to nemá význam, môže byť stratou, ktorá nie je zanedbateľná), je veľmi vhodné ju ponechať nastavenú na nenulovú hodnotu na tých súborových systémoch, kde sú uložené adresáre /, /var/, /tmp/, /var/log/ či /var/tmp/. Ak nejaký proces spustený administrátorom zaplní aj toto vyhradené miesto, vo výpise programu df(1) sa zobrazí, že je súborový systém zaplnený na viac ako 100%. Súborový systém UFS je ďalej členený na bloky. Predvolená veľkosť bloku je 16kB a dá sa meniť pri vytváraní súborového systému pomocou voľby b programu newfs(8). Ak je veľkosť bloku príliš malá, zaberajú na disku zbytočne veľa miesta metaúdaje (takzvané i-uzly, z anglického i-nodes) veľkých súborov. Naopak, ak je naopak veľkosť bloku príliš veľká, dochádza k plytvaniu miestom pri uložení malých súborov, pretože i jednobajtový súbor zaberá celý blok. Zvyčajne však treba počítať s uložením takých súborov na jednom súborovom systéme, ktorých veľkosti sú od niekoľkých bajtov až po stovky megabajtov alebo dokonca gigabajty. Súborový systém UFS rieši naznačené problémy relatívne jednoducho a napriek tomu dostatočne efektívne a elegantne: Veľkosť bloku je relatívne veľká (v porovnaní s inými súborovými systémami), čím sa efektívne ukladajú veľké súbory. Niektoré bloky sú rozdelené na menšie fragmenty, do ktorých sa ukladajú malé súbory, prípadne aj "konce" veľkých súborov, ktoré nezaberajú celý blok, čím sa odstraňuje plytvanie miestom pri ukladaní malých súborov. Veľkosť fragmentu sa dá nastaviť pri vytváraní súborového systému pomocou voľby -f programu newfs(8). Veľkosť fragmentu musí byť mocninou dvojky v rozsahu od jednej osminy bloku do veľkosti bloku. Najlepšie je, ak je veľkosť fragmentu rovná práve jednej osmine veľkosti bloku; vtedy môže byť jeden blok rozdelený na čo najmenšie fragmenty. Predvolená veľkosť fragmentu je 2048 bajtov. S delením bloku na fragramenty súvisia aj ďalšie vo FreeBSD implementované optimalizácie: Pri rozširovaní súboru umiestneného vo fragmente sa buď alokuje väčší fragment (optimalizácia na využitie miesta na disku, ktorá je ale náročná na vyhľadanie alebo vytvorenie fragmentu správnej veľkosti), alebo sa rovno alokuje celý blok (optimalizácia na rýchlosť). Jadro operačného systému FreeBSD môže samé medzi týmito prioritami prepínať: Ak je vyhradená rezerva voľného miesta na disku menšia ako 5 percent, alebo ak je voľného miesta na disku menej ako je polovica s vyhradenej rezervy, zapne sa optimalizácia na miesto a do systémových logov sa zaloguje nasledujúci záznam: optimization changed from TIME to SPACE Ak sa miesto na pevnom disku uvoľní a začnú sa intenzívne vykonávať operácie zápisu, jadro operačného systému FreeBSD prepne algoritmus na optimalizáciu na rýchlosť. Pri vyhľadávaní voľných blokov na zapísanie údajov súboru sa alokačný algoritmus snaží najskôr zaplniť aktuálnu skupinu. Keď je táto zaplnená, vyhľadáva sa ďalšia skupina, do ktorej možno zapisovať, pomocou tzv. kvadratického rehašovania: súborový systém hľadá voľné bloky v nasledujúcej skupine, potom v skupine o dve vzdialenej, potom v skupine o štyri vzdialenej, atď. Snaha zaplniť skupinu síce vedie k fragmentácii súboru, ale na druhej strane udržuje relatívne nefragmentované voľné miesto, čo je dôležité s ohľadom na zápis nových súborov v budúcnosti. Kvadratické rehašovanie zasa zaisťuje relatívne dobrú distribúciu údajov na súborovom systéme v prípade, že dôjde k súčasnému zapisovaniu dvoch veľkých súborov v tom istom adresári: bez kvadratického rehašovania by sa tieto súbory na súborovom systéme striedali po blokoch, s kvadratickým rehašovaním sa síce tiež striedajú, ale po čoraz väčších úsekoch. Jadro operačného systému FreeBSD robí ďalšiu optimalizáciu zápisu s účelom zabrániť fragmentácii súborov ešte pred ich odoslaním na zápis. Optimalizácia sa uskutočňuje pomocou tzv. klastrovania zápisu: údaje, ktoré sa majú zapisovať, sa skladajú do klastrov s veľkosťou až 128kB, pričom sú pri umiestňovaní do týchto klastrov preusporiadavané tak, aby neboli fragmentované. Klastre sa potom jednorazovo zapisujú na súborový systém. Okrem vyššie spomínaných optimalizácií má jadro operačného systému FreeBSD ešte ďalšie schopnosti: snaží sa ukladať malé súbory veľmi blízko (do rovnakej skupiny) s ich adresármi a i-uzlami a dokáže využiť znalosť fyzickej geometrie pevného disku (t.j. počty stôp, čítacích hláv a sektorov, počet otáčok disku za minútu, atď.) na optimalizáciu uloženia údajov na disk tak, aby ich následné načítanie bolo čo najrýchlejšie. Posledne menovaná optimalizácia v súčasnosti už nemá význam, nakoľko všetky pevné disky robia prednačítavanie údajov samé a o svojej vnútornej geometrii zvyčajne "klamú", aby tak obišli niektoré obmedzenia BIOS-u. Zaisťovanie konzistencie údajovVstupno-výstupné operácie sú v bežných výpočtových systémoch jedny z najpomalších. Operačné systémy preto disponujú rôznymi mechanizmami, ako ich čo najviac zrýchliť. Jeden zo spôsobov, ako vstupno-výstupné operácie urýchliť, je používať prednačítavanie údajov pri čítaní a oneskorovanie zápisu údajov: údaje sa dočasne umiestňujú v operačnej pamäti, namiesto toho, aby sa zapísali na pevný disk. Až keď sa nazbiera dostatok údajov, tieto sa jednorazovo zapíšu. Ak však dôjde napríklad k výpadku napájania ešte predtým, ako sa táto vyrovnávacia pamäť zapíše, môžu byť údaje na pevnom disku nekonzistentné. Operačný systém zvyčajne dokáže určiť, či bol súborový systém odpojený správne. Ak tomu tak nebolo, tak skôr, ako sa súborový systém pri ďalšom štarte operačného systému pripojí, skontroluje sa nejakým nástrojom – vo FreeBSD je to fsck(8), ktorý zvyčajne dokáže uviesť do konzistentného stavu všetky riadiace štruktúry na súborovom systéme (i-uzly a záznamy v adresároch), nie už však samotné údaje. V súboroch teda nemusia byť niektoré údaje zapísané, a – ako bolo naznačené vyššie – súbory tak môžu obsahovať cudzie údaje, ktoré boli predtým v iných súboroch, ktoré boli zmazané. Najjednoduchším a najstarším používaným spôsobom, ako minimalizovať možnosť nastania inkonzistentného stavu na súborovom systéme, je používať tzv. synchrónny zápis údajov. Pri synchrónnom zápise sa údaje neukladajú dočasne v operačnej pamäti, ale vždy sa priamo zapisujú na súborový systém. Pri tomto spôsobe môže tiež dôjsť k inkozistencii údajov, ale nemôže sa stať, ale tento nekonzistentný stav nebude viesť k strate údajov. Program fsck(8) dokáže po nesprávnom odpojení správne uvoľniť stratené bloky a i-uzly. Synchrónny spôsob zápisu má tú nevýhodu, že zápis údajov je niekoľkonásobne pomalší, ako pri asynchrónnom zápise. Navyše, pevné disky zvyčajne disponujú vlastnou vyrovnávacou pamäťou – zapisované údaje najskôr umiestnia do tejto pamäte, operačnému systému oznámia, že údaje sú už zapísané, a až potom ich skutočne zapisujú na pevný disk. V operačnom systéme FreeBSD možno hardvérovú vyrovnávaciu pamäť IDE pevných diskov vypnúť nastavením sysctl premennej hw.ata.wc na hodnotu 0 v konfiguračnom súbore /boot/loader.conf. Vypnutie hardvérovej vyrovnávacej pamäte má však ešte drastickejší dopad na rýchlosť zápisu, ako nepoužívanie vyrovnávacej pamäte v operačnom systéme. Navyše, niektoré IDE pevné disky "klamú" jadro operačného systému o nepoužívaní svojej vyrovnávacej pamäte zápisu, najmä ak je táto vyrovnávacia pamäť viacúrovňová – vtedy sa zvyčajne vypne iba vyrovnávacia pamäť na vyššej úrovni, ale určitá vyrovnávacia pamäť na nižšej úrovni je stále zapnutá. Ďalšia metóda na zabezpečovanie konzistencie údajov súborového systému v prípade výpadku, ktorá je špecifická pre UFS, sa nazýva SoftUpdates. Operačný systém dohliada nad používaním vyrovnávacej pamäte zápisu takým spôsobom, aby boli dodržané závislosti medzi údajmi, ktoré sa zapisujú. Poradie zápisu údajov na súborový systém je potom taký, že kedykoľvek dôjde k výpadku napájania, údaje zostanú konzistentné, a nenastane vyššie spomínaný bezpečnostný problém, kedy by sa v súbore nachádzali údaje z iného súboru. Zabezpečenie konzsitencie údajov na súborovom systéme má však ďalšie úskalia. Všetky algoritmy implementované v softvéri fungujú správne za predpokladu, že hardvér robí skutočne to, čo tvrdí, že robí (viď vyššie zmienený problém s klamaním pevných diskov o nepoužívaní vyrovnávacej pamäte). Ďalšou požiadavkou zvyčajne je, aby pevný disk dokázal urobiť tzv. atomický zápis sektoru, t.j. aby aj v prípade výpadku napájacieho napätia dokázal dopísať sektor, ktorý práve zapisuje, správne až do konca. Ak je teda uloženie údajov dôležité, je potrebné urobiť náležité opatrenia:
Novinky v UFS verzie 2Jednou s častých námietok voči súborovému systému UFS a všetkým z neho odvodených súborových systémov je, že množstvo i-uzlov je dopredu dané pri vytváraní súborového systému. Tým je dopredu obmedzený maximálny počet súborov, ktoré sa dajú na takýto súborový systém uložiť, čo môže byť niekedy obmedzujúce. Opačnou nevýhodou predalokovaného pevného počtu i-uzlov na súborovom systéme je plytvanie miestom, ak je i-uzlov zbytočne veľa. Súborový systém UFS2 preto prichádza z úpravou, ktorá umožňuje i-uzly podľa potreby vytvárať a naopak nepotrebné rušiť. Na súborovom systéme UFS2 je preto vždy dostatok i-uzlov, ale zároveň sú tam nie žiadne nepotrebné i-uzly, ktoré by len zbytočne zaberali miesto. Ďalšie zlepšenia UFS2 sa týkajú posunutia niektorých jeho limitov. Rozsahy údajových štruktúr boli zväčšené tak, aby súborový systém dokázal sledovať súčasné tempo nárastu kapacít pevných diskov a veľkosti ukladaných súborov približne ďalších 20 rokov. Bol zväčšený aj rozsah údajových štruktúr, do ktorých sa ukladajú časové známky vytvorenia, modifikácie a prístupu k súboru, takže "v dohľadnej dobe" 136 biliónov rokov nehrozí pretečenie údajov v týchto štruktúrach. Na novej verzii súborového systému UFS došlo k zlepšeniu podpory rozšírených atribútov súborov a s tým súvisia aj zmeny v SoftUpdates. SoftUpdates boli navyše upravené takým spôsobom, aby korektne fungovali na malých súborových systémoch, ktoré sú takmer úplne zaplnené. Implementácia SoftUpdates v prvej verzii súborového systému UFS totiž mohla viesť k zdanlivému zamrznutiu počítača na dobu až niekoľkých minút, ak bol súborový systém takmer úplne zaplnený. Najviac diskutované sú možnosti súborového systému UFS2 vytvárať tzv. snapshoty súborového systému, t.j. akúsi snímku stavu súborového systému v aktuálnom čase, a možnosť prevádzať kontrolu integrity údajov na súborovom systéme, ktorá sa vykoná práve na vykonanom snapshote. Toto umožní robiť kontrolu integrity údajov na súborovom systéme počas jeho bežného používania, čo môže byť mnohokrát veľmi žiaduce. ZáverTo, že v operačnom systéme FreeBSD existuje iba jeden natívny súborový systém, nemusí byť nutne obmedzením. Tento systém je kvalitný a odskúšaný mnohými používateľmi. Je preto vhodný na použitie tam, kde je potreba ukladať údaje spoľahlivo, ukladať obrovské súbory alebo veľké množstvo súborov. Určite nie je náhodou, že mnohé spoločnosti ukladajúce a poskytujúce obrovské množstvá údajov používajú práve operačný systém FreeBSD. |