Запись в NTFS средствами Mac OS X

Как оказалось, использование этого небезопасно, используйте только если нет другого выхода.

Как известно пользователям «маков», Mac OS X умеет монтировать диски с файловой системой NTFS только на чтение. Обычно, чтобы писать скачивают сторонний драйвер NTFS — либо бесплатный NTFS-3G, либо какие-то платные драйвера (Tuxera или Парагон).

Ночью я случайно наткнулся на рецепт, позволяющий задействовать для записи на NTFS внутренний драйвер Mac OS X (рецепты немного различаются для «Снежного барса» и «Льва».

В сегодняшей утренней пробке я сделал программу, которая этот рецепт автоматизирует, листинг ниже, скачать можно с «Гитхаба» (запускать — через bash).

Плюсы следующие.

Во-первых, это высокая скорость записи (30МБ/сек). Во-вторых, с этим решением файл удаляется в корзину. В-третьих, никаких сторонних драйверов. Но надо быть аккурантым — диск обязательно нужно отмонтировать от «Винды» до отключения, иначе Mac OS смонтирует его в режиме только для чтения.

Добавлено позднее: Сергей Васильев предостерегает от использования родного драйвера для работы с NTFS: говорит, что можно разрушить файловую систему.

Листинг программы.

#!/bin/bash

ARCH=`uname -r | cut -d. -f1`
NMOUNT=/sbin/mount_ntfs
NLIBRA=/System/Library/Extensions/ntfs.kext/Contents/MacOS/ntfs

function usage {
    cat <<USAGE
NTFS writing enabler (//bolknote.ru Nov 2011)

usage: $0 <action>
  <action> - "enable" for enable NTFS write, "disable" otherwise.
USAGE
    exit
}

function ntfsdisable {
    if [ -e "${NMOUNT}_orig" ] && [[ -e "${NLIBRA}_orig" || $ARCH -eq 10 ]]; then
        sudo /bin/mv "${NMOUNT}_orig" "$NMOUNT"
        [ $ARCH -eq 11 ] && sudo mv "${NLIBRA}_orig" "$NLIBRA"

        echo Disabled
    else
        echo "Error: cannot disable NTFS. Already disabled?"
    fi
}

function ntfsenable {
    ntfsenable$ARCH
    echo Enabled
}

function ntfsenable10 {
    echo -n 'Please enter your administrator password. '

    sudo /bin/mv "$NMOUNT" "${NMOUNT}_orig"
    /bin/cat << MNT | sudo /usr/bin/tee "$NMOUNT" >/dev/null
#!/bin/sh
/sbin/mount_ntfs_orig -o rw "\$@"
MNT
    sudo /usr/sbin/chown root:wheel "$NMOUNT"
    sudo /bin/chmod 755 "$NMOUNT"
}

function ntfsenable11 {
    TEMP=`mktemp -d /tmp/ntfs$$.XXXXXX` || (
        echo 'Cannot create temporary directory.'
        exit
    )

    trap "/bin/rm -rf $TEMP" EXIT

    echo -n 'Please wait. Downloading...'

    curl -o "$TEMP/arch.zip" 'http://dl.dropbox.com/u/9349175/datahost-macdaily/NTFS_Enabler.zip' 2>&- 1>&- ||
    curl -o "$TEMP/arch.zip" 'http://ntfs_enabler.chat.ru/NTFS_Enabler.zip' 2>&- 1>&- || (
        echo 'Cannot download NTFS enabler bundle.'
        exit
    )

    echo ' done'

    unzip "$TEMP/arch.zip" -d "$TEMP" 2>&- 1>&-
    [ `md5 "$TEMP/NTFS_Enabler/ntfs"` == a88031b3257379257086af017891f229 ] || (
        echo "Error: invalid checksum NTFS enabler bundle"
        exit
    )
    ntfsenable10

    sudo /bin/mv "$NLIBRA" "${NLIBRA}_orig"
    sudo /bin/mv "$TEMP/NTFS_Enabler/ntfs" "$NLIBRA"
    sudo /usr/sbin/chown root:wheel "$NLIBRA"
    sudo /bin/chmod 755 "$NLIBRA"
}

if [[ $ARCH -lt 10 || $ARCH -gt 11 ]]; then
    echo 'Unknown Mac OS version (Snow Leopard or Lion required).'
    exit
fi

[ "$1" == "" ] && usage

case "$1" in
    enable)
        ntfsenable
        ;;
    disable)
        ntfsdisable
        ;;
esac

Читайте также

Скриптование меню в статус-баре
В «Маке» очень нехватает одной вещи — лёгкого создания собственных меню в статус-баре. Учить ради этого «Обжектив-Си» или «Свифт» (и ставить «ЭксКод») мне совершенно не хочется, поэтому я поискал готовое.
2017
Сколько есть способов восстановить chmod?
Иногда на собеседованиях спрашивают такую задачу, на соображалку: предположим вы случайно сняли права исполнения с команды chmod. Как их восстановить?
2011

Комментарии 15

Sergey Solyanik (profiles.google.com/jankkhvej/) № 3
Спасибо за ссылку на рецепт, надо проверить, а то ntfs-3g очень медленный, а Paragon достал своим кернел-паником, когда опустошаешь корзину.
artemp.pip.verisignlabs.com № 5
Сергей Васильев, чьи выводы указаны в качестве плюсов/минусов на MacDaily, в дальнейшем предостерегает от использования родного драйвера. Есть вероятность столкнуться с испорченной файловой системой.

http://blog.nolar.info/ntfs-3g-in-mac-os-x … e-support/
viju.tvercity.net/ru/weblog № 7
Буквально вчера дошли-таки руки решить для себя эту проблему записи на NTFS из под OSX Lion, помогла статья на хабре «NTFS-3G в OS X Lion»
http://habrahabr.ru/blogs/macosx/127200/

Не ожидал я, что с приобретением мака меня будут ждать такие приключения.
Sergey Solyanik (profiles.google.com/jankkhvej/) № 9
Комментарий для Евгения Степанищева:

Всё плохое, глюки есть во всех коммерческих. Paragon гарантированно падает при очистке корзины. Tuxera, хоть и как-то общая с ntfs-3g, падает вообще просто когда захочет, в самые неожиданные моменты, чаще всего при подключении флешки. Валит же ж целиком ядро, серый экран смерти.
Так что уж лучше бесплатное и медленное, или нативное с хаком. А разрушение ФС может произойти только в случае использования разделов со сжатием или расширенными фичами. Простые флешки-диски не ломаются.
А ещё можно для надёжности отказаться от NTFS хотя бы на своих дисках-флешках — ExFAT или HFS+ понимает 99% устройств типа плееров, и любой Windows от XP и выше понимает ExFAT.
somee № 10
А чего вы хотели? NTFS — проприетарная файловая система. Все немикрософтовские решения — это реверс-инжениринг. Конечно, они работают нестабильно. Держать важные данные в ntfs, если у тебя не винда, нельзя ни в коем случае.
Михаил № 14
Комментарий для Евгения Степанищева:

Спасибо. Не настолько часто пользуюсь, чтобы покупать, но всё же иногда пользовался вашим скриптом, очень удобно было.