Sistem de fișiere Unix

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

UFS (Unix File System) este un sistem de fișiere utilizat în principal în Unix si Unix-like de operare sisteme . Este un derivat al Berkeley Fast File System , care a fost el însuși dezvoltat din FS folosit de prima versiune a Unix realizată la Bell Labs .

Aproape toate derivatele BSD , inclusiv FreeBSD , NetBSD , OpenBSD , NEXTSTEP șiSolaris , utilizează o variantă a UFS. Pe macOS este disponibil ca alternativă la HFS + . În Linux există suport parțial pentru UFS, în timp ce primul sistem de fișiere utilizat numai pentru Linux, ext2 , este, de asemenea, derivat din UFS.

Istorie și evoluție

Primele versiuni ale sistemului de fișiere Unix au fost denumite pur și simplu FS. FS a inclus doar blocul de boot, superblocul, un grup de inoduri și blocuri de date. Acest sistem de fișiere a funcționat bine pentru primele discuri Unix mici, dar avansarea tehnologiei și lărgirea discurilor, mișcarea capului înainte și înapoi între grupurile de inoduri și referințele la blocurile de date au cauzat thrashing (thrashing este o situație în care cantități mari de resurse informatice sunt folosite pentru a face o cantitate minimă de muncă, sistemul fiind într-o stare continuă de lipsă de resurse.). Marshall Kirk McKusick, pe atunci student Berkeley, a optimizat FS pentru sistemul de operare 4.2BSD numindu-l FFS (Fast File System), inventând grupuri de cilindri. Aceasta împarte discul în multe bucăți mici, fiecare cu grupul său de inoduri și blocuri de date.

Intenția BSD FFS este de a încerca să localizeze datele asociate și blocurile de metadate în același grup de cilindri și să plaseze în mod ideal tot conținutul unui director (atât date cât și metadate pentru toate fișierele), în același sau în vecinătatea un grup de cilindri, reducând astfel fragmentarea cauzată de dispersia conținutului unui director pe un întreg disc.

Unii dintre parametrii de performanță din superbloc au inclus numărul de piste și sectoare, viteza de rotație a discului, viteza capului și alinierea sectoarelor între piste. Într-un sistem complet optimizat, capul ar putea fi mutat pe piesele învecinate pentru a citi alternativ sectoarele distribuite, pe o perioadă de rotație completă a discului.

Pe măsură ce discurile au devenit din ce în ce mai mari, optimizările la nivel de sector au devenit învechite (în special cu discurile care foloseau numerotarea liniară a sectorului și sectoarele variabile pe pistă). Cu discuri mai mari și fișiere mai mari, citirea fragmentelor a devenit o problemă. Pentru a rezolva această problemă, BSD a mărit inițial dimensiunea blocului din sistemul de fișiere de la un sector la 1k în 4.0BSD; iar în SBB a crescut dimensiunea blocului în sistemul de fișiere de la 1k la 8k. Toate acestea au avut mai multe efecte. Posibilitatea ca sectoarele de fișiere să fie continue este mai mare. Cantitatea de cheltuieli generale pentru listarea blocurilor de fișiere a scăzut. A crescut numărul de octeți care pot fi reprezentați de un număr dat de blocuri; deoarece numărul maxim de blocuri este limitat de o lățime fixă ​​a blocului, acest lucru este permis și pentru discurile mari.

Cu blocuri mari, discurile cu multe fișiere mici pot pierde mult spațiu. Din acest motiv, BSD a adăugat o fragmentare la nivel de bloc (numită și bloc de subalocare), unde ultimul bloc parțial de date din diferite fișiere poate fi stocat într-un singur fragment de bloc, în loc de mai multe blocuri în mare parte goale (Allen 2005).

Implementare și structură

Un sistem de fișiere UFS constă din următoarele componente:

  • primul sector al discului (512 octeți) conține tabela de partiții.
  • un număr mic de blocuri situate la începutul partiției (sectorul 1 - 15) sunt destinate boot-ului (și inițializate separat de sistemul de fișiere în sine)
  • un superbloc, care conține un număr magic care identifică sistemul de fișiere ca UFS și alți parametri vitali care descriu geometria sistemului de fișiere și unele statistici.
  • o serie de grupuri de cilindri. Fiecare grup conține:
    • o copie de rezervă a superblocului
    • numărul de directoare
    • numărul de inoduri , care includ date despre atributele fișierelor pe care le conțin
    • un antet, care conține câteva statistici, printre care lista blocurilor și inodurilor libere, fragmentarea în grupuri de cilindri. Este similar cu superblocul, dar aplicat fiecărui grup de cilindri
    • numărul de blocuri de date din grupul de cilindri
    • harta blocurilor libere
    • harta inodurilor utilizate

Inodurile sunt numerotate secvențial: primele două inode sunt rezervate din motive istorice și sunt imediat urmate de inodul director rădăcină , care este deci întotdeauna inodul 2.

Fișierele care descriu directoare conțin doar numele și indicatorii inode ai elementelor pe care le conțin. Toate metadatele sunt stocate în inodul propriu-zis.

Prezent și viitor

Mulți sunt cei care au adaptat UFS la propriile scopuri prin adăugarea de extensii proprietare care nu sunt compatibile cu alte versiuni. În mod surprinzător, unii au continuat să utilizeze dimensiunea blocului original și câmpurile de date. Unele margini de compatibilitate între diferite versiuni, cel puțin la citirea sistemului de fișiere, au rămas.

FreeBSD 5.0 ​​a introdus UFS2 , care are suport pentru volume de peste 1 TB .

Linux are sistemul de fișiere EXT2, scris de la zero, dar bazat pe principiile UFS, în timp ce nu are, din cauza absenței unui standard UFS unificat, un instrument pentru a putea scrie în acest sistem de fișiere.

Din 2004 Sun Microsystems a introdus „conectarea” la Solaris 7, făcând astfel UFS un sistem de fișiere jurnalizat (a se vedea jurnalizarea ). Solaris are, de asemenea, mai multe extensii pentru manipularea fișierelor mari și a volumelor mari.

linkuri externe

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