Ena največjih prednosti digitalne tehnologije v primerjavi z analogno, tako so nam vsaj govorili leta in leta, je, da so podatki bolj varni in se med kopiranjem in prenosom ne kvarijo. Bit je bit, in če pri prenosu ali kopiranju dodamo še kak varnostni mehanizem, ki preverja, ali je na drugem koncu res to, kar je bilo poslano, potem smo na konju in se nam ne more nič zgoditi. Pa je res tako? So biti res tako zanesljiva zadeva? Jih res nič ne more spremeniti? O, ja, lahko. In to že od vsega začetka.

Že od pojava računalnikov oziroma kar mikroprocesorjev govorimo tudi o tako imenovanem razpadu, gnitju ali razkroju bitov, ki ga z angleško besedo imenujemo bitrot. Ta se pojavlja pri vseh shranjevalnih medijih. V času luknjanih kartic se je dejansko zgodilo, da so se podatki razkrojili, saj je razpadel papir z luknjicami. Elektronska vezja, kot so EPROM, pomnilnik flash in podobni mediji z negibljivimi deli, so tudi občutljivi na te težave. Pri njih gre namreč za to, da je bit dejansko le električni naboj. Ta lahko zaradi napake v izolaciji počasi »odteče« in bit se lahko spremeni iz enice (nabit) v ničlo (nenabit). Težave imajo lahko tudi magnetni mediji, kot so trdi diski, magnetni trakovi in pred časom diskete. Pri nepravilnem shranjevanju se utegne zgoditi, da posamezni biti izgubijo svojo magnetno orientacijo, če medije shranjujemo v vlažnem in toplem prostoru, pa dejansko lahko razpadejo oziroma zgnijejo. Še najmanj težav imajo mogoče optični mediji, vsaj kar zadeva trajnost. Sicer je res, da so bolj ali manj občutljivi le na mehanske poškodbe, a so se v praksi pokazali za dokaj nezanesljiv medij, saj se je velikokrat zgodilo, da je bil neki medij čitljiv le na nekaterih napravah ali celo samo na tisti, na kateri je nastal. Za vsako od teh težav je seveda mogoče najti zdravilo, a kaj ko težavo z gnitjem najpogosteje opazimo, ko je prepozno.

In kaj je bitrot? Kako ga prepoznamo? Gre za »tihega« morilca podatkov, saj se spremembe dogajajo zelo počasi, pogosto mesece ali celo leta. Tu in tam kak bit spremeni svoje stanje zaradi napake v krmilniku, težav s kablom ali pa preprosto zaradi napake v kakršnem koli materialu, ki je povezan s pomnilno napravo ali prenosom podatkov do nje. Se vam je že kdaj zgodilo, da ste odprli kakšno sliko, ki je bila pred časom popolnoma v redu, zdaj pa je do polovice kockasta? Čisto mogoče, da gre za bitrot. Ste v kakšnem mp3-posnetku nenadoma zaslišali čuden pisk, za katerega mislite, da ga včasih ni bilo? Ja, lahko je bitrot. Je video nenadoma dobil zelene kockice ob robu in je potreboval nekaj sekund, da je prišel k sebi? Če tega včasih ni bilo, zdaj pa je, je verjetno bitrot.

Pa saj imamo varnostne kopije, boste rekli. Imate, ja, ampak vam te zelo verjetno ne bodo nič koristile. Sistemi za varnostno kopiranje niso tako pametni, da bi lahko ugotovili, kaj je namerna sprememba v neki datoteki in kaj posledica razpada. Oni pač prekopirajo to, kar smo jim ukazali. Tudi »razpadle« bite. Tako bo sistem dobre podatke zamenjal s slabimi, in ko bo to nekaj časa trajalo, bo vse skupaj fuč.

Ja, pa saj imamo sistem RAID5 s pariteto, ki je sposoben rekonstruirati manjkajoče podatke, boste nadaljevali v svoji veri v to, da so vaši podatki varni. Pa ni tako. Omenjeni mehanizmi delujejo le, če neki disk v polju RAID popolnoma »odmre«. Če pa neki disk v polju začne »oddajati« slabe bite, polje to lahko opazi ali pa tudi ne, saj se paritete običajno ne preverjajo pri vsakem branju. Pa tudi če bi sistem zaznal, da je nekaj narobe, ne bi vedel, na katerem disku je napačni bit, in zato ne bi znal zadeve rekonstruirati iz paritetnih podatkov, da o tem, da se lahko pojavi napaka tudi v paritetnih podatkih, niti ne govorimo.

So podatki lahko varni?

Omenjene težave je mogoče rešiti le na en način – v ustreznih datotečnih sistemih. A teh še ni! Zdržite še malo, prihajajo datotečni sistemi naslednje generacije. Sliši se senzacionalistično in nekaj, s čimer nas tržniki s področja informatike zasipavajo že desetletja, a v tem primeru je res nekaj resnice v tem. Kar zadeva datotečne sisteme, dejansko lahko definiramo neke »generacije«. Ločnice med njimi so posebne funkcije, ki so zelo koristne in jih prejšnji sistemi niso imeli, vsi nadaljnji pa jih imajo. Pa se malce sprehodimo po zgodovini.

Generacija 0: Ničla zato, ker dejansko ni šlo za datotečni sistem, ampak za neki tok podatkov. Spomnite se luknjanih kartic in pozneje podatkov na zvočnih kasetah iz Commodorjev in podobnih antičnih naprav.

Generacija 1: Zgodnji sistemi z naključnim dostopom. Na eni napravi smo lahko imeli več datotek z različnimi imeni, vendar brez map (direktorijev) ali kakšnih drugih metapodatkov. Primer so prvi Applovi računalniki in prve različice DOS-a (ne MS DOS in druščina).

Generacija 2: Pojav možnosti organizacije v mape. To pa zato, ker so naprave postale sposobne shraniti na stotine datotek in je bilo te treba nekako organizirati. Najbolj znan predstavnik je MS-DOS-ov FAT in pozneje FAT32 (ki ga še zdaj najdemo na pomnilniških ključkih in še kje).

Generacija 3: Pojav metapodatkov, kjer se poleg podatkov shranjuje tudi lastništvo, različna dovoljenja in podobno. Potreba se je pojavila zato, ker je več uporabnikov uporabljalo eno napravo in je bilo treba uporabnike nekako razmejiti. Značilni predstavniki tretje generacije so UNIX, Netware in prve različice NTFS.

Generacija 4: Pojavilo se je beleženje. To je najbolj vroča lastnost trenutnih datotečnih sistemov, kot so ext4, zadnje različice NTFS, UFS2 in podobni. Beleženje preprečuje, da bi datotečni sistem postal nedosleden, in s tem preprečuje, da bi izgubili podatke ali celo celoten disk v primeru izpada napajanja ali sesutja jedra sistema.

Imamo torej generacije, in če bo vse po napovedih, nas kmalu čakajo datotečni sistemi pete generacije. In kaj bodo ti prinašali? Marsikaj: od asinhrone replikacije, nadzorne vsote po blokih pa do »slik atomskih krav«. Kaj? Pa lepo po vrsti.

Najprej za tiste, ki zadeve nekoliko bolje poznate. Verjetno boste nekaj stvari, ki jih bomo opisali v naslednjih vrsticah, prepoznali kot nekaj, kar imajo v takšni ali drugačni obliki že obstoječi sistemi. Recimo Volume Snapshot Service (VSS) iz sistema NTFS ali pa Linuxov Logical Volume Manager (LVM), ki sicer opravljata podobne funkcije, kot jih bodo funkcije v naslednji generaciji datotečnih sistemov, vendar gre pri obstoječih za omejeno funkcionalnost. Podobno je s Sunovim ZFS (združenim datotečnim sistemom in upravljalnikom pogonov), ki tudi nudi nekatere funkcionalnosti, a te niso dodelane do te mere, da bi lahko govorili o neki novi generaciji.

Pri opisu novih funkcij nam oprostite, če bodo nekateri prevodi malce nerodni. Gre za nove zadeve in v pomanjkanju sprejetih slovenskih prevodov bomo pač uporabili besede, ki se nam zdijo primerne. Ni pa nujno, da so najbolj primerne. Te bo prinesel čas.

