Is there a safe, stable application for reading from and writing to ext4 file systems on Mac OS X?
If not, what's the best way to access the contents of an ext4 file system on Mac OS X?
Ask Different is a question and answer site for power users of Apple hardware and software. It only takes a minute to sign up.
Sign up to join this communityIs there a safe, stable application for reading from and writing to ext4 file systems on Mac OS X?
If not, what's the best way to access the contents of an ext4 file system on Mac OS X?
The answer depends on you willingness to invest in commercial software:
If you don’t mind spending some money on a commercial product, Paragon’s extFS for Mac will give you read and write access to ext2 / ext3 / ext4 file systems. The current version supports all versions of OS X / macOS from 10.10 upwards.
If you are looking for a free solution, you can setup a Linux virtual machine, mount your volume(s) there and share it / them via Samba or (S)FTP. This post has some details on how to achieve this using VirtualBox, a free virtual machine application. Note this is not exactly a lightweight solution, even if using a prebuilt VirtualBox VM will spare you installing and configuring a Linux distro from scratch.
Building on Ken's answer: I used fuse4x and fuse-ext2 successfully, and I recommend fuse-ext2 over ext4fuse. fuse-ext2 provides write access while ext4fuse provides only read access. Note that despite its name, fuse-ext2 supports EXT2/EXT3/EXT4.
ext4fuse was a hassle for me, because it requires manual compilation and has no support for fuse4x options that would allow me to set access control. fuse-ext2 provides downloadable packages, and the 0.0.7 version worked just fine. I copied a few large ISOs over without any problem.
One can also install OSXFUSE completely via the brew command line package manager:
brew install homebrew/fuse/ext4fuse
Note that the installation tells certain commands need to be run as 'sudo' in addition to this.
With Yosemite better have a look at this. And then make sure the directory is readable by your user by doing this. For it to work I had to use the wheel group like this:
sudo dscl . append /Groups/wheel GroupMembership $(whoami)
$ brew info ext2fuse ext2fuse: stable 0.8.1 (bottled) Compact implementation of ext2 file system using FUSE https://sourceforge.net/projects/ext2fuse Disabled because it requires closed-source macFUSE! Not installed
With recent changes to homebrew, this should be as simple as:
brew cask install osxfuse
brew install ext4fuse
You may have to reboot.
ext4fuse is read-only, unfortunately. And you may need to use a flag to get it to work as a normal user.
Others viewing this question may be interested in libguestfs. I'm not aware of an OS X port, but considering that VirtualBox has an API, it's not out of the question.
I wonder why no one has written a compatibility layer to allow Linux kernel filesystem code to run in userspace/fuse. Or has someone?
osxfuse
was removed from homebrew and ext4fuse
moved on to depend on the new - branched(?) - opensource version macfuse
: (1) brew install --cask macfuse
(2) use the patched ext4fuse.rb
in this link (github.com/gerard/ext4fuse/issues/66)
For Sierra and High Sierra ext4fuse seems to work well for read access only and therefore it could probably be considered the preferred option. While other answers already give some usage examples I'll repeat it once again with some important details:
Install ext4fuse with:
brew install ext4fuse
You can mount as a normal user but in that case you'll only be able access world-readable files, that's why for full access you need to use sudo
, e.g.:
sudo ext4fuse -o allow_other /dev/disk2s1
Here is a bash script which partially automates the process. When launched it will automatically create the mount point after you'll be prompted to enter one of the displayed device identifiers such as disk2s1
:
diskutil list
read -p "Please type the EXT4 device identifier: " disk_id
MOUNT_POINT=~/mnt/$disk_id
mkdir -p ${MOUNT_POINT}
sudo ext4fuse -o allow_other /dev/$disk_id ${MOUNT_POINT}
echo "***TO UNMOUNT USE***: 'diskutil umount ${MOUNT_POINT}'"
open ${MOUNT_POINT}
To unmount you can use e.g. diskutil umount /dev/disk2s1
— if you get a message that unmounting failed then you can force unmounting with diskutil umount force /dev/disk2s1
, although it would be cleaner to close the apps that are using the files on the disk and retry unmounting without force
.
If you happen to have files owned by _lpoperator
(apparently they are created when you use rsync with preserve group option), then the following command will allow accessing those files:
/usr/sbin/dseditgroup -o edit -a everyone -t group _lpoperator
T*wo packages are needed in order to enable EXT2/3/4 support on OSX: OSXFUSE and FUSE-EXT2.
The homebrew formulas for OSXFUSE and FUSE-EXT2 did not work for me on either mavericks or yosemite.
What did work was the following:
Once you have both OSXFUSE and FUSE-EXT2 installed you can mount the ext2/ext3/ext4 partitions as mentioned in other answers:
Find the device name for the EXT partition you want to mount (e.g. disk0s2
in the example below, (UPDATE) in later MacOS versions ext3/ext4 partitions might be labelled Microsoft Basic Data and not Linux):
1: Linux_Swap 8.2 GB disk0s1
2: Linux 119.9 GB disk0s2
Mount the partition to an existing mount point:
sudo mount -t fuse-ext2 /dev/disk0s2 /Volumes/ext4
Mounting as a regular user did not work for me. Probably this can be fixed by fiddling with permissions, but I didn't look into it.
Note: My suspicion is that the homebrew formulas did not work because homebrew installs osxfuse
without the MacFUSE Compatibility Layer.
There are two osxfuse
packages in homebrew:
# brew search osxfuse
>>> osxfuse
>>> Caskroom/cask/osxfuse
Both versions fail to mount EXT partitions. Most likely, the DMG version (Caskroom/cask/osxfuse
) fails because homebrew installs the package with default settings, which means that MacFUSE Compatibility Layer is not included. The main osxfuse
version probably needs some special installation parameter to enable MacFUSE compatibility, so until this is fixed in homebrew the manual DMG method should be used.
This method worked on mavericks, yosemite, el capitan and sierra.
To save some extra typing I use a tiny script which takes the partition name such as disk0s2
and mounts it under /Volumes/disk0s2
, creating the folder if necessary:
### mount_ext4.sh
sudo mkdir -p "/Volumes/$1"
sudo mount -t fuse-ext2 "/dev/$1" "/Volumes/$1"
open "/Volumes/$1"
The script is called with the partition name that you look up via diskutil list
, e.g. mount_ext4.sh disk2s3
.
FUSE-EXT2 could not mount /dev/disk2s2 at /Volumes/ext4 because the following problem occurred:
(but there is no problem description or reference). I have installed the Compability Layer addon. I'm on macOS Sierra so tried the Github gzp500 version.
If you're wondering what the command line is to mount an ext4 partition using fuse and ext2fuse (e.g. when installed using MacPorts port install ext2fuse
) - then firstly you need to work out where the Linux partition is:
diskutil list
This will list all partitions for all disks and amongst them you should see the relevant ones listed under the TYPE column as Linux. Combine the diskX and partition number Y like this /dev/diskXsY - e.g:
mount -t fuse-ext2 /dev/disk1s2 ~/my_mount_point
It may complain about not being able to write to the log file but it should still mount the partition into your home mount point. But if you want to mount the partition into a system directory then you need to run it as root e.g:
sudo mount -t fuse-ext2 /dev/disk1s2 /sys_mount_point
If that doesn't work try:
sudo ext2fuse /dev/disk1s2 /sys_mount_point
Update: More recently I've found that fuse-ext2 has problems with certain newer ext4 features, so instead it is better to use ext4fuse (port install ext4fuse
or brew install ext4fuse
). Use the ext4fuse command directly:
ext4fuse /dev/disk1s2 ~/mount_point
Also as mentioned by Timothy in the comments you usually only need to use sudo
if you're mounting outside your home directory or the disk (/dev/diskX) is only accessible by root:
sudo ext4fuse /dev/disk1s2 /sys_mount_point
It should be noted that you can only access that mounted filesystem as root/sudo. e.g.
sudo ls /sys_mount_point
And to unmount the filesystem you just use normal umount
command (with sudo if used to mount the partition):
umount ~/mount_point
cd ~
, mkdir mnt
, ext4fuse /dev/diskXsY mnt
, ls -la mnt
without sudo/root.
Feb 1, 2017 at 20:46
Just for the record, I have tested Paragon ExtFS driver (trial version) on my MacBook Pro to write to ext4 partition in Linux. I found that the driver was very unstable, and it created corruptions to the filesystem that fsck
was not able to repair neither in Linux nor in Disk Utility.
My idea was to have access to my /home
partition from Mac OS X using this Paragon driver, but I don't suggest to do this setup. So far, I have my /home
partition in Linux formatted to hfsplus
with no journaling, and then I can access my files from Mac OS X. Of course, from time to time I get some problems in my FS but is not very frequent. However, I don't suggest this setup either (at least that you have an up to date backup for your daily work).
Finally, I believe that Paragon is more suitable maybe to use for external hard disks but anyways it is not very reliable for being software which license is expensive.
Update: As of May 2015, I have formatted my /home to ext4, and I mount the filesystem using fuse-ext2 in combination with FUSE for OS X. I can access the ext4 partition to read and write. It is more solid setup than the one I previously described above.
You can boot Linux VM quickly on your OS X using Vagrant. You require to install VM provider such as VirtualBox and Vagrant either via .dmg file from the site or using brew cask.
Once you have vagrant
command installed, run this in any selected folder:
vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
This will generate Vagrantfile
config file and .vagrant
folder.
and you'll have Linux box booted within few minutes (downloaded from Atlas Hashicorp repository).
Then connect to the box via command: vagrant ssh
and try to mount your device inside Linux.
By default your current folder will be synched with /vagrant
folder in VM. For more advanced options, you can modify Vagrantfile
with required configuration.
So if you mount your filesystem within /vagrant
folder, it will be automatically synched back to your macOS.
Alternatively you just need to install a VirtualBox, run the GUI app, install and boot a minimal version of Linux e.g. Ubuntu in order to achieve the same as explained above.
Above non-native solution are not ideal, but at least your macOS would be more stable rather than installing unstable kernel extensions which may cause a lot of system crashes.
vagrant init ubuntu/xenial64; vagrant up --provider virtualbox
as ubuntu/vivid64
is not available anymore.
Oct 30, 2016 at 6:37
I had an ext4 formatted USB drive that I was able to mount after I installed osxfuse. Reading from it works great, but I am not sure if writing is safe.
Also, for moving files from OS X's filesystem (HFS+) to ext4, you may first want to remove those hidden .DS_Store files the OS X filesystem sneaks in as they occasionally cause bad inodes.
find /my/data/to/move -name '*.DS_Store' -type f -delete
It is better than having to fix them after with an fsck command.
There is also e2fsprogs available in MacPorts. I haven't tested it yet myself but looks promising.
fsck
and newfs
to repair and create an ext filesystem, but they don't let you mount or read from it.
Dec 1, 2021 at 5:33
Take a look at --> https://github.com/alperakcan/fuse-ext2
This is what I will be trying next.
For ext2, there is a macports version: https://ports.macports.org/port/ext2fuse/summary
There is an ext4 module for osxfuse (which you can install via macports) but it is read only!
The multitude of versions is a bit confusing but at one point I had managed to get it to work, I will be trying again and updating this answer if it does. :)
osxfuse is available on macports and as a standalone package. I don't know which one works best yet on newer OS X versions, but I prefer macports for my free software on OS X.