M-a întrebat cineva astăzi ce este "jurnalul" unui sistem de fișiere (referitor la articolul precedent în care prezentam sistemele de fișiere din Linux).
Sistemul de fișiere ext2 este unul tradițional, fără jurnalizare. Chiar dacă este un sistem de fișiere performant, suferă foarte mult din cauza unei limitări majore: în cazul unei pene de curent, a unei căderi a sistemului sau a unei închideri necontrolate, sistemul de fișiere se alterează. Singura modalitate de a monta sistemul de fișiere în siguranță și pentru a ne convinge că structura datelor este validă, este efectuarea unei scanări complete a sa (de exemplu, cu fsck). Această operațiune ia timp - pe partițiile mari, poate dura și câteva ore.
Soluția
Soluția la această problemă este jurnalizarea. Un astfel de sistem de fișiere păstrează un jurnal (sau un istoric) care descrie operațiile în așteptare (ceea ce urmează să se întâmple cu structura datelor). Înainte de a scrie ceva pe disk, Linux descrie ceea ce trebuie să facă în jurnal. Când operațiile sunt complete, sunt șterse intrările din jurnal. Astfel, în orice moment, jurnalul conține o listă a structurii discului în curs de modificare. Rezultatul este că, în cazul unui eveniment nedorit (cădere de tensiune, închidere neașteptată a calculatorului, etc.), sistemul examinează acest jurnal și verifică numai structura datelor care este descisă în el.
Dacă sunt găsite inconsistențe, sistemul poate reveni la starea anterioară sau să completeze schimbările (să termine de modificat ceea ce trebuia să facă înainte de căderea de tensiune, de exemplu), partiția respectivă de pe hard disk revenind, astfel, la o stare stabilă, consistentă, fără a verifica întreaga structură a datelor de pe sistemul de fișiere ca în cazul ext2 (care, așa cum vă amintiți, nu are jurnalizare). Asta crește în mod substanțial viteza de verificare a discului în cazul unui eveniment nedorit.
În zilele noastre, sistemele de fișiere cu jurnalizare au devenit un standard pentru cele mai multe partiții Linux. Partițiile de foarte mici dimensiuni (cum ar fi partiția separată /boot, în cazul în care mai face cineva așa ceva) sau discurile amovibile mici (memoriile USB) pot fi create fără jurnalizare.
Reamintesc cele 6 tipuri de sisteme de fișiere cu jurnalizare din Linux: ext3, ext4, reiserfs, btrfs, xfs și jfs.
Şerban Stănescu a zis
Mie chiar mi-a folosit! 🙂
Am tot amânat să fac documentare la acest subiect, poate şi datorită lipsei acute şi endemice a documentaţiei în română... Îmi place Engleza, aş minţi dacă aş zice altfel, dar m-am săturat să citesc 95% în Engleză pe orice temă, pentru că la noi, ce găseşti (se poate verifica!) sunt "acest articol este un ciot". Şi, din nefericire, e valabil şi la siturile româneşti. Wikipedia românească e doar un exemplu...
Pe de altă parte, recunosc, ştiam ce înseamnă conceptul "jurnalizare" pentru că aşa lucrez în general, pe bază de jurnale. Dintr-o altă perspectivă, cunoşteam de la studiul memoriilor ce înseamnă "cache", precum şi din studiul arhitecturii unui calculator, funcţionalităţii componentelor şi rolul lor. Calculul preemptiv, implică conceptul de jurnalizare, multiprocesarea la fel şi de aici până la jurnalizarea sarcinilor de scriere, e doar o chestiune de interpretare diferită.
De altfel, în fermele destinate marilor baze de date, există servere de date fără sistem de fişiere, în care datele se scriu succesiv şi se jurnalizeaztă intrările. Sunt principii diferite de stocare/accesare a datelor, e drept, dar conceptele de bază sunt la fel de valabile.
Prezentarea asta oferă principalele direcţii de investigare pentru "nerds" şi "geeks" şi informaţia de bază pentru începătorul care vrea să ştie "De ce să aleg... ca sistem de fişiere?".
Cum ai spus şi în articol, punctele de suspensie de mai sus, pot fi înlocuite deja cu mai multe variante!
Mă bucur să văd că există preocupare pentru extinderea/răspândirea informaţiilor şi la noi.
Mulţumesc pentru efort! 🙂