FreeBSD - работаем с NTFS

Опубликовано

Иногда возникает необходимость считать какие либо данные с NTFS раздела. Так же иногда нужно что либо записать на NTFS раздел. Рассмотрим два способа работы с NTFS в FreeBSD обладающими своими достоинствами и недостатками.

Работать будем с USB HDD, на нем два раздела - первый сделан для FreeBSD (это моя переносная загрузочная система на все случаи жизни), а второй раздел отформатирован в NTFS.

Диск разбит след. образом:

/dev/da0s1 /dev/da0s1a /dev/da0s1b /dev/da0s1c /dev/da0s1d /dev/da0s1e /dev/da0s1f /dev/da0s2

Где /dev/da0s2 - NTFSный раздел.

Метод первый. Работаем штатным NTFS модулем.

# mount_ntfs -C UTF-8 /dev/da0s2 /mnt/ntfs

Затем выполняем:

# ls -l /mnt/ntfs/
total 67854
-rwxr-xr-x 1 root wheel 2560 23 апр 2009 $AttrDef*
-rwxr-xr-x 1 root wheel 0 4 мар 08:51 $BadClus*
-rwxr-xr-x 1 root wheel 2221496 23 апр 2009 $Bitmap*
-rwxr-xr-x 1 root wheel 8192 4 мар 08:51 $Boot*
drwxr-xr-x 1 root wheel 0 4 мар 08:51 $Extend/
-rwxr-xr-x 1 root wheel 67108864 4 мар 08:51 $LogFile*
-rwxr-xr-x 1 root wheel 4096 4 мар 08:51 $MFTMirr*
-rwxr-xr-x 1 root wheel 0 23 апр 2009 $Secure*
-rwxr-xr-x 1 root wheel 131072 23 апр 2009 $UpCase*
-rwxr-xr-x 1 root wheel 0 4 мар 08:51 $Volume*
drwxr-xr-x 1 root wheel 0 23 апр 2009 ./
drwxr-xr-x 7 root wheel 512 12 фев 14:27 ../
drwxr-xr-x 1 root wheel 0 4 мар 08:54 System Volume Information/
drwxr-xr-x 1 root wheel 0 4 мар 08:58 Книги/
drwxr-xr-x 1 root wheel 0 4 мар 09:04 Скриншоты/
drwxr-xr-x 1 root wheel 0 4 мар 09:05 Софт/ 

Файлы "$" это скрытые виндовые файлы, все тайное становится явным. :-)

Пару слов о mount_ntfs, это очень хорошая штука, позволяет принудительно указать кодировку в которую перекодировать имена файловой системы. В моем случае я использовал локаль UTF-8 и указывал ее же. Если указать -C KOI8-R то соответственно все будет в KOI8-R. Особенность такова, что mount_ntfs отрабатывает этот ключ, а вот mount -t ntfs не отрабатывает, почему, я не разбирался. Недостаток этого метода только один, нельзя вести запись на NTFS раздел. Но лично в моем случае это никакого значения не имеет, мне достаточно только чтения.

Метод второй. Собираем порт fusefs-ntfs, собственно это многострадальный ntfs-3g.

NTFS-3G (в портах: /usr/ports/sysutils/fusefs-ntfs) собирается как модуль ядра. Скажу прямо - он несколько недоделанный и с ним возможны всякие странности. К примеру он может показывать давно удаленный файл на NTFS системе. Но он умеет более-менее полноценно вести запись на NTFS раздел. Хотя лично я думаю, что работать из под FreeBSD в файловой системе с закрытыми спецификациями, надеясь на то, как автор модуля расковырял NTFS, несколько рисковано (для NTFS раздела). :-) Но это личное дело каждого.

Итак порт собрался, мы его запустим:

# sh /usr/local/etc/rc.d/fusefs start

 Проверим загрузился ли модуль:

# kldstat | grep fuse
17 1 0xc6263000 e000 fuse.ko

Модуль загрузился нормально. Если хотим в автозапуск, то надо добавить в rc.conf строку fusefs_enable="YES". Теперь монтируем:

# mount_ntfs-3g /dev/da0s2 /mnt/ntfs/ 

Смотрим результат:

# ls -l /mnt/ntfs/
total 10
drwxrwxrwx 1 root wheel 4096 4 мар 09:04 ./
drwxr-xr-x 7 root wheel 512 12 фев 14:27 ../
drwxrwxrwx 1 root wheel 0 4 мар 08:54 System Volume Information/
drwxrwxrwx 1 root wheel 4096 4 мар 08:58 Книги/
drwxrwxrwx 1 root wheel 0 4 мар 09:04 Скриншоты/
drwxrwxrwx 1 root wheel 0 4 мар 09:05 Софт/

Итак - все работает. NTFS-3G скрытые шары не показывает в отличии от штатного ntfs. Ну и проверим запись:

# cp "про NTFS.txt" /mnt/ntfs/
# ls -l /mnt/ntfs/
total 14
drwxrwxrwx 1 root wheel 4096 4 мар 09:36 ./
drwxr-xr-x 7 root wheel 512 12 фев 14:27 ../
drwxrwxrwx 1 root wheel 0 4 мар 08:54 System Volume Information/
drwxrwxrwx 1 root wheel 4096 4 мар 08:58 Книги/
drwxrwxrwx 1 root wheel 0 4 мар 09:04 Скриншоты/
drwxrwxrwx 1 root wheel 0 4 мар 09:05 Софт/
-rwxrwxrwx 1 root wheel 3936 4 мар 09:36 про NTFS.txt*

Ну собственно вот и все. Однако, имеется одна особенность ntfs-3g. Я так и не нашел перекодировку имен файлов в нем. Поэтому для работы с русскими именами файлов придется использовать локаль UTF-8, либо перекодировать имена каким то другим методом. 

[Наверх страницы]