How to mount a HFS partition in Ubuntu as Read/Write?

I plugged in my external harddrive (which was formatted on my Mac into HFS+ journaled) to my Ubuntu desktop 9.04 64bit. I am not able to get the drive to mount with write capability, how do I do that? Right now all I'm getting is read access, I tried

sudo mount -t hfsplus /dev/sdf2 /media/"Portable HD"

but that still gave me only read access... ideas??


You need to turn off the journaling if you want to write to it from Ubuntu. Ubuntu only has support for writing to non-journaled HFS+ volumes.

On your Mac:

  • Open Disk Utility under Applications -> Utilities
  • Select the volume to disable journaling on.
  • Choose Disable Journaling from the File menu. (On later Mac OS versions you'll have to hold down the option button when you click the File menu. Or if you like Apple+J)

Disabling journaling from HFS+ is still possible up to OS X Yosemite 10.10


First, make sure that you have hfsprogs installed. Example installation command:

sudo apt-get install hfsprogs

Next, mount or remount the HFS+ drive; commands need to be as follows:

sudo mount -t hfsplus -o force,rw /dev/sdx# /media/mntpoint

or

sudo mount -t hfsplus -o remount,force,rw /dev/sdx# /mount/point

Finally, if the drive was improperly unmounted or has otherwise become partially corrupted run fsck.hfsplus (provided here by Jayson) as such:

sudo fsck.hfsplus /dev/sdx#

You can enable writing to HFS+ in Linux even if you didn't disable journaling. In addition to hfsplus which you already have, you need to have hfsprogs installed:

sudo apt-get install hfsprogs

Then, use the -o rw,force option.

If the drive is not mounted yet:

sudo mount -o force /dev/sdX /your/mount/point

If the drive has been mounted automatically (as it should be on a desktop system like Ubuntu), add remount to enable write:

sudo mount -o remount,rw,force /mount/point

or

sudo mount -o remount,rw,force /dev/sdx

/mount/point would usually be something like /media/Your_drive_label. /dev/sdx is your HFS+ device (eg. /dev/sdb1).

Use mount -l to find which device is already mounted on which mount point.

If the Mac disk uses the newer Apple "Core Storage", you may also need to add a sizelimit=N option, as detailed in this answer.

Finally, you will still have the problem that you need to either be root to write to the drive, or use bindfs as shown in this answer.