Tuesday, April 3, 2012

How to enable write support to NTFS on MAC OS X Lion 10.7


Mac OSX Lion 10.7 doesn't have NTFS write support, but there are two ways to mount an NTFS volume for writing. The first and easy way is to buy Tuxera, the second way is trickier but it's also free :) Let's see what we have to do:
  1.  Download and install OSXFuse (the successor of MacFuse)
  2.  Download and install the last build of NTFS-3G 
After restarting your Mac you will be able to mount an NTFS volume with write support, it works fine, but you will get an annoying timeout error message.

If you are an advanced user keep reading... we're trying to get rid of the error message :)

We need to install the latest version of NTFS-3G (there is no build available) using MacPorts!

- Download and install the latest version of MacPorts 2.0.4 for Lion
- Restart your mac
- Open the Terminal
Update MacPorts running this command:
  •  sudo port -v selfupdate
 - Install NTFS-3G:
  • sudo port install ntfs-3g
Now we have to redirect the automount procedure from using the MAC OS X's native NTFS driver to NTFS-3G:

- Make a backup copy of /sbin/mount_ntfs file:
  • sudo cp /sbin/mount_ntfs /sbin/mount_ntfs.bkp
- Using your favorite editor (vim, nano..) replace the /sbin/mount_ntfs file content with this:
#!/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 noappledouble \
        -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 $?;
And we are done! Try to plug an NTFS and see what happens :)

No comments:

Post a Comment