HFS access on modern Macs

I’ve run into this in the last few weeks as I’ve been archiving old CD-ROMs. I hadn’t previously registered that Apple dropped HFS support in 10.15 and it is indeed frustrating. On MacOS 12 Monterey, although you can’t mount HFS discs, Disk Utility will image them and you can theoretically then open the disk image in a Mac OS 9 emulator (or virtual machine running MacOS ≤10.14). It’s a hassle though. If anyone has a recommendation for a good way to add HFS+ support back to modern MacOS I’d be interested (I came across a couple of options, but none that allowed easy mounting/browsing in the Finder). At the moment the easiest solution is to fire up my old MacBook Air running MacOS 10.14.

Note that whilst read/write HFS+ support is included in current versions of MacOS, as well as removing HFS support 10.15 Catalina dropped support for creating encrypted HFS+ partitions. And if you have an existing HFS+ disk or partition and choose to encrypt it (by ctrl-/right-clicking on it in the Finder), it will first be converted to APFS. Existing encrypted HFS+ disks are supported for read/write, there’s just no way to create them (even using diskutil on the command line).

I learnt this the hard way when I got my M1 MacBook Pro which was my first Mac running a version of MacOS greater than 10.14. Luckily I was able to recover, again using my MacBook Air running 10.14 to create the encrypted HFS+ external disks that I need. It’s another very irritating deprecation, especially given the abysmal performance of APFS on hard disks with lots of files.

1 Like

I’ve only run across one thing that might be promising: The MacFUSE/OS X Fuse project. This is a system involving a kernel extension, libraries and tools designed to support third-party file systems.

Various communities have developed many different file system drivers for use with macFUSE.

Although not included with macFUSE, I found an HFS file system driver for use with macFUSE.

IMPORTANT: I have never used any of the above tools. I have no idea if they work as advertised and I don’t plan on trying them because the idea of installing kernel extensions like this scares me. If you want to try it, I recommend testing it on a Mac you are OK with wiping (or in a virtual machine) in case it should fail catastrophically.

2 Likes

It’s a good question. It’s a bit surprising that it doesn’t seem to have a good answer, especially for Macs with Apple Silicon processors. At least for Intel Macs, there would be the option of running Mojave or older in a virtual machine.

Linux has support for HFS and HFS+ via the hfsutils/hfsplus/hfsprogs packages, so Linux in a VM might be worth exploring on Apple Silicon Macs.

By the way, there are a few commercial solutions for HFS+ and APFS on Windows, if you have access to a Windows machine. I used MacDrive many years ago (before it was acquired by Other World Computing) to mount HFS+ disks on XP.

Paragon Computing also sells Windows drivers for HFS+ and APFS, and I’ve had good luck with Paragon’s Mac drivers for Linux EFS and Windows NTFS filesystems. It seems more than likely that Paragon would have the expertise to write a reliable HFS+ tool for modern Macs. I wonder if they’d give it a try.

I’ve used MacFUSE before (to add writable NTFS) and it’s pretty good, and easy to uninstall. However the fuseHFS plugin is two years old and not Apple Silicon native so I decided to give it a miss. I’d certainly try it if it is ever updated for AS.

This is available natively on MacOS too: hfsutils — Homebrew Formulae. However working from the command line seemed like too much hassle for what I’m doing. If I didn’t have an old MacBook Air I probably would have got to grips with hfsutils to have a quick way of listing the contents of an HFS CD, but really what I want is something along the lines of the MacFUSE plugin but updated to run on Apple Silicon. I’m surprised, given the many years and huge amount of media that used HFS, that there isn’t a modern/active project to make HFS discs accessible.

:point_right:As a footnote, I’m pretty sure that hfsutils doesn’t support HFS⁠+ (the project homepage says that, “Support for Apple’s new Extended Format (HFS+) is currently planned, but not yet available.”).

hfsutils is available for macOS as well. But it’s not very convenient, because it can’t mount volumes and has no GUI interface. So you’re stuck using its own CLI commands to browse content and copy files to/from the media.

The Linux kernel appears to include an abandoned HFS file system driver and an HFS+ driver, which can mount HFS/HFS+ volumes. I used it many years ago (in the 90’s), but on my Linux PC (running the Debian 11 distribution), it’s not present and I couldn’t find it as a part of the distribution.

Yes, but you don’t need it for HFS+ on a Mac - current versions of macOS support it natively. Although you might need it if you want to access HFS+ volumes from Linux or Windows.

Agreed, my comment was related to @josehill saying ‘Linux has support for HFS and HFS+ via the hfsutils…’. Just in case someone reading here is interested in HFS+ on Linux, I wanted to point out that hfsutils isn’t going to be useful (I think it hasn’t been updated since 1998/1999 when HFS+ was ‘new’).

Correct. That’s why I also mentioned hfsplus and hfsprogs, which are separate packages, independent of hfsutils. (hfsprogs is a port of Darwin’s mkfs and fsck)

I have a fresh Debian 12 in front of me at the moment. While hfsutils and hfsplus aren’t installed by default, they both are installable via the default repositories.

Ah, I missed that, thanks! I didn’t realise there are other packages. That’s really helpful, I’ll check them out.

I’ve got hfsplus, hfsprogs and hfsutils installed. But they don’t include the kernel file system drivers, so you can’t actually mount volumes. You only have that fake mount mechansim that only makes files accessible via the corresponding hfs/hfs+ utilities.

If I cat /proc/filesystems, “hfs” and “hfsplus” don’t appear on the list. Back when mounting worked for me, they were there. I could then do something like

sudo mount -t hfs /dev/fd0 /mnt/tmp

to mount an HFS floppy.

The drivers are still part of the kernel sources, but my installation doesn’t install them and I don’t know what package they might belong to (assuming Debian makes them available).

Apologies, it’s been ages since I thought about any of this. Have you tried loading the driver as a kernel module, e.g., using sudo modprobe hfs or sudo modprobe hfsplus?

(Apologies, also, to the OP. We’re a hundred miles away from the OP’s question.)

Continuing the discussion from External Disk Reformatting:

That worked! I didn’t even check to see if the modules existed when cat /proc/filesystems didn’t show them. But after sudo modprobe hfs and sudo modprobe hfsplus, they appeared.

I was able to mount a floppy disk pretty easily. I connected a USB floppy drive, which appeared in Linux as /dev/sdf. In then inserted an HFS floppy and typed

sudo mount -t hfs /dev/sdf /mnt/tmp

And it mounted.

CD-ROMs were a bit trickier. Apple’s CD-ROMs are what appear to be images of hard drives. So they use 512 byte blocks and have an APM-scheme partition table.

If you try to just blindly mount an HFS CD (at least any of my old Apple Developer CDs), you just get an error:

$ sudo mount -t hfs /dev/cdrom /mnt/tmp
mount: /mnt/tmp: wrong fs type, bad option, bad superblock on /dev/sr0, missing codepage or helper program, or other error.

If this would have been a hard drive, then the Linux kernel would see the partition table, create per-partition devices, and you would just mount one of them. But CD-ROMs don’t work that way. Fortunately, the HFS driver has a workaround - specify the partition in the mount command. But that also failed:

$ sudo mount -t hfs -o part=1 /dev/cdrom /mnt/tmp
mount: /mnt/tmp: wrong fs type, bad option, bad superblock on /dev/sr0, missing codepage or helper program, or other error.

But after reviewing the system log (/var/log/syslog), it shows a message when trying to mount that:

... kernel: [...] hfs: unable to set blocksize to 512

After some web searching, I found a known bug. The driver, like all file system drivers, must work with the hardware’s block size. And CD-ROMs always have a block size of 2K. So when the file system driver tries to set its block size to 512 (to match the HFS file system), it fails.

Fortunately, there’s a workaround for that. The “loopback” mount option. This tells the system to pretend the device is actually a file (just a big stream of bytes with no particular associated hardware) and mount that. This is normally used for mounting disk images, but it appears you can also use it on a physical device to ignore all block-device issues. And that worked:

$ mount -t hfs -o part=1,loop /dev/cdrom /mnt/tmp

And I was able to see the contents of the CD, in all of its HFS glory.

Of course, that’s only the first step. Since Linux doesn’t know a thing about resource forks, and quite a lot of the files on developer CDs need them. So I’d still need to use something like hfstools to copy the files to something like MacBinary format, which can be used to transport the content to a Mac for (hopefully) being able to open them.

But for extracting things that don’t involve resources (like system disk images, suitable for installing old OS releases onto emulators), it looks like it can get the job done.

I still think for actually using HFS media, some solution other than Linux will be necessary, but at least I’ve got that workaround working.

4 Likes

Ideally, I think it would be best if I can just run some classic MacOS in an emulator and mount my CDs and floppies from there, but so far I haven’t been able to get Basilisk II to access physical drives, only disk images.

This used to work but it seems Apple changed something recently-ish (Catalina? Mojave?) that prevents emulators from accessing the hardware devices. I can’t remember the details but read this recently with respect to SheepShaver.

Browsing the Macintosh Garden forums, I came across a link to Impluse HFS which looks like it could be useful for converting HFS disk images to HFS+ (it can also be used to get a listing from an HFS image or extract specific files). Haven’t tried it yet, but might be a useful addition to the ‘vintage’ toolbox:

1 Like

As a reminder, you can get a free license for VMware Fusion Player and install an older Mac OS going back to 10.5 Server (regular 10.5 or 10.6 OS aren’t included but do install on the free VirtualBox).

https://customerconnect.vmware.com/evalcenter?p=fusion-player-personal

If you don’t have access to an older OS installer, then use the Lion 10.7 link or anything up to Mojave which can recognize HFS discs from the Apple page:

1 Like

VMware Fusion Player can access my LG Blu-ray recorder with no issues in Catalina. I use my Snow Leopard VM for HFS disc access when needed.

2 Likes

Sorry, I should have been more specific – I was referring to classic Mac emulators like SheepShaver and Basilisk II. I’m not saying it’s impossible, but whatever mechanism they were using stopped working after Mac OS X 10.7:

CD-ROMs: Up to Mac OS X 10.7, physical CD-ROMs can be mounted within SheepShaver. Just insert the CD on the host system and the CD will be mounted on the guest desktop. OS X 10.8 and later prevents mounting of physical CD-ROMs in SheepShaver but disk images created from CD-ROMs will work fine.

Setting up SheepShaver for OSX/macOS [E-Maculation wiki]

VMware Fusion only supports these older MacOS versions on Intel Macs. On Apple Silicon, it will only install Apple Silicon versions of MacOS (i.e. it doesn’t do emulation of the Intel architecture, just virtualisation). VirtualBox doesn’t even run on Apple Silicon Macs (at the moment – there was a test build at one point, so maybe it will in the future).

UTM is a good emulator/virtualiser for Apple Silicon. I’ve used it to run virtual machines of Apple Silicon Macs, an emulated Intel PC with Windows 95, and a virtualised ARM Windows machine. In theory it might be possible to run an Intel version of MacOS using UTM’s emulation, but it sounds like it would require a bit of work. And I’m not sure whether access to a DVD drive would work or not (though in theory I guess if you get the emulated machine working it should).

But the net result is that unfortunately if you have an Apple Silicon Mac the easiest way to browse HFS CDs is to get hold of an older Intel-based Mac that can run MacOS 10.14 Mojave :cry:

For Apple Silicon, the choices are limited. My point in discussing what works (for Intel as that is what I have) and is free of charge is so that one does not spend money on software that may not work when there are free choices available.

However, many users still have older, vintage equipment to handle HFS tasks like my Performa 6400, PowerBook G4 and a G4 Mac Mini PowerPC so that is another route.

i have not personally tested this, but homebrew is supported on mac silicon and intel”.

“MacOS abandoned HFS read support in macOS Catalina 10.15, so basically any modern MacOS system does not have the ability to do anything with these drives, including Sonoma, Ventura, Monterey, etc.

If you need to mount and read data from a classic HFS formatted drive or volume, and you’re running macOS Sonoma, Ventura, or newer operating systems, you can still do so with the help of a HomeBrew tool called hfsutils.”

see How to Mount & Copy HFS Classic Mac Drives on MacOS

I think we’ve come full circle. If you scroll up, you’ll see that we had discussed hfsutils and two other similar package.

Unfortunately, these can’t mount an HFS volume. They can only make it accessible via their own utilities, so you can copy files to another location. Better than nothing, but still quite inconvenient.

MacFUSE, Linux and older versions of macOS (in a VM or emulator) will let you actually mount the volume and open the files directly.

2 Likes