
Under lång tid har HFS och HFS+ – Apples äldre filsystem – levt i skymundan i Linuxvärlden. Drivrutinerna har varit övergivna i över ett decennium och har orsakat fler problem än de löst. Diskussioner fördes tidigare i år om att helt slopa stödet i Linuxkärnan, men istället har flera utvecklare tagit initiativ till att återuppliva och stabilisera koden. Resultatet börjar nu märkas i Linux 6.17.
I samband med merge-fönstret rapporterade utvecklaren Viacheslav Dubeyko att det fortfarande finns omkring 221 öppna buggar i HFS/HFS+-drivrutinerna. Många av dessa har identifierats genom testsviten xfstests, som ofta lämnar volymer i ett korrupt tillstånd. Den pågående kodgranskningen har dock lett till konkreta förbättringar.
Exempel på viktiga åtgärder:
- Kodstädning i I/O-hantering:
Johannes Thumshirn har förbättrat strukturen i funktionenhfsplus_submit_bio()
för ökad läsbarhet och robusthet. - Metadatahantering förbättrad:
Tetsuo Handa har åtgärdat ett syzbot-rapporterat problem ihfsplus_create_attributes_file()
som uppstod när metadata i attributfilen blivit korrupt. - Onödiga varningar borttagna:
Yangtao Li har tagit bort en onödigWARN_ON()
-anrop ihfsplus_free_extents()
som kunde orsaka falska felrapporter vid fria block. - Fler minnesrelaterade fel har rättats:
- Problem med slab out-of-bounds i
hfs_bnode_read()
ochhfsplus_bnode_read()
har åtgärdats genom validering av offset och längd innan åtkomst till B-trädnoder. - Överläst stränglängd i
hfsplus_uni2asc()
kunde leda till minnesfel om namnposter i B-trädet var korrupta – detta är nu fixat. - En general protection fault i
hfs_find_init()
vid skapandet av B-trädsobjekt har eliminerats.
- Problem med slab out-of-bounds i
- Bättre kompatibilitet med testsystem:
Den generiska testcasengeneric/001
lyckas nu köra utan fel, tack vare att raderade B-trädnoder rensas korrekt.
Framtiden för HFS/HFS+ i Linux
Den senaste utvecklingen innebär ett lyft för användare som fortfarande arbetar med äldre Mac-media, såsom externa diskar och arkivformat. Istället för att förlora stödet helt får HFS och HFS+ nu en välbehövlig modernisering, vilket också gynnar filsystemstester och verktygsutveckling under Linux.
Noterbart är att Linux 6.17 också innehåller förbättringar för FireWire (IEEE-1394) – ett gränssnitt som historiskt varit vanligt på Apple-datorer.
https://www.phoronix.com/news/Apple-HFS-Linux-6.17
HFS (Hierarchical File System)
Introducerades av Apple 1985 som standardfilsystem för Mac OS.
– Bygger på en B-trädsstruktur för kataloger och filer
– Stödjer filmetadata via så kallade ”resource forks”
– Har begränsat stöd för moderna funktioner som filrättigheter och långa filnamn
HFS+
Lanserades 1998 som en förbättrad version av HFS, ibland kallad ”Mac OS Extended”.
– Stöd för längre filnamn (upp till 255 tecken)
– Unicode-baserad namngivning
– Effektivare hantering av stora volymer och filer
– Införde journalföring (HFS+ Journaled)
Användning och efterföljare
HFS+ var Apples primära filsystem i över 20 år – från Mac OS 8 till macOS Sierra.
2017 ersattes det av APFS (Apple File System) i macOS High Sierra för SSD-baserade system.
Under Linux
– Linuxkärnan har haft stöd för både HFS och HFS+ i läs-/skrivläge
– Stödet har varit bristfälligt under lång tid och lämnades länge utan aktivt underhåll
– Från Linux 6.17 påbörjades en ny satsning på att stabilisera och bevara stödet