Computers & Tech

How to Write to Windows NTFS partitions, USBs & External Drives on your Mac (Completely free)

Imagine a world where every OS would accept a drive that was formatted for another OS. Imagine world where every OS used the same file system.

Well sadly while the latter will never be the case, the first is entirely possible.

Now imagine you own a Mac. You run MacOS and you don’t follow the trend of installing Windows. Now a colleague or friend hands you a USB to share with him/her a file. Could be an important document. Ah… But he/she uses Windows and you use Mac. How do you share the file?

There is no doubt that in this modern Windows dominated computing world, you will have to work with NTFS formatted drives and that can be an issue.
There are a number of 3rd party apps if you want an easily solution and you don’t mind paying.

But here are a couple of solutions that are free.

Solution 1:

Most of the recent versions of MacOS comes with Apple’s own version of NTFS drivers. You can mount drives and USBs manually using the terminal. But you need to do this every time you plug in the drive to your  Mac.
A better thing is to use an app called “mounty”. You can download it from here – Mounty.app

Once installed, when you plug in a USB, the app will ask you whether you want to mount it with write privileges.

 

Solution 2 – a bit more complicated but better IMO. 

This solution will give you Mac the ability to read and write to NTFS as if it was a native partition. Most of the steps that you will see below comes from this link for reference.

https://trac.macports.org/wiki/howto/Ntfs3gFinder

My method uses MacPorts. But if you prefer using Homebrew, then you can get the same results by using the instructions in this link.

How to install NTFS-3G

Personally I am not a fan of Homebrew and prefer MacPorts. So Now let’s get started.

Installation:

Step 1 – Install Xcode and terminal tools: 

Install Xcode from the app store. Once installed open the app and Click agree to the licensing agreement.

After that, you need to open the Terminal app. And type the following command.

xcode-select –install

Then this window will open..

Click “Install” and wait for it to finish.

Step 2. – Install MacPorts:

Download and install MacPorts.

You are on MacOS 10.15 Catalina onwards and this is the first time installing and running MacPorts, then I would suggest that you install a random port first before proceeding with Step 3.
My recommendation is ‘htop’. It is a good port and you will find it useful.

sudo port install htop

Step 3 – Install Fuse and NTFS-3g:

Download and install FUSE from this link.

https://osxfuse.github.io

If you are using MacOS 10.15 Catalina and newer, you should do this after installing FUSE.
Open the Terminal and type in the following command. (Copy and Paste is better).

sudo ln -s /usr/local/lib/pkgconfig/fuse.pc /opt/local/lib/pkgconfig/fuse.pc

If you don’t put in the above line, MacOS and Macports would not detect that you have FUSE installed and will try to add in its own package. You don’t want that.

Once Fuse is installed, Launch the Terminal app again type the following command.

sudo port install ntfs-3g

Step 4 – Make MacOS use NTFS-3G by default:

To do this you will need to modify the ‘mount_ntfs’ file.

Note: If you are using El Capitan, then you will need to disable ‘SIP or System Integrity Protection’. To do this use the info in this link – SIP (how to)

**If you are using MacOS 10.15 Catalina, you will not need to disable SIP, but you will need to make the root system ‘writeable’ using the following command.

sudo mount -uw /

The reason for this is from Catalina onwards, the MacOS will mount to root system as ‘read-only’. The above command will make the system ‘writeable’ only for this instance. Once you restart the Mac, it will go back to ‘read-only’.

Open Terminal and Type in the following commands and note their results. One at a time.

id -u

id – g

You should get 501 and 20.

If you get different numbers, please make note of them. You will need it.

Then type the following commands one at time: ( You can copy and paste. One line at a time)

sudo mv /sbin/mount_ntfs /sbin/mount_ntfs.orig

sudo touch /sbin/mount_ntfs

sudo chmod 0755 /sbin/mount_ntfs

sudo chown 0:0 /sbin/mount_ntfs

Now type in the following command

sudo nano /sbin/mount_ntfs

Now copy and paste the following text into the terminal window and then save it by pressing “Ctrl-X” and then “Y”.
*This script assumes that MacPorts and ntfs-3g are installed in the default locations (/opt/local)

#!/bin/bash
VOLUME_NAME="${@:$#}"
VOLUME_NAME=${VOLUME_NAME#/Volumes/}
USER_ID=501
GROUP_ID=20
TIMEOUT=20
if [ `/usr/bin/stat -f "%u" /dev/console` -eq 0 ]; then
        USERNAME=`/usr/bin/defaults read /Library/Preferences/com.apple.loginwindow | /usr/bin/grep autoLoginUser | /usr/bin/awk '{ print $3 }' | /usr/bin/sed 's/;//'`
        if [ "$USERNAME" = "" ]; then
                until [ `stat -f "%u" /dev/console` -ne 0 ] || [ $TIMEOUT -eq 0 ]; do
                        sleep 1
                        let TIMEOUT--
                done
                if [ $TIMEOUT -ne 0 ]; then
                        USER_ID=`/usr/bin/stat -f "%u" /dev/console`
                        GROUP_ID=`/usr/bin/stat -f "%g" /dev/console`
                fi
        else
                USER_ID=`/usr/bin/id -u $USERNAME`
                GROUP_ID=`/usr/bin/id -g $USERNAME`
        fi
else
        USER_ID=`/usr/bin/stat -f "%u" /dev/console`
        GROUP_ID=`/usr/bin/stat -f "%g" /dev/console`
fi

/opt/local/bin/ntfs-3g \
         -o volname="${VOLUME_NAME}" \
         -o local \
         -o negative_vncache \
         -o auto_xattr \
         -o auto_cache \
         -o noatime \
         -o windows_names \
         -o user_xattr \
         -o inherit \
         -o uid=$USER_ID \
         -o gid=$GROUP_ID \
         -o allow_other \
         "$@" &> /var/log/ntfsmnt.log

exit $?;

 

Note: If you got different numbers for the ‘id’ commands, replace the numbers in line 4 & 5 of the above script with the numbers you got.
Otherwise, the script should work as is.

There you go. You now have NTFS working on your Mac and every NTFS formatted USB will mounted with write privileges.

Categories: Computers & Tech

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s