ext4

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
ext4
Date generale
Dezvoltator Mingming Cao, Dave Kleikamp, ​​Alex Tomas, Andrew Morton și alții
Numele complet Al patrulea sistem de fișiere extins
Introducere 10 octombrie 2006 Linux 2.6.19-rc1-git8
Structura
Structura conținutului directorului Masă, copac
Alocarea fișierelor bitmap (spațiu liber), tabel (metadate)
Blocuri deteriorate Masa
Limite
Dimensiunea maximă a unui fișier 16 TiB
Numărul maxim de fișiere Variabil
Dimensiunea maximă a volumului 1024 PiB
Caracteristici
Permisiuni de sistem de fișiere POSIX
Compresie transparentă Nu
Criptare transparentă Da

ext4 sau al patrulea sistem de fișiere extins este un sistem de fișiere jurnalizat dezvoltat ca succesor al ext3 , inclus în kernel-ul Linux .

Istorie

ext4 s-a născut ca o serie de extensii compatibile cu versiunile anterioare și cu scopul de a crește limitele de stocare pe 64 de biți ale ext3 și de a îmbunătăți unele dintre performanțele sale [1], dar din motive de stabilitate, unii dezvoltatori Linux s-au opus intrării acestor extensii în nucleu [2] și a propus furculiță codul ext3 pentru dezvoltarea comportamentului fără a afecta utilizatorii ext3; propunerea a fost acceptată și, la 28 iunie, anul 2006 menținător ext3, Theodore Ts'o , a anunțat noul plan de dezvoltare ext4. [3]

O versiune preliminară a ext4 a fost inclusă în dezvoltare și sub numele ext4dev în versiunea 2.6.19 a kernel-ului Linux , lansată pe 29 noiembrie 2006 ; pe 11 octombrie 2008 , patch - urile care au făcut stabil codul ext4 au fost plasate în depozitele de cod sursă Linux 2.6.28, indicând sfârșitul fazei de dezvoltare și recomandând adoptarea ext4. [4] Kernelul 2.6.28 a fost lansat pe 25 decembrie 2008. [5]

Caracteristici

Volume mari

ext3 acceptă fișiere de până la 2 TiB și sisteme de fișiere de până la 16 TiB. ext4 folosește 48 de biți pentru adresarea blocurilor, astfel încât limitele cresc: puteți avea fișiere de până la 16 TiB, iar sistemele de fișiere pot fi de până la 1 EiB . Motivul utilizării a 48 de biți este dictat de unele limitări care ar trebui depășite înainte ca adresarea blocurilor ext4 să poată fi adusă la 64 de biți; cu toate acestea, aceste remedieri nu fac parte din programul ext4. Structurile ext4 au fost proiectate având în vedere acest lucru, astfel încât o viitoare actualizare ext4 va implementa suport complet de adresare pe 64 de biți. 1 EiB este totuși suficient până când se întâmplă acest lucru.

Măsură

Sistemele tradiționale de fișiere Unix, cum ar fi ext3 , utilizează o schemă indirectă de mapare a blocurilor pentru a urmări fiecare bloc utilizat pentru a stoca datele unui fișier. Această alegere este ineficientă pentru fișiere foarte mari, în special în ceea ce privește operațiile de ștergere și trunchiere, deoarece această mapare conține o intrare pentru fiecare bloc; asta înseamnă că pentru fișierele care folosesc o mulțime de blocuri aveți o cartografiere imensă, lent de gestionat. Sistemele de fișiere moderne folosesc o abordare diferită numită „ extindere ”. O măsură este un grup de blocuri contigue fizic. Practic scrie „Datele din fișier se află în următoarele N blocuri”. De exemplu, un fișier de 100 MB mare poate fi alocat într-o singură măsură de acea dimensiune (dimensiunea maximă a unei extensii este de 128 MB), în loc de mapare indirectă pentru 25600 de blocuri (un bloc conține 4KB de date). Chiar și fișierele mai mari sunt împărțite în mai multe extinderi. Extensiile îmbunătățesc performanța, deoarece o măsură încurajează alocările de blocuri contigue pe disc, dar crește fragmentarea externă.

Alocare multi-bloc

Când ext3 trebuie să scrie date noi pe un disc, alocatorul de blocuri este cel care decide ce blocuri gratuite vor fi utilizate pentru a scrie noile date. Dar alocatorul de blocuri ext3 poate aloca un singur bloc (4 KB) odată. Aceasta înseamnă că, dacă sistemul trebuie să aloce cei 100MB menționați anterior, va trebui să apeleze alocatorul de blocuri de 25600 de ori. Acest lucru nu este doar ineficient, dar nu permite alocatorului de blocuri să optimizeze politica de alocare, deoarece nu știe câte blocuri vrea să aloce sistemul, ci știe doar că a fost solicitat să aloce un bloc.

ext4 folosește un alocator multi-bloc (mballoc) care poate aloca mai multe blocuri pentru fiecare apel, în loc de unul singur; asta limitează mult cheltuielile generale. De asemenea, îmbunătățește performanța și este deosebit de util în cazul alocării întârziate și a măsurilor. Această caracteristică nu afectează formatul datelor de pe disc. În cele din urmă, rețineți că alocatorul de blocuri ext4 are alte îmbunătățiri.

Alocare întârziată

Alocarea întârziată este o caracteristică al cărei efect afectează „numai” performanța (nu modifică formatul datelor de pe disc). Această caracteristică, găsită în multe sisteme de fișiere moderne, cum ar fi XFS , ZFS , Btrfs sau Reiser4 , este de a întârzia cât mai mult posibil alocarea blocurilor; spre deosebire de ceea ce fac sistemele de fișiere tradiționale (cum ar fi ext3 , ReiserFS etc.): alocați blocuri cât mai curând posibil. De exemplu, dacă un proces efectuează o operație de scriere, sistemul de fișiere alocă imediat blocurile în care vor fi stocate datele, chiar dacă datele nu vor fi scrise imediat, dar vor ajunge în cache pentru o perioadă de timp. Această abordare are dezavantaje. De exemplu, atunci când un proces scrie continuu într-un fișier în creștere, scrierile ulterioare alocă blocuri pentru date, dar nu știu dacă fișierul va continua să crească. Alocarea întârziată, pe de altă parte, nu alocă blocuri imediat când procesul scrie, ci mai degrabă întârzie alocarea atâta timp cât fișierul este stocat în cache, adică până când fișierul este de fapt scris pe disc. Această caracteristică oferă alocatorului de blocuri posibilitatea de a optimiza alocarea în situații în care un sistem de fișiere vechi nu putea. Alocarea întârziată funcționează foarte bine cu cele două caracteristici enumerate mai sus: extinderi și alocare multibloc, deoarece în multe scrieri când un fișier este de fapt scris pe disc, acesta va fi alocat în extinderi ale căror blocuri vor fi alocate mai mult de o dată. Performanța este mai bună, iar fragmentarea este îmbunătățită în unele procese de scriere. Un alt avantaj este că fișierele temporare, care sunt adesea de scurtă durată, nici măcar nu sunt scrise pe disc, salvând astfel ciclurile de scriere și ștergere. Cu toate acestea, alocarea întârziată face ca datele să rămână în memorie RAM pentru o perioadă mai lungă de timp, înainte de a fi scrise pe suportul fizic, astfel încât o pană de curent accidentală sau oprirea dispozitivului va șterge toate datele nesalvate. Pentru a forța o scriere de date pe suport fizic, consultați comanda de sincronizare .

Compatibilitate inversă

Sistemul de fișiere ext4 este compatibil înapoi cu ext3 și ext2, făcând astfel posibilă montarea unui sistem de fișiere ext3 sau ext2 ca ext4.

Compatibilitate înainte

Sistemul de fișiere ext4 este parțial compatibil cu ext3. Aceasta înseamnă că o partiție ext4 poate fi montată ca ext3 (folosind „ext3” ca tip de sistem de fișiere). Cu toate acestea, dacă partiția ext4 folosește extensii (o caracteristică majoră introdusă în ext4), compatibilitatea directă se pierde.

Extensiile sunt activate implicit începând cu nucleul 2.6.23. Anterior, opțiunea „extents” trebuia activată în mod explicit (de exemplu mount /dev/sda1 /mnt/point -t ext4dev -o extents ).

