ext4

Stort filsystem Filsystemet ext4 har stöd för volymer med en storlek på upp till 1 exbibyte (EiB) och enskilda filer med en storlek på upp till 16 tebibyte (TiB) med en standardblockstorlek på 4 KiB. De maximala storleksgränserna för filer, kataloger och filsystem växer åtminstone proportionellt med filsystemets blockstorlek upp till den maximala blockstorlek på 64 KiB som är tillgänglig på ARM- och PowerPC/Power ISA-processorer. Extents Extents ersätter det traditionella blockmappningsschema som används av ext2 och ext3. En extent är ett område av sammanhängande fysiska block, vilket förbättrar prestandan för stora filer och minskar fragmenteringen. En enda extent i ext4 kan mappa upp till 128 MiB sammanhängande utrymme med en blockstorlek på 4 KiB. Det kan finnas fyra extents som lagras direkt i inoden. När det finns fler än fyra extents i en fil indexeras resten av extents i ett träd. Bakåtkompatibilitet ext4 är bakåtkompatibel med ext3 och ext2, vilket gör det möjligt att montera ext3 och ext2 som ext4. Detta kommer att förbättra prestandan något, eftersom vissa nya funktioner i ext4-implementationen också kan användas med ext3 och ext2, t.ex. den nya blockallokeringsalgoritmen, utan att påverka formatet på skivan. ext3 är delvis framåtkompatibelt med ext4. I praktiken kommer ext4 inte att monteras som ett ext3-filsystem från början, om inte vissa nya funktioner inaktiveras när det skapas, till exempel ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink och ^extra_isize. Beständig förallokering ext4 kan förallokera utrymme på disken för en fil. För att göra detta på de flesta filsystem skulle nollor skrivas till filen när den skapas. I ext4 (och vissa andra filsystem som XFS) kan fallocate(), ett nytt systemanrop i Linuxkärnan, användas. Det tilldelade utrymmet är garanterat och sannolikt sammanhängande. Denna situation har tillämpningar för mediaströmning och databaser. Fördröjd allokering ext4 använder en prestandateknik som kallas allocate-on-flush, även känd som fördröjd allokering. Det innebär att ext4 fördröjer blockallokering tills data har spolats till disken. (I motsats till detta allokerar vissa filsystem block omedelbart, även när data hamnar i en skrivcache). Fördröjd allokering förbättrar prestandan och minskar fragmenteringen genom att effektivt allokera större mängder data åt gången. Obegränsat antal underkataloger ext4 begränsar inte antalet underkataloger i en enskild katalog, förutom genom den inneboende storleksgränsen för själva katalogen. (I ext3 kan en katalog ha högst 32 000 underkataloger.) För att möjliggöra större kataloger och fortsatt prestanda aktiverar ext4 i Linux 2.6.23 och senare som standard HTree-index (en specialiserad version av ett B-träd), vilket gör det möjligt att lagra kataloger med upp till cirka 10-12 miljoner poster i HTree-indexet i två nivåer och en gräns för katalogstorlek på 2 GB för en blockstorlek på 4 KiB, beroende på filnamnets längd. I Linux 4.12 och senare aktiverade largedir-funktionen ett HTree-index i tre nivåer och katalogstorlekar på över 2 GB, vilket möjliggör cirka 6 miljarder poster i en enda katalog. Journalchecksummor ext4 använder checksummor i journalen för att förbättra tillförlitligheten, eftersom journalen är en av de mest använda filerna på disken. Den här funktionen har en sidofördel: den kan på ett säkert sätt undvika en I/O-väntetid på disken vid journalföring, vilket förbättrar prestandan något. Journal checksumming inspirerades av en forskningsartikel från University of Wisconsin med titeln IRON File Systems (närmare bestämt avsnitt 6, kallat ”transaction checksums”), med ändringar inom genomförandet av sammansatta transaktioner som utförs av IRON-filsystemet (ursprungligen föreslaget av Sam Naghshineh i RedHat summit). Kontrollsummering av metadata Sedan Linuxkärnan 3.5 släpptes 2012 Snabbare kontroll av filsystemet I ext4 markeras oallokerade blockgrupper och sektioner i inodtabellen som sådana. Detta gör det möjligt för e2fsck att hoppa över dem helt och hållet och minskar kraftigt den tid det tar att kontrollera filsystemet. Linux 2.6.24 implementerar denna funktion.

