Twee weken geleden is op LWN.net een artikel verschenen waarin gemeld werd dat patches waren geschreven waarmee het bestandssysteem ext3 voorzien zou kunnen worden van support voor grote partities. Ext3 wordt onder meer in veel Linux-distributies gebruikt als 'file system of choice' vanwege zijn betrouwbaarheid. Het bestandssysteem heeft echter als voornaamste nadeel dat slechts gewerkt kan worden met partities die maximaal 8TB groot zijn. Dit is voor de meeste thuisgebruikers geen probleem, maar voor bedrijven wordt dit veel vaker een beperkende factor. De genoemde maximumgrootte van 8TB heeft twee oorzaken. Er wordt gebruikgemaakt van signed 32bits bloknummers binnen het file system. De ext3-code kan slechts twee gigablokken aan, wat betekent dat met een blokgrootte van 4KB er maximaal 8TB aan ruimte is. Door van signed naar unsigned bloknummers te switchen kan dit 16TB worden; dat is echter geen oplossing voor de lange termijn.
Het tweede probleem is te vinden in de manier waarop ext3 bijhoudt welke blokken bij een bepaald bestand horen. De inodestructuur van ext3 bevat een array die bestaat uit 15 32bits pointers. De eerste 12 pointers verwijzen naar de eerste 12 blokken van het bestand, voldoende voor een bestand van 48KB bij een blokgrootte van 4KB. Wanneer een bestand groter wordt dan 48KB wordt een 'indirect block' gecreëerd: een extra array met 1024 pointers naar bestandsblokken. De 13e pointer uit de eerste array verwijst naar dit indirecte blok en de 14e en 15e verwijzen op hun beurt weer naar 'double indirect blocks': pointers die verwijzen naar indirecte blokken met pointers. Hierdoor kunnen bestanden gemaakt worden met een grootte van 4TB. Dit systeem werkt voor kleine bestanden erg efficiënt, naarmate bestanden groter worden, wordt het pointerbeheer een kostbare aangelegenheid vanwege de overhead.
Een oplossing voor deze problemen is gevonden in een patch die 48bits support aan ext3 toevoegt waardoor de maximale partitiegrootte 1024PB (1.048.576TB) wordt. Het belangrijkste onderdeel van deze patch is de ondersteuning voor 'extents'. Een extent is een groep blokken die zowel binnen de bestandsstructuur als op fysiek niveau logisch achter elkaar zijn geplaatst. Door de bestandsstructuur op te slaan als extent hoeft dus minder metadata worden opgeslagen, omdat één extent verwijst naar meerdere blokken, iets waar voorheen meerdere pointers nodig waren. Wanneer ext3 met deze patch gebruikt wordt, zullen oude bestanden op de conventionele wijze behandeld worden. Nieuwe bestanden worden op de nieuwe manier opgeslagen. Vanuit de kernelgemeenschap, waar de ext3-drivers ontwikkeld worden, is positief gereageerd. Wel is de vraag gesteld of ext3 nog wel ext3 moet heten. Het toevoegen van de patches heeft namelijk veel vragen opgeleverd.
Zo is opgemerkt dat het verder ontwikkelen van het stabiele ext3 voor instabiliteit kan zorgen, wat mogelijk tot bestandsverlies zou kunnen leiden. Verder betekent het invoeren van het bijgewerkte ext3 dat nieuw gemaakte bestanden niet gelezen kunnen worden door de oude ext3-driver, omdat die niet kan omgaan met de nieuwe bestandsstructuur. Dat zorgt voor onduidelijkheid bij eindgebruikers die niet zullen begrijpen dat ext3 niet overal hetzelfde is. Tot slot zorgt het invoeren van de huidige patch voor extra complexiteit in de ext3-code, doordat de nieuwe features allerlei conditionele checks met zich meebrengen. Hierom is besloten door de maintainers van ext een nieuw file system te creëren: ext3dev. Deze wordt voorzien van de genoemde patches en zal verder ontwikkeld worden. Het huidige ext3 zal alleen nog van bugfixes voorzien worden. Wanneer ext3dev voldoende stabiel is, zal deze omgedoopt worden naar ext4 waarna met de uitrol begonnen kan worden.