Показать сообщение отдельно
Старый 04.08.2005, 20:19     # 1
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
HOWTO mount NTFS with full read/write access

Не раз встречал на форуме вопросы "а как мне подмонтировать ntfs-раздел и что-нибудь записать на него" с ответами типа "подмонтировать легко, а вот писать не стоит" (да и сам такие давал 8) ). И вот, после личного тестирования в течение некоторого времени и решения возникавших багов, предлагаю краткое howto на тему "использование captive-ntfs для монтирования ntfs-разделов с полным доступом на чтение-запись" (lol, прям тема для реферата 8)) ).
Сразу предупреждаю - я работаю в Gentoo, посему все вопросы будут освещены именно с позиций этого дистриба. Обладателям других дистрибутивов найти у себя аналоги предлагается самостоятельно 8)

Итак, для начала:
что это такое и зачем оно нужно.
Известно, что последние версии ядра позволяют писать на ntfs-разделы, но в очень ограниченном виде (только в имеющиеся файлы, без изменения их размера, без создания/удаления). В таком виде данная запись практически ни для чего непригодна. Проект captive-ntfs реализует другой подход - он использует родные бинарники windows (в частности, ntfs.sys и ntoskrnl.exe), эмулируя их окружение в линуксе на базе кода ReactOS или собственного. В результате решается проблема закрытости спецификации NTFS - вместо реверсинга самой файловой системы, мы используем для работы с ней ее родные драйвера, которые это умеют делать лучше всех 8) Никаких репортов о порушенных при использовании captive-ntfs разделах в инете я не встретил, сам в процессе тестирования также фатальных проблем не заметил, так что заверениям на странице проекта о том, что это безопасный метод записи, думаю, можно верить.

Полагаю, для вступления этого достаточно, с подробностями можно ознакомиться на сайте.
Что нам понадобится для установки:
1. Собственно линукс-система и знание того, какие разделы мы хотим смонтировать.
2. Пакет captive-ntfs. Живет на данной странице, компилируется и устанавливается из исходников обычным образом (./configure && make && make install) либо ищется готовый пакет в своем дистрибутиве (в Gentoo он есть, поэтому в ней достаточно сказать emerge captive).
2a. Ессно, должны быть установлены все требуемые зависимости. В частности, нужны gnome-vfs и fuse. На всякий случай, полный список зависимостей из гентовского ебилда:
Цитата:
RDEPEND="sys-libs/readline
>=gnome-base/orbit-2.8.2
gnome-base/gnome-vfs
dev-libs/popt
dev-libs/glib
>=dev-libs/openssl-0.9.7c
>=dev-libs/libxml2-2.4.29
>=sys-fs/lufis-0.3
>=sys-fs/fuse-2.2"

DEPEND="${RDEPEND}
sys-fs/ntfsprogs"
После успешной компиляции необходимо предоставить требуемые бинарники из Windows. Путей несколько:
1. Монтируем обычным образом ntfs-раздел с установленной на нем Windows и запускаем утилиту captive-install-acquire. Она произведет поиск по смонтированным разделам и скопирует все файлы, которые сможет найти. У меня по неизвестной причине не был найден ntoskrnl.exe, посему переходим к пункту 2.
2. Если какие-то файлы не могут быть найдены, но они точно есть - просто копируем их с ntfs-раздела в /var/lib/captive.
3. И последний случай - если нет установленной windows, то captive-install-acquire скачает с сайта MS пакет XP SP1 и возьмет из него требуемые файлы.
После того, как все файлы на месте -
мы готовы к монтированию.
Отключаем старые ntfs-разделы и заново монтируем их следующим образом:
Код:
mount -t captive-ntfs /dev/hda1 /mnt/win/c
Ессно, заменяем имя раздел и точку монтирования на необходимые. Voila, если все прошло успешно - то можно начинать удалять файлы, создавать файлы и вообще всячески писать на свежепримонтированный раздел.

Если на ntfs-разделе имеются файлы с русскими именами,
а кодировка в линуксе - не UTF8, то они наверняка будут показаны как попало (т.е. нечитабельно). Для этого патчим файл /src/client/lufs/captivefs-vfs.c, изменяя в нем строку setlocale(LC_ALL, "") на setlocale(LC_ALL, "ru_RU.cp1251") (или на свою кодировку, если она не cp1251). Патч для cp1215 для версии captive-1.1.5 прилагается.
При этом все равно сохраняется проблема кодировки при использовании для монтирования /etc/fstab (или даже init-скрипта). В качестве обходного пути я написать init-скрипт, подключающий мои разделы, и когда нужно прочитать на них русские буквы - просто вызываю его из консоли с параметров restart, одна команда - и все разделы с корректной кодировкой. Нужно мне это редко и русских файлов у меня мало, посему данная проблема меня мало заботит. Если кто-то найдет окончательное решение - с удовольствием воспользуюсь.

И последнее - минусы (ну а как же без них 8) ):
1. Первый и самой основной - очень низкая скорость записи, порядка 300-500 kb/sec. Но это лучше, чем вообще не иметь такой возможности.
2. Иногда наблюдаются проблемы при удалении большого количества файлов - captive долго думает и ворочается, потом оказывается, что все файлы на месте. Но, в любом случае, ни к каким крешам это не ведет и такая ситуация лично у меня возникает редко.

Предложение, пожелания, дополнения - приветствуются.
PS: при написании данного HOWTO использовались материалы соответствующей статьи из gentoo-wiki и статья на сайте Simon Litt Software Запись NTFS в Linux.
Вложения
Тип файла: txt captive-ru-cp1251.txt (793 байт, 19 просмотров - Кто скачивал? )
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума