Ted ts'o, de auteur van de ext2 / ext3 / ext4-bestandssystemen, accepteerde de Linux-next branch, op basis van waaruit de Linux Kernel 5.2-release zal worden gemaakt, een reeks veranderingen die ondersteuning implementeren voor onafhankelijke case-operaties in het Ext4-bestandssysteem.
De patches ze voegen ook ondersteuning toe voor UTF-8-tekens in bestandsnamen. De werkingsmodus zonder hoofdlettergebruik is optioneel opgenomen in de link naar afzonderlijke mappen met behulp van het nieuwe attribuut "+ F" (EXT4_CASEFOLD_FL).
Hoofdletterongevoelig voor ext4
Als dit kenmerk in de directory is geïnstalleerd, alle bewerkingen met bestanden en submappen die in haar zijn zal niet hoofdlettergevoelig zijn, inclusief het hoofdlettergebruik wordt genegeerd bij het zoeken en openen van bestanden (bijv. Test.txt, test.txt en test.TXT in vergelijkbare mappen) wordt als hetzelfde beschouwd).
Dat wil zeggen, het komt overeen met een invoer in het telefoonboek, zelfs als de naam die door de gebruikersruimte wordt gebruikt, geen byte voor byte is die overeenkomt met de schijfnaam, maar een hoofdlettergevoelige equivalente versie is van de Unicode-tekenreeks.
Deze bewerking wordt een hoofdletterongevoelige opzoeking van de bestandsnaam genoemd. De functie is geconfigureerd als een inode-attribuut dat wordt toegepast op mappen en wordt geërfd door hun onderliggende items.
Dit kenmerk alleen kan worden ingeschakeld op lege mappens voor bestandssystemen die de coderingsfunctie ondersteunen, waardoor de botsing van bestandsnamen die alleen van geval tot geval verschillen, wordt vermeden.
Standaard, met uitzondering van mappen met het "+ F" attribuut, is het bestandssysteem nog steeds hoofdlettergevoelig. Om de opname van de hoofdletterongevoelige modus te regelen, wordt een aangepaste set e2fsprogs-hulpprogramma's geleverd.
Deze patch implementeert daadwerkelijke ondersteuning voor hoofdletterongevoelige bestandsnaamzoekopdrachten in ext4, gebaseerd op de feature bit en codering die zijn opgeslagen in het superblok.
Een klus die lang op zich liet wachten
De patches zijn voorbereid door Gabriel Krisman Bertazi, medewerker van Collabora en werden overgenomen uit de zevende poging na drie jaar ontwikkeling en verwijdering van commentaren.
De implementatie brengt geen wijzigingen aan in het schijfopslagformaat en werkt uitsluitend op het niveau van het wijzigen van de logica voor het vergelijken van namen in de functie ext4_lookup () en het vervangen van de hash in de dcache-structuur (Directory Name Lookup Cache).
De waarde van het "+ F" -attribuut wordt opgeslagen in de inodes van de individuele mappen en is van toepassing op alle bijgevoegde bestanden en submappen. De coderingsinformatie wordt opgeslagen in het superblok.
Voorlopig worden negatieve lookups niet in de dcache gepusht, omdat ze hoe dan ook ongeldig zouden moeten worden, omdat we ontbrekende bestanden niet kunnen vertrouwen.
Dit is slecht voor de prestaties, maar vereist enige gebruikmaking van de vfs-laag om te corrigeren.
We kunnen voorlopig zonder leven, net als iedereen.
Om botsingen te voorkomen met de namen van de bestaande bestanden, het "+ F" -attribuut kan alleen worden ingesteld op lege mappen in bestandssystemen, waarin Unicode-ondersteuningsmodus in bestands- en directorynamen is ingeschakeld tijdens de aankoppelingsfase.
De namen van de directory-elementen waarvoor het "+ F" -attribuut is geactiveerd worden automatisch naar kleine letters vertaald en op deze manier in dcache weergegeven, maar ze worden op schijf opgeslagen in de vorm die oorspronkelijk door de gebruiker is gedefinieerd.
Nieuwe disk-hashes worden berekend als de hash van de hele keten van cases, in plaats van de keten rechtstreeks.
Dat wil zeggen, ondanks naamverwerking, ongeacht het geval, de namen worden weergegeven en opgeslagen zonder verlies van informatie over het hoofdlettergebruik van de tekens (maar het systeem staat u niet toe om een bestandsnaam met dezelfde tekens te maken, maar in een ander hoofdlettergebruik).
Het stelt de VFS-code ook in staat om snel het juiste item in de cache te vinden, ook al is een equivalente tekenreeks gebruikt in een eerdere zoekopdracht