fsck-tidsberoende av antalet inoder (ext3 vs. ext4)

Multiblockallokator När ext3 lägger till en fil anropar den blockallokatorn, en gång för varje block. Om det finns flera samtidiga skrivare kan filerna därför lätt bli fragmenterade på disken. ext4 använder dock fördröjd allokering, vilket gör det möjligt att buffra data och allokera grupper av block. Allokatorn för flera block kan därför göra bättre val när det gäller att allokera filer sammanhängande på disken. Allokatorn för flera block kan också användas när filer öppnas i läget O_DIRECT. Denna funktion påverkar inte diskformatet. Förbättrade tidsstämplar I takt med att datorer generellt sett blir snabbare, och i takt med att Linux används mer för verksamhetskritiska tillämpningar, blir granulariteten hos sekundsbaserade tidsstämplar otillräcklig. För att lösa detta tillhandahåller ext4 tidsstämplar som mäts i nanosekunder. Dessutom läggs 2 bitar av det utökade tidsstämpelfältet till de mest betydelsefulla bitarna i sekunderfältet i tidsstämplarna för att skjuta upp problemet med år 2038 i ytterligare 408 år. ext4 ger också stöd för tidsstämplar som skapats vid tidpunkten för skapandet. Men, som Theodore Ts’o påpekar, medan det är lätt att lägga till ett extra fält för skapelsedatum i inoden (vilket tekniskt sett möjliggör stöd för dessa tidsstämplar i ext4), är det svårare att ändra eller lägga till de nödvändiga systemanropen, som stat() (vilket förmodligen skulle kräva en ny version) och de olika biblioteken som är beroende av dem (som glibc). Dessa ändringar kommer att kräva samordning av många projekt. Därför är skapelsedatumet som lagras av ext4 för närvarande endast tillgängligt för användarprogram på Linux viastatx()API:et. Projektkvoter Stöd för projektkvoter lades till i Linuxkärna 4.4 den 8 januari 2016. Denna funktion gör det möjligt att tilldela diskkvotgränser till ett visst projekt-ID. Projekt-ID för en fil är ett 32-bitars nummer som lagras på varje fil och ärvs av alla filer och underkataloger som skapas under en överordnad katalog med ett tilldelat projekt-ID. Detta gör det möjligt att tilldela kvotgränser till ett visst underkatalogträd oberoende av filåtkomstbehörigheter för filen, t.ex. användar- och projektkvoter som är beroende av UID och GID. Detta liknar en katalogkvot, men den största skillnaden är att samma projekt-ID kan tilldelas flera kataloger på översta nivå och att det inte är strikt hierarkiskt. Transparent kryptering Stöd för transparent kryptering lades till i Linuxkärna 4.1 i juni 2015. Latent initialisering Funktionen lazyinit gör det möjligt att rensa inodetabeller i bakgrunden, vilket snabbar upp initialiseringen när ett nytt ext4-filsystem skapas. Den är tillgänglig sedan 2010 i Linuxkärnans version 2.6.37. Skrivbarriärer ext4 aktiverar skrivbarriärer som standard. Den säkerställer att filsystemets metadata skrivs korrekt och ordnas på disken, även när skrivcacher tappar strömmen. Detta går med en prestandakostnad, särskilt för program som använder fsync mycket eller skapar och raderar många små filer. För diskar med en batteridriven skrivcache kan det vara säkert att förbättra prestandan om man inaktiverar barriärer (alternativ ”barrier=0”).

Lämna ett svar

Din e-postadress kommer inte publiceras.