# HFS Plus

Das Dateisystem HFS Plus oder – gängiger – HFS+ ist eine Weiterentwicklung von HFS. Die Abkürzung steht für Hierarchical File System, hierarchisches Dateisystem. Es wurde am 19. Januar 1998 mit Mac OS 8.1 eingeführt und war lange Zeit das Standard-Dateisystem für Macintosh-Rechner mit Mac OS X, das seit 2012 OS X und seit 2016 macOS heißt, und iOS-Geräte (iPhone, iPad, iPod, Apple TV und Apple Watch) und kann für alle internen und externen Speichermedien verwendet werden. In Mac OS X selbst wurde es als Mac OS Extended und sein Vorgänger HFS als Mac OS Standard bezeichnet.
Im Vergleich mit FAT16/32 sind die Zuordnungseinheiten von HFS+ kleiner – dadurch kann sich bei der Partition bzw. bei der Partitionsverwaltung und Zugriffsgeschwindigkeit eine höhere Effizienz ergeben.
Der Nachfolger von HFS Plus ist das 2016 vorgestellte Apple File System (APFS).

## Varianten

Es gibt mehrere, teils kombinierbare Varianten von HFS Plus. Der Vollständigkeit halber wird auch das ältere HFS hier aufgelistet, wie es unter Mac OS X im Festplatten-Dienstprogramm zur Auswahl steht oder stand. In neueren Versionen von OS X/​macOS sind die älteren Varianten teilweise nicht mehr verfügbar.

### Mac OS Standard

    Das ältere, seit 1986 verfügbare, Hierarchical File System (hierarchisches Dateisystem).

### Mac OS Extended

    Das am 19. Januar 1998 mit Mac OS 8.1 eingeführte neue Dateisystem HFS Plus. Es ist das Standard-Dateisystem unter Mac OS ab 8.1 bis 9.2.2 (den letzten klassischen Mac-OS-Versionen, bis 2001) und Mac OS X bis 10.2 (Jaguar, 2002).

### Mac OS Extended (Journaled)

    Diese auch als jHFS+ oder HFS+J bezeichnete Variante wurde erstmals unter Mac OS X Server 10.2.2 (2002, basierend auf „Jaguar“) eingeführt und unter Mac OS X Panther (10.3, 2003) zum Standard auch bei der Desktop-Version. Dabei ist das Journal nicht Teil des Dateisystems selbst, sondern als virtuelles Dateisystem (VFS) im Betriebssystem in Form zweier regulärer Dateien .journal und .journal_info_block realisiert, sodass das Dateisystem selbst wahlweise mit oder ohne Journal eingebunden werden kann. Auch ältere Versionen von Mac OS/​Mac OS X können somit dasselbe Dateisystem verwenden, jedoch ohne das Journal.

### Mac OS Extended (Journaled, Groß-/Kleinschreibung)

    Diese Variante wurde ebenfalls mit Mac OS X Panther (10.3, 2003) eingeführt. Das Betriebssystem unterscheidet dabei strikt zwischen Groß- und Kleinschreibung bei Pfad- und Dateinamen, was auch als englisch Case sensitivity bezeichnet wird. Für diese auch als HFSX bezeichnete Variante wird eine andere Partitionskennung verwendet, um zu verhindern, dass die Partition (und somit das Dateisystem) unter einer älteren nicht damit kompatiblen Version von Mac OS/​Mac OS X eingebunden wird, da dies zu Datenverlust führen könnte.
    HFSX in dieser case-sensitiven Variante war vor der Ablöse durch APFS das Standard-Dateisystem auf iOS-Geräten.
Außer in der HFSX-Variante macht bei HFS Plus standardmäßig das Dateisystem (dessen Treiber) keine Unterscheidung zwischen Groß- und Kleinbuchstaben im Dateinamen, sodass z. B. Dateiname.ext (großer Anfangsbuchstabe) dieselbe Datei repräsentiert wie dateiname.ext (alles in Kleinbuchstaben). Die Normalisierung (Umwandlung von Groß- und Kleinbuchstaben, NFD-Normalisierung bei Unicode) findet dabei im Dateisystem-Treiber statt.
HFS Plus wurde nach der Umstellung von der PowerPC- auf die Intel-Architektur 2006 nur noch in der Journaling-Variante genutzt. Wie etwa die freien Dateisysteme ext3/ext4, XFS und ReiserFS oder das kommerzielle NTFS der Firma Microsoft, weist es damit eine höhere Stabilität gegenüber Dateisystemen auf, die kein Journaling verwenden (FAT16 und FAT32, ext2, HFS u. a.).

### Partitionskennung

Unter klassischem Mac OS und auf den PowerPC-Versionen von Mac OS X verwendet HFS und HFS Plus dieselbe Partitionskennung Apple_HFS in der Apple Partition Map (APM). In der Variante HFSX wird aus Kompatibilitätsgründen hingegen die Kennung Apple_HFSX genutzt, damit ältere Betriebssysteme nicht versehentlich eine modernere (inkompatible) Variante von HFS Plus einbinden, was eventuell zu Systeminstabilität und Datenverlust führen könnte. Dies ist u. a. für die case-sensitive Variante von HFSX der Fall, nicht aber bei der Journaling-Variante.
Seit der Umstellung auf die Intel-Prozessorarchitektur IA-32 2006 wird GUID Partition Table (GPT) als Partitionstabelle verwendet. Die alte HFS-Partition ist darin nicht mehr abgebildet – HFSX mit GUID 48465300-0000-11AA-AA11-00306543ECAC ist die Standard-GPT-Kennung für das HFS-Plus-Dateisystem.
Für RAID- und FileVault-Partitionen gibt es abweichende Partitions-GUIDs innerhalb einer GUID-Partitionstabelle (GPT), wie auch für RAID-Partitionen innerhalb einer Apple Partition Map (APM). Diese Partitionstypen können ebenfalls ein HFS-Plus-Dateisystem enthalten, müssen aber nicht.

## Kompatibilität
### Unixoide Betriebssysteme

Unter den Linux-Distributionen ist das Lesen und Schreiben von HFS/HFS+ oft schon durch einfaches mounten möglich, wenn der Kernel das hfsplus-Dateisystem unterstützt; ansonsten sind noch die Softwarepakete hfsutils (nur HFS) sowie hfsplus zum Nachinstallieren verfügbar. Für Schreibunterstützung kann es notwendig sein, hfsprogs zu installieren oder das Dateisystem-Journal zu deaktivieren. Auch für BSD-Systeme gibt es entsprechende Software-Pakete. Das heißt, dass die Daten auf dem Datenträger von Unix/Linux-Systemen gelesen werden können, wenn die entsprechende Kernel-Unterstützung installiert wurde.

### Microsoft Windows

HFS+ kann von NT-basierenden Windows-Betriebssystemen nur mit Hilfe von zusätzlicher Software genutzt werden. Boot Camp 3.0, welches mit Mac OS X Snow Leopard (10.6, 2009) mitgeliefert wird, bietet die Möglichkeit, lesend auf HFS+-Dateisysteme zuzugreifen.

#### Freie Software für HFS(+) unter Windows

* HFSExplorer von catacombae (benötigt Java SE Runtime Environment 5.0 oder höher)

#### Proprietäre Software für HFS(+) unter Windows

* TransMac von Acute Systems
* MacDrive von Mediafour
* HFS+ für Windows von Paragon Software Group
* MacOpener von DataViz (Entwicklung eingestellt)
* Linux Reader™ for Windows von DiskInternals Research

### Mac OS X/Classic

Die Classic-Umgebung unter Mac OS X erfordert eine mit HFS+ formatierte Systempartition, das Dateisystem UFS wird nicht unterstützt.

## Fragmentierung

HFS und HFS+ sind so ausgelegt, dass sie den größten freien Speicherblock auf der Festplatte suchen, in dem eine Datei gespeichert werden soll. Erst wenn eine Datei nicht in den größten freien Speicherblock passt, wird die Datei aufgeteilt (fragmentiert), und der noch nicht geschriebene Teil wird in einem weiteren Block gespeichert.
Eine solche Vorgehensweise setzt voraus, dass beim Schreiben einer Datei deren Größe bereits vorher bekannt ist. Dies ist unter Mac OS X oft gegeben, da die Systembibliotheken zur Verarbeitung von Dokumenten so ausgelegt sind, dass sie Dateien in der Regel atomar aktualisieren: Beim Speichern einer Änderung wird die aktuelle Version des Dokumentes in einem Rutsch in eine neue Datei geschrieben, danach die frühere Version gelöscht und der Dateiname auf die neue Datei übertragen.
Zusätzlich vermeidet es Mac OS X, frei gewordene Speicherblöcke gelöschter Dateien wiederzuverwenden, falls möglich. Ab Mac OS X 10.2 („Jaguar“, 2002) wird außerdem die Abbuchung freier Blöcke verzögert, um die Reservierung mehrerer kleiner Blöcke in eine einzelne Abbuchung eines großen zusammenhängenden Blockes zusammenzufassen.
Diese Fragmentvermeidung ist wirkungslos, wenn Dateien langsam wachsen, also nach dem ersten Erstellen einer Datei später weitere Blöcke angehängt werden. Ab Mac OS X Panther (10.3, 2003) kann das Betriebssystem deshalb auch zur Laufzeit defragmentieren (on the fly defragmentation). Beim Öffnen einer Datei wird geprüft, ob diese in mehr als acht Teile fragmentiert ist. Ist dies der Fall und alle der nachfolgenden Bedingungen treffen zusätzlich zu, wird die Datei in einen genügend großen freien Speicherbereich verschoben und hierdurch defragmentiert:
* Die Datei wird nur von einem einzigen Prozess geöffnet.
* Sie liegt auf einem beschreibbaren Medium.
* Die Dateigröße beträgt höchstens 20 MiB.
* Innerhalb der letzten Minute wurde die Datei nicht verändert.
* Das Betriebssystem läuft seit mindestens drei Minuten.
Ein weiteres Verfahren, das ab Version 10.3 von Mac OS X (Panther, 2003) zum Einsatz kommt, ist die automatische Gruppierung intensiv genutzter Dateien (adaptive hot file clustering): Durch kontinuierliches Führen einer Statistik über die Häufigkeit der Lesezugriffe auf jede Datei identifiziert Mac OS X die am intensivsten genutzten Dateien und verschiebt diese in einen Bereich des Dateisystems, der sich direkt hinter den zentralen Metadaten befindet. Bei dieser Verschiebung werden die Dateien defragmentiert und kommen in direkter Nachbarschaft der am häufigsten benutzten Elemente des HFS-Dateisystems zu liegen, so dass Kopfbewegungen der Festplatte minimiert werden. Die Nutzungsintensität einer Datei wird ermittelt, indem die Anzahl der innerhalb eines Beobachtungsfensters der letzten 60 Stunden gelesenen Bytes durch die Gesamtgröße der Datei geteilt wird. Als Speicherbereich für diese Dateien wird 0,5 % der Gesamtkapazität des Dateisystems verwendet. Die Anzahl der Dateien in diesem Bereich wird auf maximal 5.000 beschränkt, und nur Dateien, die höchstens 10 MiB groß sind, nehmen an dem Verfahren teil.
Weitere Defragmentierungsverfahren sind nicht Bestandteil von Mac OS X. Apple rät davon ab, Programme zur nachträglichen Defragmentierung zu verwenden, da sich der Einsatz in der Regel nicht lohnt.

## Kritik

Ein bekanntes Problem bei der Verwendung von HFS Plus ist die Voreinstellung auf case-insensitivity, die auf Dateisystemebene erzwungen wird. Durch diese Eigenschaft entstehen ungewollte Inkompatibilitäten im Datenaustausch mit anderen Computersystemen. Anders als z. B. bei NTFS, wo die case-insensitivity von Windows nicht im Dateisystem selbst integriert ist, werden bei HFS Plus die Dateinamen durch den Dateisystemtreiber von Apple direkt umgewandelt.
Obwohl von HFS Plus auch eine strikte Case-sensitive-Variante existiert – sie wurde als „HFSX“ mit Mac OS X Panther (10.3, 2003) eingeführt – wird diese nur sehr selten genutzt, ist daher auch weniger gut getestet und teilweise sogar mit weit verbreiteter Anwendungssoftware inkompatibel. Dies ist jedoch keine Einschränkung von HFS Plus, sondern vielmehr ein Problem des Betriebssystems, da case sensitivity unter macOS (bis 2012 „Mac OS X“, bis 2016 „OS X“) in gleicher Weise auf anderen Dateisystemen (z. B. NTFS mittels NTFS-3G) zu Inkompatibilitäten führt.