Datotečni sustav jedan je od najvažnijih dijelova operativnog sustava. Brine se o korisničkim podacima i osigurava da su jednaki onima koji su svojevremeno zapisani. On treba - osim integriteta podataka - biti i apsolutno pouzdan i dovoljno brz, iako je smješten na mediju koji je na zlu glasu zbog nedostataka i brzine i pouzdanosti. U posljednjih nekoliko godina, ext2 bio je praktički najkorišteniji takav sustav. Svakodnevno iskušavan na milijunima servera i kućnih računala, potvrdio se kao robustan i pouzdan. Ali Linux se sve više koristi i na enterprize sustavima, gdje je nužno, primjerice, brzo podizanje sustava nakon rušenja. U slučajevima velikih particija, pokretanje se mjeri u desecima minuta, što je nedopustivo u okolinama gdje svako stajanje rezultira velikim gubicima. Osim toga, velike particije, brz I/O, spremanje desetaka tisuća datoteka i terabajta podataka - često zagušuju ext2 particije. Alternativa postoji, pa čak i više opcija: Ext3, ReiserFS, XFS i JFS. Neke od njih su open-source projekti, dok su neke rezultat otvaranja koda profesionalnih sustava poput IBM-ovog i SGI-evog. Osim podrške za navedene situacije, svako rješenje podržava i journaling, koji poboljšava performanse, ubrzava ponovno pokretanje i smanjuje fragmentaciju. Sva ta poboljšanja vrlo su važna za poslužitelje koji drže složene baze ili se jednostavno od njih zahtijeva maksimalna iskoristivost. Iako na prvi pogled te zadaće nisu potrebne kućnim računalima, sve više distribucija standardno ih uključuje, a prevladavaju ext3 i ReiserFS.

EXT2

Po Čemu je stari ext2 loš, a koristi se već toliko godina? Sve je dobro dok sustav radi cijelo vrijeme. No što ako iznenada nestane struje, netko slučajno pritisne tipku reset ili se jednostavno sustav sruši, greškom u hardveru ili softveru? U tom trenutku možda je baš neka datoteka bila zapisivana na disk. Nemoguće je znati koji je dio datoteke zapisan, možda samo polovica, a možda samo opći podaci o datoteci (tzv. meta-podaci). Još je gori slučaj ako je prilikom zapisivanja pisano po direktoriju (koji je i sam datoteka), što može onesposobiti cijeli disk ili njegov dio. Pogledajmo koji su procesi uključeni u zapisivanje datoteke koja se povećala. Primjerice, dodana su još tri procesa. Najprije se alociraju tri nova prazna bloka i izbrišu iz tablice praznih, zatim se u inode te datoteke zapišu podaci o poziciji tih blokova na disku, te se konačno zapišu i sami podaci. Moraju se još i obnoviti podaci o dozvolama, vlasništvu i vremenu, te preostalom praznom mjestu na disku. Iako se korisniku to čini kao jedna operacija, očito je da se to odvija u slijedu, korak po korak. Ako se operacija prekine u bilo kojoj međufazi, podaci o datoteci više nisu točni jer se ne može znati koji su koraci završili, a i novi podaci su izgubljeni. Stariji ne-journal datotečni sustavi ovise o fsck-u (ekvivalent scandiska) koji će kod pokretanja sustava pokušati popraviti greške. Ako se sustav pravilno zaustavio, umount će zapisati podatak: "sve u redu", a ako nije, fsck će početi pretraživati metapodatke u potrazi za greškom. Ext2 se brine o više kopija kritičnih informacija o sustavu, tako da je rijedak slučaj da su podaci bespovratno izgubljeni, pogotovo u slučaju direktorija. Kad naiđe na pogrešku, fsck pokušava popraviti grešku kopirajući iz sigurnosne kopije, tako da su barem stari podaci sačuvani, a kad ni to ne uspije - mora izbrisati datoteku. Ako ste se pitali čemu služe lost+found direktoriji, znajte da se u njima spremaju sve one datoteke (ili dijelovi) čiji se integritet nije mogao sačuvati. Nije rijedak slučaj da se pojave tisuće imena veličine jednog bloka ili čak datoteke pogrešno protumačne veličine od nekoliko terabajta (koja čak može ući u korisničku kvotu). Trajanje fsck-a proporcionalno je veličini diska i broju datoteka na njemu. Na velikim sustavima to se ne može tolerirati. Iz toga se razvila potreba za nečim što bi riješilo taj problem.

Journal

Glavna odlika journaling sustava leži u transakcijama. Princip posuđen iz svijeta baza podataka zasniva se na obavljanju niza koraka kao jedne operacije. Transakcija jamči da su se na disk spremile sve promjene ili pak nijedna. To se radi tako da se na disk zapišu podaci o potrebnim operacijama, i tek kad je zapisan cijeli postupak - pristupa se njegovom izvršavanju. Tzv. journal ili log upravo je popis tih transakcija. U slučaju rušenja prije izvršavanja transakcije izgubljeni su samo novi podaci, ali je originalna datoteka u odličnom stanju. Ako se to dogodi prilikom zapisivanja, transakcija se izvrši ponovno od početka, tako da su svi koraci obavljeni. Vrijeme ponovnog pokretanja svedeno je na nekoliko sekundi, jer sustav ne mora šetati po cijelom disku, nego samo pogleda koje transakcije su bile aktualne. Osim te opcije, moderni sustavi brinu se i za skalabinost koja nije bila aktualna u vrijeme malih diskova, kad je inicijalno stvoren ext2. Brža je alokacija slobodnog prostora, jer se sad vodi računa o većem nizu slobodnih blokova. Moguć je velik broj datoteka u direktoriju, jer više nisu organizirani kao lista inode - ime, nego kao struktura stabla. Povećana je i maksimalna veličina datoteke i samog sustava. Neke se implementacije brinu o fragmentaciji, a i bolje organiziraju prostor na disku. Moguće je istovremeno za svaku particiju koristiti različitu implementaciju.

Ext3

Potekao je izravno od ext2. Vrlo je bitno da je potpuno unatrag kompatibilan s jednostavnošću, pouzdanošću i dokazanosti u praksi svojeg pretka. Jedina dodana funkcionalnost je journaling, što doduše znači da nisu podržani svi napredni principi koje sadrže ostala tri. Kod dizajna sustava išlo se prema sigurnosti podataka, pa ext3 jedini u journal zapisuje čak i same podatke, tako da ni oni nisu izgubljeni. To doduše osjetno usporava performanse. Dobro je što je prijelaz s ext2 na ext3 vrlo jednostavan i ne zahtijeva rekreiranje particije i dvosmjernu selidbu podataka. Dovoljno je omogućiti ga u kernelu i naredbom tune2fs -j /dev/hdx omogućiti journaling. Particija može biti i montirana, bez rizika od gubitka podataka. Je li to zaista omogućeno, može se provjeriti po stvaranju nove datoteke imena .journal u korijenskom direktoriju te particije. Ako stvaramo novu particiju, dovoljna je opcija "-j" kod mke2fs naredbe.

ReiserFS

Sljedeći po popularnosti i zastupljenosti je ReiserFS. Razvili su ga Hans Reiser i tim matematčara tvrtke Namesys. Pojavio se prvi, već od 2.4.1 serije kernela. Jedna od njegovih najvećih prednosti je dobra podrška za golem broj malih datoteka. Cijela filozofija ovog sustava je zasnovana na tome, jer Reiser smatra da bi datotečni sustavi, a ne baze, trebali biti središnje mjesto skupljanja informacija, koliko god kratke one bile. Kod datoteka manjih od 1 kB, performanse su i do 15 puta bolje nego kod ext2. Moguća je i ušteda (do 6 posto) na prostoru zbog načina zapisa. Umjesto da alocira fiksnu duljinu bloka od 4 kB i tako dio ostavi neiskorišten, može rezervirati točno potrebnu duljinu. On jedini nije nastao recikliranjem već postojećeg sustava, nego je iznova pisan. Nažalost, to je donijelo poneke bugove i gubitke podataka, sve do 2.4.17 kernela, te ga možda ipak treba primijeniti s rezervom. Za njegovo korištenje potrebni su dodatni alati, okupljeni pod nazivom reiserfsprogs. Originalno ne podržava kvote, pa je potrebno patchirati kernel.

Ivan Capan