LAKI PINGVINI<>
022019<><>

Fajl sistemi za Linux (1)

Ext na više načina

Danas je malo nas koji koristeći kompjutere razmišljamo o načinima na koje oni čuvaju podatke u okviru masivnih memorijskih skladišta. Sa jedne strane je to dobro, pošto krajnji korisnik ne mora da zna bilo šta o funkcionisanju te svojevrsne crne kutije, već ga isključivo zanimaju praktični rezultati. Sa druge strane je i loše, pošto oni koji se ozbiljnije bave računarima ipak treba da znaju specifičnosti pojedinih vrsta fajl sistema, njihove prednosti i nedostatke. Kod Windowsa je situacija jednostavna jer se za ugrađena skladišta standardno koristi NTFS. Zanimljivo je da se pre par godina u okviru Windowsa 10 (debitovao je sa serverskom verzijom Windowsa 2012) pojavio ReFS (Resilient File System), koji je trebalo da predstavlja naslednika NTFS, pa je onda volšebno nestao da bi se opet pojavio u verzijama Windows 10 Pro for Workstations i Windows 10 Enterprise. Kod Linuxa je situacija znatno šarolikija, što je u svakom slučaju dobra stvar, ali to zahteva da korisnici budu bolje upoznati sa razlikama među varijantama fajl sistema. Upravo to i jeste svrha ovog teksta koji ne namerava da se bavi dubokim pitanjima organizacije podataka, već da korisnicima ponudi osnovna teorijska i praktična znanja vezana za Linux fajl sisteme.

1, 2, 3, 4

Istorija Linuxa započinje od nečega što je nosilo naziv Minix. Reč je o operativnom sistemu koji je pratio poznatu knjigu Endrjua Tanenbauma, a koju je Linus Torvalds obilato koristio prilikom započinjanja rada na Linux kernelu. On je jednostavno preuzeo kod koji je obavljao funkciju fajl sistema i uvrstio ga u okvir svog kernela. Pošto je knjiga Operating Systems: Design and Implementation prvenstveno imala obrazovni karakter, prateći fajl sistem je bio prilično rudimentaran i imao dosta ograničenja (maksimalna veličina fajla od 64 megabajta, imena do 14 znakova itd.). Posla oko prevazilaženja tih problema se latio Francuz Remi Kard i njegov trud aprila 1992. godine rezultira pojavom fajl sistema pod nazivom EXT (Extended File System). Iako je uspeo da reši prethodno navedene probleme (fajl sistem je mogao iznositi tada velikih dva gigabajta, a imena do 255 karaktera), EXT je u radu pokazivao prilično konzervativne rezultate, što je istog autora navelo da se pozabavi razvojem njegovog naslednika. Na njega nije trebalo čekati dugo i već u januaru 1993. se pojavljuje Ext2 (Second Extended File System, ili na srpskom: drugi prošireni fajl sistem), koji je ponudio rad sa fajlovima do dva terabajta, što je u kasnijim verzijama kernela poraslo do čitavih 32 terabajta. Prilikom njegove realizacije su u velikoj meri korišćena rešenja sa Unix platforme, odnosno, uzor je bio fajl sistem poznat pod nazivima UFS (Unix file system), FFS (Fast File System) ili Berkeley Fast File System. Reč je o izuzetno uspešnom fajl sistemu koji se i dan-danas dovoljno često koristi u praksi. Posebno često je u upotrebi sa skladištima baziranim na fleš memorijama iz proste činjenice što se kod njega ne vrši upis pratećih podataka koji negativno utiču na vek trajanja memorijskih medija.

Narodna poslovica glasi: što je brzo, to zna biti i kuso, što se u slučaju Ext2 pokazalo kao istina. Uprkos svojim kvalitetima, ovaj fajl sistem je imao problem prilikom oporavka podataka nakon oštećenja fajl sistema. Naime, komanda fsck (file system consistency check) je zahtevala mnogo vremena za oporavak fajl sistema (proveravao se celi disk), pa je u Ext3 (novembar 2001.) uvedeno takozvano žurnaliranje koje, uprošćeno rečeno, predstavlja vođenje zapisnika o izmenama u okviru fajl sistema. Drugim rečima, operativni sistem kreira spisak promena koje namerava provesti i, ukoliko dođe do problema, njih će znatno brže pronaći i otkloniti. Ono što je kod Ext2 predstavljalo vrlinu (brzina i duži vek fleš memorije), kod Ext3 više ne postoji zbog potrebe za zapisivanjem značajne količine meta podataka. Istina, žurnaliranje je moguće isključiti i tako Ext3 pretvoriti u Ext2, kao što je moguće uraditi i suprotno. O tim praktičnim detaljima više reči u nastavku teksta. I tako smo dosta brzo stigli i do fajl sistema Ext4 (Fourth extended file system), najnovije inkarnacije osnovnog Linux fajl sistema koji je zvanično pušten u upotrebu 25. decembra 2008. godine. Radi se o tipičnoj evoluciji koja u odnosu na prethodnika donosi brojna poboljšanja po pitanjima pouzdanosti rada, performansi i memorijskih kapaciteta.

Svaka particija diska može da ima veličinu do jednog eksabajta (260, 1024 petabajta ili približno 1018 bajtova), dok je maksimalna veličina fajla povećana do 16 terabajta (244, 1012). Dodavanjem dva dodatna bita u strukturu zaduženu za precizno označavanje vremenskih zapisa fajlova (timestamp) maksimalna vremenska granica koja je bila postavljena na 2038. godinu (znači, još manje od dve decenije), sada je pomaknuta na već pristojnu 2446. godinu. Inače, preciznost vremena zapisa podataka o fajlovima kod Ext4 iznosi samo jednu nanosekundu. Uvedena je i tehnologija takozvanog prostornog zapisa fajlova (extent), koja pozitivno utiče na povećanje brzine i smanjenje fragmentacije. Ovo se ostvaruje zapisivanjem novih podataka na kraj oblasti diska koja je unapred određena da bude neposredno uz oblast koja sadrži fajl. Omogućeno je i izvođenje defragmentacije bez potrebe za demontiranjem (umount) diskova, što se obavlja putem komande e4defrag. Ovoj priči o Ext particijama je moguće dodati nekoliko reči o takozvanim Swap particijama. U pitanju je specijalni tip particija koji nema nikakvu logičku strukturu i koriste se u situacijama kada na sistemu ponestane RAM-a pa kernel, da bi oslobodio radnu memoriju, prebacuje deo podataka na Swap particiju.

Iz svega napisanog se vidi da je reč o evoluciji fajl sistema koji se pojavio pre više od četvrt veka i koji je najčešći gost u okviru Linux distribucija. Što se tiče izbora, on je prilično jasan. Kada se radi o savremenim sistemima, Ext4 pruža ubedljivo najviše i obesmišljava upotrebu prethodnika Ext3, pa i Ext2 jer ima bolje performanse prilikom čitanja podataka i neznatno je sporiji prilikom zapisivanja. U scenarijima kada moramo da brinemo o dugovečnosti fleš memorije, Ext2 je i dalje dobar izbor, mada je moguće koristiti i Ext4 sa isključenim žurnaliranjem.

Malo anatomije

Kao što se to lepo može videti iz prateće ilustracije, Ext fajl sistemi započinju sa Boot blokom koji se nalazi na samom početku fajl sistema, ima dužinu od jednog kilobajta i tu je iz istorijskih razloga pošto se odavno ne koristi. Glavne jedinice za smeštanje podataka se nazivaju blokovima, a oni su smešteni u okviru grupa koje na ilustraciji nose naziv Blok grupa. One su uvedene da bi se izbegla fragmentacija i ubrzao pristup podacima. Veličina blokova iznosi jedan, dva, četiri ili osam kilobajta i od toga zavise parametri maksimalnih veličina pojedinačnih fajlova i samog fajl sistema.

Kod prvih verzija Ext2, svaka blok grupa na svom početku je sadržala strukturu pod nazivom superblok i ona je identična za svaku blok grupu (ovo se odnosi i na deskriptore grupa). Međutim, ovo je dovodilo do značajnog zauzeća memorije pa se u narednim verzijama kopija superbloka čuva u blok grupama 0 i 1, kao i u onima koje se stepenuju sa 3, 5 i 7. U okviru superbloka su smeštene informacije o broju i veličini blokova, broju slobodnih blokova, broju slobodnih i ukupnom broju Inodova, broju blokova i fragmenata po grupi i još dosta drugih informacija. Glavna kopija superbloka se nalazi na poziciji 1024-og bajta od početka skladišta i igra važnu ulogu u procesu montiranja diskova. Sadržaj informacija u superbloku je moguće videti preko komande:

dumpe2fs -h /dev/sda1

Naravno, u slučaju da skladište nosi drugi naziv, potrebno ga je postaviti umesto sda1.

Termin deskriptor grupe označava strukturu koja sadrži informaciju o grupama blokova, informaciju o poziciji takozvane bitmape bloka, Inode bitmapa, Inode tabele, broja slobodnih blokova i slobodnih inodeova, kao i broja alociranih direktorijuma. Bitmapa bloka je struktura čiju osnovnu gradivnu jedinicu čine bitovi koji imaju vrednost 0 ukoliko je blok slobodan i 1 ukoliko to nije slučaj. Na isti način funkcioniše i blok Inode bitmapa. Inodes (index nodes) predstavljaju veoma važan deo hijerarhijske organizacije fajl sistema. U pitanju je struktura koja sadrži pokazivače na blokove u kojima su smešteni naši podaci, kao i na takozvane metadata podatke koji pružaju neke dodatne informacije o podacima (sa izuzetkom naziva). Tu, recimo, spadaju podaci o broju upotrebljenih blokova, veličini fajla, vremenu poslednjeg pristupa, vremenu izmene, vlasniku fajla, dozvolama pristupa i druge slične stvari. Svaki fajl u fajl sistemu ima pridružen Inode, dok su Inode podaci smešteni u okviru Inode tabela i pri tome važi pravilo da svaka blok grupa ima po jednu takvu tabelu. Ostatak bloka je namenjen čuvanju podataka.

I malo prakse

Linux je poznat po tome što ima dosta moćnih CLI naredbi, ali rad sa njima zna da bude prilično složen. Primer takve naredbe je fdisk (format disk) koja sadrži ceo interaktivni podsistem za rad sa diskovima i njihovim particijama. Postoji više naredbi za rad sa particijama i njih ćemo analizirati u sledećem nastavku priče o fajl sistemima. Ulazak u interaktivni režim komande fdisk postižemo zadavanjem parametra koji predstavlja naziv diska. Na primer:

fdisk /dev/sda

Nakon ovoga, potrebno je da kreiramo novu particiju zadajući parametar p, a zatim i da te izmene zapišemo i izađemo iz programa zadajući parametar w. Ostatak parametara možemo saznati kucajući n.

Sledeće što je potrebno je da na stvorenoj particiji kreiramo fajl sistem. U slučaju da je u pitanju Ext2, procedura je sledeća:

mke2fs /dev/sda1

Kada je u pitanju Ext3, procedura je vrlo slična:

mke2fs –j /dev/sda1

Nije teško pogoditi da parametar -j sugeriše upotrebu žurnala (dnevnika). Ovo je moguće postići i sledećom naredbom:

mkfs.ext3 /dev/sda1

Vrlo slična situacija je i u slučaju kada želimo koristiti Ext4:

mke2fs -t ext4 /dev/sda1

ili

mkfs.ext4 /dev/sda1

Parametar -t u gornjem slučaju podrazumeva navođenje dodatnog parametra koji označava koji fajl sistem želimo kreirati.

Pozitivna stvar je da možemo menjati trenutni fajl sistem u neki drugi. U slučaju da želimo Ext2 pretvoriti u Ext3, prvo je potrebno da demontiramo željenu particiju. recimo:

umount /dev/sda1

Da budemo precizniji, literatura navodi da se procedura može završiti i bez demontiranja particije, ali je u slučaju da imamo važne podatke rizik potrebno svesti na najmanju meru.

Nakon toga provodimo proceduru kao nešto uviše:

tune2fs -j /dev/sda2

i nakon toga ponovo montiramo disk unutar željenog direktorija, u našem slučaju je to /mnt:

mount /dev/sda2 /mnt

Apgrejd iz ext3 u Ext4 obavljamo slično. Prvo demontiramo particiju:

umount /dev/sda1

Zatim preko parametra -O komande tune2fs aktiviramo stvari svojstvene za Ext4:

tune2fs -O extents,uninit_bg,dir_index /dev/sda1

Opcija „extents” stavlja fajl sistemu do znanja da koristi ranije pominjani mehanizam umesto bitmapa za fajlove, „uninit_bg” skraćuje vreme provere fajlova, dok „dir_index” poboljšava performanse heširanjem takozvanih b-stabala. U sledeća dva koraka proveravamo ispravnost podataka i ponovo montiramo disk:

e2fsck -pf /dev/sda1

mount /dev/sda1 /mnt

U slučaju da želimo isključiti sistem dnevnika (journal) kod fajl sistema Ext3 i Ext4, radimo sledeće:

umount /dev/sda1

tune2fs -O ^has_journal /dev/sda1

Parametar -O je namenjen (de)aktiviranju pojedinih svojstava fajl sistema. Znak „^” ispred svojstva „has_journal” znači da će žurnaliranje biti isključeno.

Još smo zaboravili da pomenemo kako je moguće saznati koji fajl sistem je prisutan na drajvovima u okviru našeg sistema. Kao i u mnogim drugim situacijama, Postoji veliki broj načina da se dođe do ove informacije. Neki od njih su:

df -T

lsblk -f

fsck -N /dev/sda1

sudo parted -l

blkid /dev/sda1

mount | grep „^/dev”

sudo file -sL /dev/sda

tune2fs -l /dev/sda1 | grep features

Naravno, neke od ovih naredbi pružaju i znatno više podataka od onoga što smo tražili, ali smo ih namerno naveli da bi oni koji tek ulaze u svet Linuxa videli koliko mogućnosti imamo na raspolaganju da saznamo željenu informaciju. I da stvar bude intrigantnija, taj spisak nije konačan.

Igor S. RUŽIĆ

 
Fajl sistemi za Linux (1)
Šta mislite o ovom tekstu?
Arduino: Senzori za rad sa vodom
ATmega32u4 ploče
Arduino: DIY – Monitoring temperature peći (1)
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