Prealocare persistentă

Această caracteristică, disponibilă în ext4 în versiunile de kernel mai noi și emulată de glibc în sistemele de fișiere care nu o acceptă, permite aplicațiilor să prealoce spațiul pe disc: aplicațiile spun sistemului de fișiere să prealoce spațiul, iar sistemul de fișiere pre-alocă blocurile necesare și structuri de date, dar nu există date stocate în acestea până când aplicația nu are nevoie să scrie date. De fapt, asta fac programele P2P pe cont propriu: „prealocează” spațiul necesar unui fișier care va fi descărcat după ore sau zile, dar implementat mult mai eficient de sistemul de fișiere și cu un API generic. Aceasta are multe utilizări: în primul rând, pentru a preveni aplicațiile (cum ar fi cele P2P menționate mai sus) să facă acest lucru de la sine ineficient (prin completarea fișierului cu zerouri). În al doilea rând, pentru a îmbunătăți fragmentarea, deoarece blocurile vor fi alocate împreună, cât mai contigue posibil. În al treilea rând, pentru a vă asigura că aplicațiile au întotdeauna spațiul de care știu că vor avea nevoie, ceea ce este foarte important pentru aplicațiile în timp real (de fapt, fără prealocare, sistemul de fișiere ar putea fi complet în mijlocul unei operațiuni importante).

A fost eliminată limita de 32000 de subdirectoare

În ext3 numărul maxim posibil de subdirectoare conținute într-un singur folder este de 32000. ext4 depășește această limită permițând un număr nelimitat de subdirectoare. Pentru a nu duce la degradarea performanței în cazul directoarelor mari, ext4 introduce în mod implicit indexarea prin H-tree (o versiune a B-Tree ). Această caracteristică este prezentă de la nucleul 2.6.23. Arborele H este prezent și pe sistemele de fișiere ext3 cu index_dir activat.

Defragmentare online

În timp ce alocarea întârziată, măsurile și alocarea multibloc ajută la reducerea fragmentării sistemului de fișiere, este inevitabil ca acesta să apară odată cu utilizarea. De exemplu, dacă salvați trei fișiere într-un director și, în consecință, pe disc și, câteva zile mai târziu, modificați fișierul central pentru a crește dimensiunea acestuia, singurele opțiuni sunt fragmentarea părții în exces (ceea ce ar cauza o căutare) sau mutați fișierul într-o zonă mai mare (ceea ce ar cauza o căutare către o aplicație ipotetică care dorește să citească toate fișierele din folder, cum ar fi un manager de fișiere care dorește să creeze previzualizări ale tuturor imaginilor dintr-un folder). Pe de altă parte, sistemul de fișiere se poate ocupa doar de anumite tipuri de fragmentare: nu poate ști, de exemplu, că trebuie să păstreze toate fișierele legate de boot, deoarece nu știe care sunt fișierele legate de boot. Pentru a rezolva această problemă, ext4 acceptă defragmentarea online. În plus, există un instrument (e4defrag) care poate defragmenta fișiere unice sau întregul sistem de fișiere.

Verificare mai rapidă a integrității

Verificarea integrității sistemului de fișiere ( fsck ) este foarte lentă, mai ales în ceea ce privește primul pas: verificarea tuturor inodurilor sistemului de fișiere. În ext4, la sfârșitul fiecărui tabel de grup de inode, se salvează o listă de blocuri neutilizate (cu o sumă de control , pentru siguranță), astfel încât fsck nu va verifica acele noduri. Rezultatul este că timpul total luat de fsck se îmbunătățește de 2 până la 20 de ori, în funcție de numărul de inoduri utilizate. Rețineți că fsck, nu ext4, construiește lista inodurilor neutilizate. Aceasta înseamnă că trebuie să rulați fsck pentru a crea listele de inode neutilizate și numai din următoarea rundă fsck va fi mai rapid (în special, trebuie să rulați fsck pentru a converti un sistem de fișiere ext3 în ext4). Există o altă caracteristică care participă la accelerarea fsck și acestea sunt „grupuri flexibile de blocuri”, care ajută la accelerarea operațiunilor sistemului de fișiere.

