LAKI PINGVINI<>
032014<><>

Diskovi pod Linuxom (2)

Fajl sistemi: Tako slični, tako različiti

Započetu priču o radu s diskovima pod Linuxom nastavljamo i završavamo fajl sistemima, vrlo bitnom temom za svakog ko brine o svojim podacima. U nekom od ranijih tekstova edukativnog karaktera pomenuli smo da se u foldere osnovnog, korenog fajl sistema mogu „montirati” particije formatirane nekim drugim fajl sistemima, a da korisnici mogu pristupati fajlovima bez znanja o kom fajl sistemu se radi. Sve ovo je postignuto zahvaljujući softverskom sloju unutar Linux jezgra zvanom „Virtual File System” koji služi kao interfejs između konkretnih drajvera za fajl sisteme i ostatka sistema.

Inode

Rad sa fajlovima na Linuxu zasnovan je na konceptu superbloka i indeksnih čvorova, po uzoru na Unix. Superblok je skup informacija o tipu i veličini fajl sistema, dok indeksni čvorovi (skraćeno „inode”) jesu strukture podataka koje, osim fizičkih lokacija fajlova na disku, u sebi nose metapodatke poput tipa i dužine fajla, pristupnih dozvola, vremena kreiranja i modifikacije i tako dalje. Svaki inode tipično je velik 128 ili 256 bajtova i najčešće „pokazuje” na blokove od 8 ili 16 kB na disku. Inode sadrži određen broj direktnih adresa blokova, a u slučaju da je fajl veći od blokova koji se na taj način mogu adresirati, koriste se dodatna polja kao indirektni pokazivači (adrese na blokove koji u sebi sadrže adrese na druge blokove). Konkretno, na fajl sistemima prirodnim za Linux (ext2/3/4), jedan inode sadrži dvanaest direktnih pokazivača i po jedan jednostruki, dvostruki i trostruki indirektni pokazivač. Logično, maksimalna veličina fajla u fajl sistemu direktno zavisi od broja blokova na disku koji se mogu adresirati preko jednog inodea. Veličina i broj bajtova po inodeu može da se podesi prilikom formatiranja particije, mada u najvećem broju slučajeva automatski izračunate vrednosti na osnovu veličine particije zadovoljavaju potrebe.

Extended file system

Fajl sistemi koji su deo Linuxa od njegovih ranih dana zaista organizuju podatke i metapodatke u vidu superbloka i inodeova. Zahvaljujući VFS sloju, čak se i fajl sistemi kod kojih su podaci organizovani potpuno drugačije (kao što su FAT, NTFS i ISO9660 sa optičkih diskova) serviraju Linux jezgru u vidu superbloka i inodeova, a VFS u toj komunikaciji adaptira podatke dobijene od konkretnih fajl sistem drajvera u odgovarajući oblik koji ostatak Linux jezgra očekuje. Fajl sistem ext2 predstavlja najjednostavniju inode implementaciju koja je još u upotrebi. Stara je preko dvadeset godina, može se pohvaliti velikom brzinom, ali se danas uglavnom ne koristi jer ne podržava takozvani „žurnaling”. Radi se o vođenju dnevnika upisa, što drastično ubrzava rekonstrukciju „poluupisanih” podataka nakon neočekivanog isključenja računara, uz smanjenje verovatnoće gubitka podataka u ekstremnim slučajevima. Zbog odsustva žurnalinga u ext2, provera fajl sistema pri ponovom uključivanju računara traje dugo, jer Linux mora da prođe kroz sve inodeove i proveri njihove veze sa ostatkom fajl sistema. Kada bi žurnaling postojao, operativni sistem bi znao gde da traži informacije o nedovršenim operacijama, pa bi sve trajalo znatno brže. Fajl sistem ext3 je direktna nadogradnja sa podrškom za žurnaling. Informacije ovog mehanizma zaštite čuvaju se na odvojenom prostoru unutar particije, a za naročito paranoične korisnike postoji mogućnost da se žurnaling podaci održavaju na potpuno odvojenom disku. Postoje tri nivoa rada koja se kreću između dva ekstrema – od veće brzine i nešto niže pouzdanosti, do manje brzine ali najviše pouzdanosti. Srednji nivo je podrazumevano podešavanje. Osim ovoga, ext3 je potpuno kompatibilan sa ext2, pa se ext2 particije mogu direktno „konvertovati” u ext3 dodavanjem žurnalinga, a ext3 particije se mogu „montirati” kao ext2 ignorišući podatke o žurnalingu. Sledeća generacija zvana ext4 donosi suštinska unapređenja: veće particije i fajlove; teoretski neograničenog broja foldera u fajl sistemu; bolje performanse u radu sa velikim fajlovima koji se nalaze na kontinualnim lokacijama na disku (takozvani „extent”); rezervisanje prostora za velike fajlove koji će biti tretirani kao prazni, ali bez inicijalnog fizičkog popunjavanja nulama na disku (čime se štedi vreme i povećava brzina kreiranja takvih fajlova), i još štošta korisno. Očuvana je kompatibilnost sa prethodnicima – ext2 i ext3 particije mogu da se montiraju kao ext4 bez konverzije podataka, mada će novi podaci biti upisivani koristeći nove ext4 tehnike. Kompatibilnost u drugom smeru je delimična – moguće je montirati i koristiti ext4 kao ext3 (recimo, na starijim verzijama Linuxa koje ne podržavaju ext4), ali samo ako na ext4 particiji nije korišćen pomenuti „extent” mehanizam za velike fajlove. Ext4 je podrazumevani fajl sistem na većini novijih Linux distribucija, a koristi ga i Google za baratanje fajlovima na Androidu počev od verzije 2.3. Naposletku, ext4 podržava TRIM funkcionalnost SSD-ova, što ga praktično čini obaveznim izborom za ove uređaje.

