APFS vs HFS+ for Sonoma HDD

What’s the current best idea for external HDD format under Sonoma. Got a new 20TB USB 5 Gb/s external that will be both Time Machine and a clone of my OWC ThunderBay mini. Will only be used under Sonoma. Bombich says that enumerating files is faster under HFS but suggests that mostly APFS is still preferred because of the advantages it brings unless a particular app requires faster file enumeration. In my case the cloning will happen overnight so speed isn’t a big issue ( it will be a CCC clone job)…so I’m tending to choose APFS but wanted to make sure this was best practice.

For some time, my impression has been that for spinners, HFS+ was still preferable, but since I mostly got that impression from Mr. Bombich, maybe it isn’t any longer?

At least for the TM partition, you likely want APFS. Not because HFS+ doesn’t perform well enough on spinning rust, but because TM to APFS (TMA) is so much more advanced than TM to HFS+ (TMH). Corruption has been much less of an issue since TMA was introduced and TM performance too has greatly benefited. As usual, Howard Oakley has delivered excellent detail.

For general-purpose data storage, absolutely yes. APFS has many features that depend on SSD behavior in order to work efficiently. Things like copy-on-write semantics and snapshots tend to result in a lot of file fragmentation. This doesn’t affect SSD performance much (if at all), but it can lead to a lot of head motion on an HDD, which will significantly hurt performance.

HFS+ was designed for HDDs. It tries to allocate data in a way to minimize fragmentation and head motion and should produce better performance, especially after you’re been creating, deleting and modifying files for a long time.

For an extreme example, make a bootable clone to a HDD and then boot it. You’ll find the boot time and overall system performance so slow that it becomes practically useless.

But this isn’t necessarily the case for backup volumes. Backups (especially to APFS destination when using APFS-aware tools like CCC and Time Machine) have usage semantics that are different from general-purpose storage.

In the backup scenario, you aren’t randomly writing/modifying/deleting files. You are writing many GB of data sequentially (for the initial backup). Then the backup software makes a snapshot, so your updates after that append to that data without modifying or deleting any of it.

Yes, some data gets freed as snapshots expire (e.g. the hourly snapshots expire when they’re 24 hours old and the daily snapshots expire after two weeks), but even with that, the data doesn’t get nearly as fragmented as it would for general-purpose file access.

Combined with the fact that you usually don’t require very high performance (you’re only copying what changed since the last backup, not everything), APFS’s HDD-disadvantages are not a very big problem.

It may also be tricky to set up a new TMH (TM over HFS) volume. Any remotely modern version of macOS will create the volume as APFS if you just click through the Time Machine control panel to add a destination volume.

I think (but never tried it) you can use the command-line tmutil command to create a TMH volume. From the manual page

$ man tmutil

TMUTIL(8)                         System Manager's Manual                        TMUTIL(8)

     tmutil - Time Machine utility

     tmutil verb [options]
     Each verb is listed with its description and individual arguments.

     setdestination [-ap] arg
             Configure a local HFS+ or APFS volume, AFP share, or SMB share as a backup
             destination. Requires root and Full Disk Access privileges.

             When the -a option is provided, arg will be added to the list of
             destinations. Time Machine will automatically choose a backup destination
             from the list when performing backups. When the -a option is not provided,
             the current list of destinations will be replaced by arg.

             If you wish to set an HFS+ or APFS volume as the backup destination, arg
             should be the mount point of the volume in question. When setting an AFP or
             SMB destination arg takes the form:


             In the AFP and SMB cases, the password component of the URL is optional; you
             may instead specify the -p option to enter the password at a non-echoing
             interactive prompt. This is of particular interest to the security-conscious,
             as all arguments provided to a program are visible by all users on the system
             via the ps tool.

So, in theory, I think you can:

  • Format an empty volume as HFS+. (For this example, named “MyTM”)
  • sudo tmutil setdestination -a /Volimes/MyTM

But that having been said, I agree with @simon. TMA (TM over APFS) works just fine (or at least “good enough”) on HDDs. If you don’t have an explicit need for TMH (perhaps because you want older Macs to be able to read the volume), then why bother?

“[W]e do not recommend using APFS on volumes containing HDDs unless you are using the volume for a Time Machine backup.”

1 Like