ext4

Stort filsystem ext4-filsystemet kan understøtte volumener med størrelser på op til 1 exbibyte (EiB) og enkelte filer med størrelser på op til 16 tebibytes (TiB) med standardblokkestørrelsen på 4 KiB. De maksimale grænser for fil-, mappe- og filsystemstørrelser vokser mindst proportionalt med filsystemets blokstørrelse op til den maksimale blokstørrelse på 64 KiB, der er tilgængelig på ARM- og PowerPC/Power ISA-CPU’er. Extents Extents erstatter den traditionelle bloktilknytningsordning, der anvendes af ext2 og ext3. Et extent er et område af sammenhængende fysiske blokke, hvilket forbedrer ydeevnen for store filer og reducerer fragmentering. Et enkelt extent i ext4 kan kortlægge op til 128 MiB sammenhængende plads med en blokstørrelse på 4 KiB. Der kan være fire extents gemt direkte i inoden. Når der er mere end fire extents til en fil, indekseres resten af extentsene i et træ. Bagudkompatibilitet ext4 er bagudkompatibel med ext3 og ext2, hvilket gør det muligt at montere ext3 og ext2 som ext4. Dette vil forbedre ydeevnen en smule, fordi visse nye funktioner i ext4-implementeringen også kan bruges med ext3 og ext2, f.eks. den nye bloktildelingsalgoritme, uden at det påvirker formatet på disken. ext3 er delvist fremadkompatibel med ext4. I praksis vil ext4 ikke kunne monteres som et ext3-filsystem out of the box, medmindre visse nye funktioner er deaktiveret, når det oprettes, f.eks. ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink og ^extra_isize. Vedvarende forhåndsallokering ext4 kan forhåndsallokere plads på disken til en fil. For at gøre dette på de fleste filsystemer ville der blive skrevet nuller til filen, når den oprettes. I ext4 (og nogle andre filsystemer som f.eks. XFS) kan fallocate(), et nyt systemkald i Linux-kernen, anvendes. Den allokerede plads vil være garanteret og sandsynligvis sammenhængende. Denne situation har anvendelser for medie-streaming og databaser. Forsinket allokering ext4 anvender en præstationsteknik kaldet allocate-on-flush, også kendt som forsinket allokering. Det vil sige, at ext4 forsinker blokallokeringen, indtil dataene er flushet til disken. (I modsætning hertil allokerer nogle filsystemer blokke med det samme, selv når dataene går ind i en skrivecache). Forsinket allokering forbedrer ydeevnen og reducerer fragmentering ved effektivt at allokere større datamængder ad gangen. Ubegrænset antal undermapper ext4 begrænser ikke antallet af undermapper i en enkelt mappe, undtagen ved den iboende størrelsesgrænse for selve mappen. (I ext3 kan en mappe højst have 32.000 undermapper.) For at give mulighed for større mapper og fortsat ydeevne slår ext4 i Linux 2.6.23 og senere som standard HTree-indeks (en specialiseret version af et B-træ) til, hvilket gør det muligt at gemme mapper med op til ca. 10-12 millioner poster i HTree-indekset på 2 niveauer og en mappestørrelsesgrænse på 2 GB for en blokstørrelse på 4 KiB, afhængigt af filnavnets længde. I Linux 4.12 og senere muliggjorde largedir-funktionen et HTree på 3 niveauer og mappestørrelser på over 2 GB, hvilket giver mulighed for ca. 6 milliarder poster i en enkelt mappe. Journalkontrolsummer ext4 bruger kontrolsummer i journalen for at forbedre pålideligheden, da journalen er en af de mest brugte filer på disken. Denne funktion har en sidegevinst: den kan sikkert undgå en disk I/O-vente under journalføring, hvilket forbedrer ydeevnen en smule. Journal checksumming blev inspireret af en forskningsartikel fra University of Wisconsin med titlen IRON File Systems (specifikt afsnit 6, kaldet “transaction checksums”), med ændringer inden for implementeringen af sammensatte transaktioner udført af IRON-filsystemet (oprindeligt foreslået af Sam Naghshineh på RedHat-topmødet). Metadata checksumming Siden Linux-kernen 3.5 udgivet i 2012 Hurtigere filsystemkontrol I ext4 er ikke-allokerede blokgrupper og sektioner af inodetabellen markeret som sådan. Dette gør det muligt for e2fsck at springe dem helt over og reducerer i høj grad den tid, det tager at kontrollere filsystemet. Linux 2.6.24 implementerer denne funktion.