Drugi interesantni fajl sistemi koje Linux podržava su ReiserFS i Btrfs (čita se kao „Butter FS” ili „Better FS”). ReiserFS pruža sjajne performanse u radu sa malim fajlovima, ali je dalji razvoj praktično stao otkad je njegov glavni autor, Nemac po imenu Hans Reiser, osuđen 2008. godine na izdržavanje dugogodišnje zatvorske kazne. Btrfs umesto puke nadogradnje ext familije donosi implementaciju novih i naprednih mehanizama, uključujući neke tehnike iz ReiserFS-a. Razvoj je i dalje u toku, a kada kroz koju godinu sve bude u potpunosti sređeno i ispeglano, očekujemo da će Btrfs postati podrazumevani fajl sistem na većini Linux distribucija. Na Linuxu se sasvim uspešno mogu koristiti i rešenja karakteristična za druge operativne sisteme. Što se tiče Windows sveta, drajveri za FAT12, FAT16 i FAT32 predstavljaju sastavni deo Linux kernela. NTFS se obrađuje drajverom po imenu NTFS-3G (najčešće se isporučuje uz novije Linux distribucije), dok je podrška za exFAT dostupna u drajveru novijeg datuma po menu „exfat” (code.google.com/p/exfat).

TRIM i zašto je bitan

Kako ovaj pojam i dalje predstavlja maglovitu oblast za mnoge korisnike, a u prošlom broju smo napravili šlagvort opisavši način rada NAND čipova, pravi je trenutak da na istom primeru prikažemo kako TRIM tačno funkcioniše. Podsetimo se, u NAND fleš čipovima podaci su organizovani u takozvane stranice od 2 ili 4 kB (možemo ih tretirati kao velike sektore kod hard diska). Skup stranica čini jedan „erase” blok, tipične veličine 256 ili 512 kB. Rekli smo da osvežavanje jednog sektora unutar „erase” bloka povlači ponovni upis celog bloka. Ovo je samo delimična istina, a za detalje moramo da zaronimo u mračne dubine digitalne elektronike.

Kod fleš memorija, „brisanje” memorijskog bita znači prebacivanje njegove vrednosti iz logičke nule u jedinicu, dok je „upis” obrnuta stvar – prebacivanje iz jedinice u nulu. Informacija koju smo prethodno izostavili kaže da NAND fleš ima tu osobinu da dozvoljava proizvoljan upis (1 -> 0) unutar „erase” bloka bez diranja ostatka bloka, ali se brisanje makar jednog bita (0 -> 1) vrši isključivo brisanjem kompletnog bloka. Jasno, prethodno moramo sačuvati sadržaj bloka u RAM memoriji, a nakon brisanja moramo ponovo upisati ostale ćelije koje su ispale „kolateralna šteta” prilikom brisanja. Ovo važi za sve NAND čipove, uključujući one u USB fleš uređajima. Ipak, njih ne koristimo kao sistemske diskove sa mnoštvom malih fajlova koji se često menjaju, pa nam prethodna činjenica nije toliko bitna. U slučaju SSD-ova gde nam se nalazi operativni sistem i aplikacije, i te kako jeste!

Ako zamislimo da je jedan „erase” blok inicijalno prazan (to jest sadrži isključivo jedinice), onda je upisivanje nove stranice od 2 ili 4 kB (odnosno setovanje nula u okviru te stranice) ipak moguće bez potrebe da se ceo „erase” blok prethodno prebriše (odnosno popuni jedinicama). Brisanje „erase” bloka daleko je sporija operacija od upisa, pa su brzinski penali najveći upravo onda kada unutar bloka nema baš ni jedne slobodne stranice (to jest popunjene samo jedinicama) u koju je moguće nešto upisati. Ovde uskače TRIM komanda. Obični fajl sistemi ne brišu zaita fajlove sa diska, već samo u svojoj evidenciji proglašavaju njihov prostor slobodnim, ali fizički uređaj ne zna ništa o tome. Kod SSD-a to znači da će nule u stranicama koje je fajl zauzimao ipak biti ponovo upisane nakon prebrisavanja tog „erase” bloka. Ovo usporava neki sledeći upis u te stranice, jer bi bilo bolje da na njima ostanu samo jedinice. Zato je smišljen TRIM mehanizam koji SSD-u kaže upravo to – „ne upisuj stare podatke na ovu stranicu posle brisanja bloka, fajl više ne postoji”. Ovo automatski povećava performanse jer je izbegnuta spora operacija brisanja kompletnog bloka. Kada se TRIM ne koristi, performanse opadaju tokom korišćenja i posle određenog vremena poželjno je kompletno obrisati SSD i ponovo ga isparticionisati i formatirati. Nuspojava TRIM mehanizma je nemogućnost vraćanja obrisanih podataka, pošto oni bivaju zaista obrisani, umesto samo obeleženi kao slobodan prostor do sledećeg upisa.

Ivan TODOROVIĆ

 
Diskovi pod Linuxom (2)
Šta mislite o ovom tekstu?
SolydXK 201401
B1 Free Archiver 1.4.69
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera