Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Запись в 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
15 комментариев
jimidini (jimidini.ya.ru) 2011

у меня кто-то из знакомых пробовал. жалуются, что не очень стабильно, бывает и файлы портит

Евгений Степанищев (bolknote.ru) 2011

Комментарий для jimidini.ya.ru:

Это на «Барсе» было или на «Льве» тоже?

Sergey Solyanik (profiles.google.com/jankkhvej/) 2011

Спасибо за ссылку на рецепт, надо проверить, а то ntfs-3g очень медленный, а Paragon достал своим кернел-паником, когда опустошаешь корзину.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для profiles.google.com/jankkhvej/:

Я немного потестировал, пока всё хорошо. Конечно это не говорит о том, что хорошо будет и в будущем :)

Запустить можно, например, так:

curl https://raw.github.com/bolknote/shellgames/master/mac_ntfs_write_enabler.sh
bash mac_ntfs_write_enabler.sh enable

artemp.pip.verisignlabs.com 2011

Сергей Васильев, чьи выводы указаны в качестве плюсов/минусов на MacDaily, в дальнейшем предостерегает от использования родного драйвера. Есть вероятность столкнуться с испорченной файловой системой.

http://blog.nolar.info/ntfs-3g-in-mac-os-x-lion-10-7-with-read-write-support/

Евгений Степанищев (bolknote.ru) 2011

Комментарий для artemp.pip.verisignlabs.com:

Ого, спасибо! Сейчас добавлю в пост.

viju.tvercity.net/ru/weblog 2011

Буквально вчера дошли-таки руки решить для себя эту проблему записи на NTFS из под OSX Lion, помогла статья на хабре «NTFS-3G в OS X Lion»
http://habrahabr.ru/blogs/macosx/127200/

Не ожидал я, что с приобретением мака меня будут ждать такие приключения.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для http://viju.tvercity.net/ru/weblog:

Я подумываю приобрести что-нибудь коммерческое.

Sergey Solyanik (profiles.google.com/jankkhvej/) 2011

Комментарий для Евгения Степанищева:

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

somee 2011

А чего вы хотели? NTFS — проприетарная файловая система. Все немикрософтовские решения — это реверс-инжениринг. Конечно, они работают нестабильно. Держать важные данные в ntfs, если у тебя не винда, нельзя ни в коем случае.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для somee:

Все немикрософтовские решения — это реверс-инжениринг.

Не все.

Михаил 2012

Будет ли такая возможность на Mountain Lion?

Евгений Степанищев (bolknote.ru) 2012

Комментарий для Михаил:

Да это же небезопасное решение. Лучше купите драйвер какой-нибудь. Например: http://www.tuxera.com/products/tuxera-ntfs-for-mac/tuxera-ntfs-for-mac-2012-russian/

Михаил 2012

Комментарий для Евгения Степанищева:

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

Евгений Степанищев (bolknote.ru) 2012

Комментарий для Михаил:

Вот, есть инструмент, который делает то же самое, только с красивым инсталлятором: http://macdaily.me/news/ntfs-tools-for-mac-os-x-v2-1/