fsck-tidsafhængighed af inodeantal (ext3 vs. ext4)

Multiblockallokator Når ext3 tilføjer en fil, kalder den blokallokatoren, én gang for hver blok. Hvis der er flere samtidige forfattere, kan filer derfor let blive fragmenteret på disken, hvis der er flere samtidige forfattere. ext4 bruger imidlertid forsinket allokering, hvilket gør det muligt at buffer data og allokere grupper af blokke. Som følge heraf kan multiblokallokatoren træffe bedre valg med hensyn til at allokere filer sammenhængende på disken. Multiblockallokatoren kan også bruges, når filer åbnes i O_DIRECT-tilstand. Denne funktion påvirker ikke diskformatet. Forbedrede tidsstempler Efterhånden som computere generelt bliver hurtigere, og efterhånden som Linux bliver brugt mere til missionskritiske applikationer, bliver granulariteten af sekundbaserede tidsstempler utilstrækkelig. For at løse dette tilbyder ext4 tidsstempler målt i nanosekunder. Desuden tilføjes 2 bits i det udvidede tidsstempelfelt til de mest betydningsfulde bits i sekunder-feltet i tidsstemplerne for at udskyde problemet med år 2038 i yderligere 408 år. ext4 tilføjer også understøttelse af tidsstempler for oprettelsestidspunktet. Men som Theodore Ts’o påpeger, er det ganske vist let at tilføje et ekstra oprettelsesdatofelt i inoden (og dermed teknisk set muliggøre understøttelse af disse tidsstempler i ext4), men det er vanskeligere at ændre eller tilføje de nødvendige systemkald, som stat() (hvilket sandsynligvis ville kræve en ny version) og de forskellige biblioteker, der er afhængige af dem (som f.eks. glibc). Disse ændringer vil kræve koordinering af mange projekter. Derfor er den oprettelsesdato, der er gemt af ext4, i øjeblikket kun tilgængelig for brugerprogrammer på Linux viastatx()API’en. Projektkvoter Understøttelse af projektkvoter blev tilføjet i Linux-kernel 4.4 den 8. januar 2016. Denne funktion gør det muligt at tildele diskkvotegrænser til et bestemt projekt-id. Projekt-id’et for en fil er et 32-bit nummer, der er gemt på hver fil, og det arves af alle filer og undermapper, der oprettes under en overordnet mappe med et tildelt projekt-id. Dette gør det muligt at tildele kvotegrænser til et bestemt undermappetræ uafhængigt af filadgangstilladelser på filen, f.eks. bruger- og projektkvoter, der er afhængige af UID og GID. Selv om dette ligner en mappekvote, er den væsentligste forskel, at det samme projekt-id kan tildeles flere mapper på øverste niveau og ikke er strengt hierarkisk. Gennemsigtig kryptering Understøttelse af gennemsigtig kryptering blev tilføjet i Linux-kernel 4.1 i juni 2015. Doven initialisering Lazyinit-funktionen gør det muligt at rense inodetabeller i baggrunden, hvilket fremskynder initialiseringen, når der oprettes et nyt ext4-filsystem. Den er tilgængelig siden 2010 i Linux-kernelversion 2.6.37. Skrivebarrierer ext4 aktiverer skrivebarrierer som standard. Den sikrer, at metadata om filsystemet skrives korrekt og ordnes på disken, selv når skrivecacher mister strømmen. Dette går med en ydelsespris, især for programmer, der bruger fsync i høj grad eller opretter og sletter mange små filer. For diske med en batteridrevet skrivecache kan det sikkert forbedre ydeevnen at deaktivere barrierer (indstilling ‘barrier=0’).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.