Caracteristici legate de inoduri

Inode mai mari, marcaje de timp nanosecunde, atribute extinse, rezervare inode.

  • Inode mai mari: ext3 vă permite să configurați dimensiunea inodurilor (prin parametrul -I al mkfs ), dar dimensiunea implicită este de 128 octeți. ext4 folosește în schimb 256 de octeți ca valoare implicită. Acest lucru este necesar pentru a permite utilizarea câmpurilor suplimentare (cum ar fi marca de timp nanosecundă sau versiunea inode): spațiul rămas în inod va fi utilizat pentru a stoca atribute extinse care sunt suficient de mici pentru a se potrivi în acel spațiu. Acest lucru face ca accesarea acestor atribute să fie mult mai rapidă și îmbunătățește performanța aplicațiilor care utilizează atribute extinse (cu un factor de la 3 la 7).
  • Rezervare inode: constă în rezervarea unor inode atunci când este creat un director, presupunând că aceste inode vor fi utilizate în viitor. Această alegere îmbunătățește performanța, deoarece atunci când sunt create fișiere noi în acest director, acestea vor fi stocate în inoduri rezervate. Ca urmare, crearea și ștergerea unor astfel de fișiere sunt mai eficiente.
  • Marcaje de timp în nanosecunde: pe măsură ce computerele devin din ce în ce mai rapide, iar Linux este utilizat în multe aplicații critice pentru misiune , exprimarea marcajelor de timp în câteva secunde devine insuficientă. ext4 stochează apoi marcajele temporale în nanosecunde (miliardimi de secundă).

Această caracteristică este prezentă de la nucleul 2.6.23.

Bariere active în mod implicit

Această opțiune mărește fiabilitatea sistemului de fișiere cu prețul unor performanțe (poate fi dezactivată cu „mount -o barriere = 0”). Sistemul de fișiere, înainte de a scrie comiterea de jurnalizare, trebuie să se asigure că toate informațiile despre tranzacții sunt jurnalizate. Pur și simplu să scrieți în ordinea corectă nu este suficient; dispozitivele actuale au o mulțime de cache și reordonează operațiunile pentru a îmbunătăți performanța. Deci sistemul de fișiere trebuie să solicite în mod explicit discului să scrie efectiv toate datele jurnalului înainte de a scrie înregistrarea de confirmare; dacă înregistrarea de confirmare a fost scrisă mai întâi, jurnalul ar putea fi corupt. Subsistemul I / O bloc face acest lucru posibil prin utilizarea barierelor; în esență, o barieră împiedică scrierea blocurilor după barieră până când toate blocurile scrise înainte de barieră sunt scrise efectiv pe suport. Utilizarea barierelor permite sistemului de fișiere să garanteze în permanență consistența structurii sale.

Modul „Fără jurnalizare”

Jurnalizarea asigură integritatea sistemului de fișiere prin păstrarea unui jurnal al modificărilor care urmează să fie făcute pe disc. Cu toate acestea, evident, provoacă un pic de cheltuieli. Unele sisteme cu cerințe speciale pot utiliza ext4 prin dezactivarea jurnalizării, ceea ce duce la o ușoară creștere a performanței cu prețul unui risc crescut de deteriorare cauzat de probleme hardware, cum ar fi întreruperile de alimentare.

Notă

  1. ^ https://ols2006.108.redhat.com/2007/Reprints/mathur-Reprint.pdf [ link rupt ]
  2. ^ LKML: Linus Torvalds: Re: [Ext2-devel] [RFC 0/13] extents și 48bit ext3
  3. ^ LKML: "Theodore Ts'o": Propunere și plan pentru ext2 / 3 viitoare lucrări de dezvoltare
  4. ^ ext4: Redenumiți ext4dev în ext4 , pe git.kernel.org , arborele nucleului Linus. Adus la 20 octombrie 2008 (arhivat din original la 29 mai 2012) .
  5. ^ Thorsten Leemhuis, Higher and further: The innovations of Linux 2.6.28 , în Heise Online , 23 decembrie 2008.

Elemente conexe

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT