HFS+ | |
Full Name: | Hierarchical File System Plus |
Developer: | Apple Inc. |
Introduction Os: | Mac OS 8.1 |
Preceded By: | HFS |
Succeeded By: | APFS |
Partition Id: | Apple_HFS (Apple Partition Map)0xAF (MBR) HFS and HFS+Apple_HFSX (Apple Partition Map) when HFSX 48465300-0000-11AA-<br />AA11-00306543ECAC (GPT) |
Directory Struct: | B-tree |
File Struct: | Bitmap |
Bad Blocks Struct: | B-tree |
Max Files No: | 4,294,967,295 (232 − 1) |
Max File Size: | 8 EB |
Max Filename Size: | 255 characters (255 UTF-16 encoding units, normalized to Apple-modified variant of Unicode Normalization Format D) |
Max Volume Size: | 8 exabyte[1] |
Filename Character Set: | Unicode, any character, including NUL. OS APIs may limit some characters for legacy reasons |
Dates Recorded: | access, attributes modified, backed up, contents modified, created |
Date Range: | – [2] |
Date Resolution: | 1 s |
Forks Streams: | Yes |
Attributes: | Color (3 bits, all other flags 1 bit), locked, custom icon, bundle, invisible, alias, system, stationery, inited, no INIT resources, shared, desktop |
File System Permissions: | Unix permissions, NFSv4 ACLs (Mac OS X v10.4 onward) |
Compression: | Partial (decmpfs, on Mac OS X 10.6 and higher)[3] |
Encryption: | Yes (on Mac OS X 10.7 and up). Per-home directory encryption is available with AES using HFS+-formatted .dmg volumes on OS X versions prior to 10.7 but later than Mac OS X 10.3 |
Os: | Mac OS 8.1, Mac OS 9, macOS/iOS/tvOS/watchOS/Darwin, Linux, Microsoft Windows (through Boot Camp IFS drivers) |
HFS Plus or HFS+ (also known as Mac OS Extended or HFS Extended) is a journaling file system developed by Apple Inc. It replaced the Hierarchical File System (HFS) as the primary file system of Apple computers with the 1998 release of Mac OS 8.1. HFS+ continued as the primary Mac OS X file system until it was itself replaced with the Apple File System (APFS), released with macOS High Sierra in 2017. HFS+ is also one of the formats supported by the iPod digital music player.
Compared to its predecessor HFS, also called Mac OS Standard or HFS Standard, HFS Plus supports much larger files (block addresses are 32-bit length instead of 16-bit) and using Unicode (instead of Mac OS Roman or any of several other character sets) for naming items. Like HFS, HFS Plus uses B-trees to store most volume metadata, but unlike most file systems that support hard links, HFS Plus supports hard links to directories. HFS Plus permits filenames up to 255 characters in length, and n-forked files similar to NTFS, though until 2005 almost no system software took advantage of forks other than the data fork and resource fork. HFS Plus also uses a full 32-bit allocation mapping table rather than HFS's 16 bits, improving the use of space on large disks.
Codenamed Sequoia in development,[4] HFS+ was introduced with the January 19, 1998, release of Mac OS 8.1.[5]
With the release of the Mac OS X 10.2.2 update on November 11, 2002, Apple added optional journaling features to HFS Plus for improved data reliability. These features were accessible through the GUI, using the Disk Utility application in Mac OS X Server, but only accessible through the command line in the standard desktop client.[6]
With Mac OS X v10.3, all HFS Plus volumes on all Macs were set to be journaled by default. Within the system, an HFS Plus volume with a journal is identified as HFSJ.
Mac OS X 10.3 also introduced another version of HFS Plus called HFSX. HFSX volumes are almost identical to HFS Plus volumes, except that they are never surrounded by the HFS Wrapper that is typical of HFS Plus volumes and they optionally support case sensitivity for file and folder names. HFSX volumes can be recognized by two entries in the Volume Header, a value of HX in the signature field and 5 in the version field.
Mac OS X 10.3 also marked Apple's adoption of Unicode 3.2 decomposition, superseding the Unicode 2.1 decomposition used previously. This change caused problems for developers writing software for Mac OS X.[7]
Mac OS X 10.3 introduced a number of techniques that are intended to avoid fragmentating files in HFS+.[8]
With Mac OS X 10.4, Apple added support for Inline Attribute Data records, something that had been a part of the Mac OS X implementation of HFS Plus since at least 10.0, but always marked as "reserved for future use".[9] Until the release of Mac OS X Server 10.4, HFS Plus supported only the standard UNIX file system permissions; however, 10.4 introduced support for access control list–based file security, which provides a richer mechanism to define file permissions and is also designed to be fully compatible with the file permission models on other platforms such as Microsoft Windows XP and Windows Server 2003.[10]
In Mac OS X Leopard 10.5, directory hard-linking was added as a fundamental part of Time Machine.
In Mac OS X Snow Leopard 10.6, HFS+ compression was added using Deflate (Zlib). In open source and some other areas this is referred to as AppleFSCompression or decmpfs. Compressed data may be stored in either an extended attribute or the resource fork. When using non-Apple APIs, AppleFSCompression is not always completely transparent.[11] OS X 10.9 introduced two new algorithms: LZVN (libFastCompression), and LZFSE.
In Mac OS X Lion 10.7, logical volume encryption (known as FileVault 2) was added to the operating system. This addition to the operating system in no way changed the logical structure of the file system. Apple's logical volume manager is known as Core Storage and its encryption at the volume level can apply to file systems other than HFS Plus. With appropriate hardware, both encryption and decryption should be transparent.
HFS Plus volumes are divided into sectors (called logical blocks in HFS), that are usually 512 bytes in size. These sectors are then grouped together into allocation blocks which can contain one or more sectors; the number of allocation blocks depends on the total size of the volume. HFS Plus uses a larger value to address allocation blocks than HFS, 32 bits rather than 16 bits; this means it can access 4,294,967,296 (= 232) allocation blocks rather than the 65,536 (= 216) allocation blocks available to HFS. When disks were small, this was of little consequence, but as larger-capacity drives became available, it meant that the smallest amount of space that any file could occupy (a single allocation block) became excessively large, wasting significant amounts of space. For example, on a 1 GB disk, the allocation block size under HFS is 16 KB, so even a 1-byte file would take up 16 KB of disk space. HFS Plus's system greatly improves space utilization on larger disks as a result.
File and folder names in HFS Plus are also encoded in UTF-16[12] and normalized to a form very nearly the same as Unicode Normalization Form D (NFD)[13] (which means that precomposed characters like "å" are decomposed in the HFS+ filename and therefore count as two code units[14] and UTF-16 implies that characters from outside the Basic Multilingual Plane also count as two code units in an HFS+ filename). HFS Plus permits filenames up to 255 UTF-16 code units in length.
Formerly, HFS Plus volumes were embedded inside an HFS standard file system. This was phased out by the Tiger transition to Intel Macs, where the HFS Plus file system was not embedded inside a wrapper. The wrapper had been designed for two purposes; it allowed Macintosh computers without HFS Plus support in their ROM to boot HFS Plus volumes and it also was designed to help users transition to HFS Plus by including a minimal HFS volume with a read-only file called Where_have_all_my_files_gone?, explaining to users with versions of Mac OS 8.0 and earlier without HFS Plus, that the volume requires a system with HFS Plus support. The original HFS volume contains a signature and an offset to the embedded HFS Plus volume within its volume header. All allocation blocks in the HFS volume which contain the embedded volume are mapped out of the HFS allocation file as bad blocks.
Notable among file systems used for Unix systems, HFS Plus does not support sparse files.
There are nine structures that make up a typical HFS Plus volume:
HFS Plus lacks several features considered staples of modern file systems like ZFS and NTFS.[16] Data checksums are the most routinely cited missing feature.[17]
Besides checksumming, features of modern file systems that HFS+ lacks include:
HFS Plus was not designed for Unix-like systems, so features such as file system permissions and hard links had to be retrofitted when Apple moved to Mac OS X.
The Linux kernel includes the hfsplus module[19] for mounting HFS+ filesystems read-write. HFS+ fsck and mkfs have been ported to Linux and are part of the hfsprogs package.[20]
In 2009, these drivers were diagnosed to be corrupting HFS+ drives with a capacity greater than 2 TB.[21] Consequently, Linux distributions such as Debian and Ubuntu stopped allowing mounting of HFS+ drives or partitions greater than 2 TB.[22], work is in progress to lift this restriction.[23]
Under Linux's current HFS+ driver, journaling must be disabled in order to write data safely onto an HFS+ partition. Provided the partition isn't being used by Apple's Time Machine software, journaling can be disabled under macOS:[24] Using Disk Utility in OS X Yosemite, the user may hold Alt/Option and click "Disable Journaling" on the File menu, having first selected a mounted partition.
An HFS+ partition with journaling enabled may be forcibly mounted with write access under Linux, but this is unsupported and unwise.[24]
A Google Summer of Code project to implement write support to journaled HFS+[25] was accepted by the Linux Foundation in 2011 but was not completed at that time and is still a work in progress. Progress and improvements to the HFS+ driver, including some updates to journaling support, are posted on the linux-fsdevel mailing list[26] from time to time.
, Paragon Software Group provided kernel drivers that allow full read-write access to HFS+ journaled volumes.[27] The product is a proprietary implementation of HFS+ based on Paragon's proprietary UFSD library. There are both free and paid editions of the driver, and they include a utility for checking and repairing HFS+ volumes. According to the online documentation (free version[28] or the paid edition[29]), both the free edition and the paid edition currently support Linux kernels from 2.6.36 up to 4.12.x. Ubuntu, Debian, Fedora Linux, Rocky Linux, Red Hat Enterprise Linux, OpenSUSE and CentOS are the only Linux distributions officially supported.[30]
As of May 2012, Apple has only released read-only HFS+ drivers for Windows XP, Windows Vista, and Windows 7 as part of the Boot Camp software in Mac OS X 10.6.[31] This means users on these systems can read data on the HFS+ drive, but not write to them. Microsoft has created an HFS+ driver for the Xbox 360 mainly for the purpose of reading HFS+-formatted iPods.
A free and opensource software – jHFSplus, based on HFSExplorer and jpfm – can be used to mount hfs/hfs+ partitions as read-only virtual folders.[32]
A freeware plugin for Total Commander exists, that can read, among others, HFS and HFS+ filesystems.[33]
DiskInternals Linux Reader can be used to extract/save folders/files out of HFS and HFS+ Hard Drives/Partitions.[34]
A commercial product, MacDrive, is also available for mounting HFS and HFS+ drives, optical discs, and other media in Windows Explorer, and allows both reading and writing to the volume, as well as repairing and formatting Mac disks.[35]
A commercial product, Paragon's HFS+ for Windows allows full read and write and disk management from all versions of Windows from Windows XP to Windows Server 2008.[36]
A free (GPL) alternative is HFSExplorer written by Erik Larsson.[37] HFSExplorer is a Java application for viewing and extracting files from an HFS+ volume (Mac OS Extended) or an HFSX volume (Mac OS Extended, Case-sensitive). The volume can be located either on a physical disk, in various Apple disk image and sparse disk image formats, or a raw file system dump. However, HFSExplorer is a read-only solution; it cannot write to HFS-formatted volumes.