Kaj je torej »killer« funkcija, ki bo definirala datotečni sistem generacije 5? Jih je kar nekaj.

»ATOMSKA KRAVA«

Verjetno najbolj zanimiva, vsaj po imenu, je nova funkcija, ki bi jo napačno lahko prevedli kot »slika atomske krave«. Izvirni izraz je »atomic COW snapshot«, pri čemer je COW kratica, ki pomeni Copy on Write, in ne znanega prežvekovalca. Sliši pa se zanimivo, kajne? Pa poskusimo razložiti čim bolj preprosto, kaj je COW. Je pojem, ki je v računalniškem svetu znan že nekaj let. Gre za to, da če več procesov ali programov potrebuje branje podatkov (read only) iz iste podatkovne strukture, ni potrebe, da imamo toliko kopij teh struktur, kolikor je programov, ampak je dovolj ena struktura (recimo podatkovna baza), posamezni programi pa do podatkov dostopajo prek kazalcev. Pa si oglejmo primer. Vzemimo, da imamo neko podatkovno polje z imenom »Mikro«, nato pa dva programa »Peter« in »Marica«, ki bosta dostopala do podatkov v tem polju. Če med svojim delom ne »Peter« ne »Marica« ne bosta spreminjala podatkov v podatkovnem polju, bosta oba dostopala do istega polja »Mikro«. Težava pa se pojavi takrat, ko hoče kak program kak podatek v tem polju spremeniti. Ni namreč nujno, da se drugi programi s tem strinjajo oziroma potrebujejo spremenjen podatek. Kako to rešiti? Dokaj preprosto. Če v nekem trenutku »Peter« spremeni kak podatek, bo sistem COW izdelal zasebno kopijo teh sprememb (in ne kopije celotne strukture) za program »Peter«, podatki za program »Marica« pa bodo še vedno ostali enaki. Osnovna struktura torej ostane nedotaknjena in na voljo tako »Petru« kot »Marici«, pri čemer lahko oba morebitne neželene spremembe tudi razveljavita.

Filozofijo COW bo vsebovala nova generacija datotečnih sistemov za to, da se podatki čim bolje zaščitijo. V nekem določenem času se bo izdelala slika celotnega sistema, ne glede na to, kaj se je takrat dogajalo. Če smo izdelali sliko 17. maja 2013 ob 1:25:35, bo slika natančno takšna, kot je bila v tej sekundi. V njej ne bo niti enega podatka več ali manj, kot jih je bilo v času zapisa, ne glede na to, ali se v tistem trenutku podatki kaj spreminjajo ali ne. Nato se bodo shranjevale le spremembe. S tem bodo na voljo torej tako spremembe podatkov kot tudi stari, nedotaknjeni podatki. Zadeva je precej koristna, zlasti pri podatkovnih bazah, če te poleg tega uporabljajo beleženje (če ne, ga krepko biksate in je skrajni čas, da jo nadgradite). Beleženje je namreč sistem »kazalcev«, ki precej olajša delo.

Bistvo sistema je torej v tem, da se izdela slika sistema, nato pa shranjujejo le spremembe. Teh je lahko na koncu največ toliko, kot je osnovnih podatkov, in še to le v primeru, ko spremenimo vse podatke v osnovni strukturi. V najslabšem primeru imamo torej dvakrat več podatkov kot v osnovni strukturi, kar je precej manj, kot če bi za vsako spremembo izdelovali novo sliko. Nekako takole bi na kratko opisali COW. Tematika je seveda precej obsežnejša, saj je o njej napisanih tudi nekaj knjig. Zakaj pa »atomic«? Zato (pa prosimo, da se kvantni fiziki ne jezite), ker je atom »nevidni« delec, kot je tudi COW nevidna operacija.

NADZORNE VSOTE »PO BLOKIH«

Ko so nastali sistemi RAID, so nas vsi veselo prepričevali, kako zelo varni bodo naši podatki, zlasti če bomo uporabljali čim višjo različico (RAID5). Toda realnost ni tako lepa. RAID je sicer koristna zadeva, a le v primeru, ko neki disk dokončno odpove. Če se začne pojavljati »razkroj« bitov, pa je popolnoma neuporabna. Krmilnik RAID namreč ne more razločiti med pravimi in napačnimi podatki, saj se pariteta, torej sistem nadzora konsistentnosti podatkov, ne zapisuje za vsak blok posebej, ampak le za podatkovni trak (Disk Stripe). Teoretično vam lahko sistem RAID res pove, da je nekaj narobe, vendar le, da je nekaj narobe na podatkovnem traku, ne pa, ali je dejansko kaj narobe z zapisanimi podatki na katerem od diskov. Če se na primer na disku 1 v eni od datotek spremeni en sam bit, se bo ta zaradi redundance spremenil tudi na drugih.

Odgovor na težave so nadzorne vsote po blokih, kar pomeni, da se za vsak zapisani blok podatkov zapiše tudi njegova nadzorna vsota. Zadevo je predlagal IBM, razvijati pa leta 2007 začel Oracle, pozneje so se mu pridružili še Red Hat, Fujitsu, Intel, SUSE in še kdo. Sistem se imenuje btrfs, gre pa za to, da se datotečni sistem zasnuje tako, da se nadzorne vsote zapisujejo na ravni podatkovnega bloka, s čimer je odkrivanje težav bistveno preprostejše.

SAMOOZDRAVLJANJE

Btrfs omogoča nekaj, čemur lahko rečemo »samoozdravljanje« sistema, a le ko imate redundantne (podvojene) podatke. Prek nadzornih vsot, zapisanih po blokih, lahko sistem najde napako in jo, ker ima podvojeno kopijo, tudi popravi. Brez redundance bi sistem le javil, da je prišlo do napak in kje ta napaka je, kar pa je tudi več kot brez btrfs. Če imamo torej btrfs, je mogoče podatke tudi »ozdraviti«.

Zadeva se je v praksi izkazala za zelo učinkovito. V sistemih RAID z vključenim btrfs, pa naj je šlo za RAID1, RAID5, RAID6 ali RAID10, se je v praksi pokazalo, da je bilo mogoče obdržati integriteto podatkov tudi v primeru, ko se je pojavilo več kot sto tisoč napak nadzorne vsote na enem samem disku.

SKALABILNOST ZA PRIHODNOST

Ena skupnih lastnosti preteklih datotečnih sistemov je ta, da so bili vezani na pomnilne medije tistega časa. V času luknjanih kartic in kasetofonov je bil datotečni sistem nepotreben. V času disket je razmišljanje o datotečnem sistemu, ki podpira več kot nekaj megabajtov, nepotrebno. Zadnje čase pa se je stvar precej spremenila. Potrebe po podatkih se grozovito večajo, prav tako pa se povečuje tudi količina podatkov, ki jo je mogoče shraniti na posamezni disk. Vprašanje, kam s tremi petabajti podatkov, ni nekaj, česar si zadnje čase ne bi mogli predstavljati.

Sodobne funkcije datotečnih sistemov so zasnovane tako, da bodo podpirale tudi velike količine podatkov. Btrfs na primer trenutno podpira 16 eksabajtov podatkov. Američani so postregli z analogijo, da bi to količino dosegli, če bi vsakemu prebivalcu New Yorka (okoli 8 milijonov prebivalcev) dali disk velikost 2 Tb in jih nekako povezali med seboj. Pri tem pa so izračunali tudi, da bi tak sistem za svoje delo potreboval okoli 90 megavatov energije. Glede na hitrost naraščanja količine podatkov smo lahko nekaj časa mirni, saj posameznega sistema, ki bi potreboval toliko, še lep čas ne bo.

ASINHRONA INKREMENTALNA REPLIKACIJA

Sliši se tako zapleteno, da skoraj mora biti dobro, mar ne? Dobro sicer je, ni pa nič kaj zapleteno, vsaj za osnovno razumevanje ne. Replikacija pomeni podvajanje podatkov, kjer na enem mestu naredite sliko obstoječih podatkov in jo prenesete na drugo lokacijo. Najpreprostejši primer bi bil, ko imate dva računalnika in bi radi imeli na obeh enako stanje. Ko na enem naredite, kar bi morali, naredite sliko sistema, nato pa jo nekako prenesete na drug računalnik. Sliši se preprosto, vendar je že takoj jasno, da obstaja pri vsem skupaj vsaj ena težava. In ta je, da je stvar dokaj počasna, saj je treba prekopirati vse podatke.

Zato je pomembna beseda »inkrementalno«. Zakaj bi vedno kopirali vse podatke, če pa je dovolj kopirati le razliko med prejšnjim in trenutnim stanjem? Če smo naredili sliko sistema, ki je bil velik 2 Tb, nato pa v njem spremenili nekaj deset ali sto megabajtov, bi moral obstajati sistem, ki bi staremu le dodal to razliko. In seveda obstaja v obliki inkrementalne replikacije, ki dela natančno to. Sistem ugotovi razlike in nato prenese le te, in ne celotnega sistema. V praksi to pomeni, da je mogoče izdelati varnostno kopijo sistema na oddaljeno lokacijo, tudi če je ta velik nekaj terabajtov. Prvo kopiranje bo trajalo sicer res dolgo, vsa naslednja pa bodo izredno hitra, posebno če bo interval kopiranja kratek. Teoretično bi lahko izdelali varnostno kopijo sistema vsako uro, in to tudi v primeru počasne internetne povezave.

Kaj nas še čaka?

Seveda naštete stvari še zdaleč niso edine. Čaka nas na primer še možnost kloniranja na ravni datotek, kar je v svetu, kjer imamo vse več virtualnih sistemov in je virtualizacija ena glavnih besed v informacijskem svetu, še kako pomembno. Prav tako sprotno uravnoteženje (online balancing), pa kompresija na ravni datotek in map in še kaj bi se našlo. A naj bo za začetek dovolj. Več o podrobnostih bomo zapisali takrat, ko bodo dejansko na voljo širši javnosti, in ne le kot testni projekt na Linuxu, kot je to zdaj.

Vsekakor pa lahko zapišemo nekaj prvih opažanj. V novih datotečnih sistemih bo največ poudarka na dosegljivosti in varnosti podatkov, pri čemer pri slednjem mislimo na to, da bodo podatki varni pred napakami. Za tisto drugo varnost bodo poskrbeli drugi oziroma se o njej ta trenutek ne govori kaj dosti v povezavi z datotečnim sistemom. Razširljivost (skalabilnost) sistema bo rešena enkrat za vselej in ne bo se moglo zgoditi, da bomo zaradi nezmožnosti pametne razširitve ostali vezani na zastarelo tehnologijo. COW in vse, kar je povezano s tem, bo stanju iz »ups, crknil je disk, a nič zato, saj imam RAID in so podatki varni,« dodal tudi »ups, napaka je na datoteki, a nič zato, saj imamo COW, btrfs in podobno in jo lahko rešimo.« Inkrementalna replikacija bo pomenila, da bomo lahko na oddaljene lokacije, tudi recimo spletne storitve hranjenja podatkov, shranili slike večjih sistemov in jih varnostno kopirali na dnevni osnovi.

In zakaj je to tako pomembno? Zato ker je naše realno življenje vse bolj povezano z digitalnim. Na začetku devetdesetih let smo tudi imeli računalnike, a je bilo naše realno življenje naše realno življenje, digitalno pa digitalno, med obema pa je obstajala dokaj jasna ločnica. Večina od nas takrat svojega življenja ni imela digitaliziranega. Danes, leta 2014, pa svoje življenje bolj ali manj digitaliziramo neposredno v računalnike, in zato je tovrstna varnost in dosegljivost vse večjega pomena. Če izgubimo digitalno, izgubimo svojo zgodovino in tako pomemben del sebe. Bo pa zanimivo videti, kakšni bodo datotečni sistemi recimo leta 2034, torej čez nadaljnjih dvajset let.

Moj mikro, marec - april 2014 | Miha Gradišnik |