воскресенье, 22 мая 2011 г.

TrueCrypt под Linux: Не размонтируется шифрованный раздел. Решение проблемы

Столкнулся с проблемой: создал шифрованный раздел на своем переносном диске.
Под Windows все работает прекрасно: и монтируется и отмонтируется без проблем.
А вот под Linux траблы - монтируется нормально, а при попытке отмонтировать раздел говорит, что раздел занят, и никакие танцы с бубном и без не помогают - только ребут.

Прошерстил кучу форумов, понял, что я не одинок и натолкнулся на https://bugs.archlinux.org/task/23184. Там уважаемый  ilya (leniviy) выложил патч для ntfs-3g_ntfsprogs-2011.4.12 (можно, и нужно, скачать с http://www.tuxera.com/community/ntfs-3g-download/). Народ радостно пишет, что им помогло, но на моей OpenSUSE 11.4 почему-то этот драйвер не собирается, в частности, не удавалось найти canonicalize_path() функцию, введенную патчем. Патч предполагает, что функция импортируется из библиотеки, /usr/lib/libmount.a, но моя библиотека почему-то этого не хочет экспортировать :). Без сомнения, я допускаю возможность кривизны своих рук.


Решением было поискать реализацию этой функции на просторах интернета, так как самому ее писать с нуля очень не хотелось. Поиски реализации навели меня на http://doxygen.postgresql.org/path_8c-source.html, где выложены внутренности файла path.c из дистрибутива PostgreSQL.

Выкинув оттуда все ненужное был получен следующий патч - ntfs-3g_ntfsprogs-2011.4.12.patch.
И вот такой патч уже спас мою ситуацию с проблемами при отмонтировании.


Для тех, кто не силен в установке патчей, привожу подробную инструкцию.
  1. Скачиваем ntfs-3g_ntfsprogs-2011.4.12 по адресу http://www.tuxera.com/community/ntfs-3g-download/. На момент написания этого блога версия 2011.4.12 является самой свежей, и именно на нее рассчитан патч. Копируем этот файл куда-нибудь, например, создаем каталог ~/src и помещаем файл в него.
  2. Переходим в этот каталог с файлом: cd ~/src
  3. Распаковываем полученный файл ntfs-3g_ntfsprogs-2011.4.12.tgz командой tar xvf ./ntfs-3g_ntfsprogs-2011.4.12.tgz
  4. В этот же каталог помещаем файл ntfs-3g_ntfsprogs-2011.4.12.patch
  5. Выполняем команду: patch -p0 < ./ntfs-3g_ntfsprogs-2011.4.12.patch
  6. Далее собираем драйвер. Переходим в его каталог: cd ntfs-3g_ntfsprogs-2011.4.12
  7. Выполняем ./configure
  8. Собираем проект: make
  9. Если никаких ошибок доселе не было, то сносим имеющиеся драйвера. В зависимости от Вашего дистрибутива Linux команда может различаться. Для OpenSUSE это zypper, для ubuntu-подобных это apt-get, можно через графический интерфейс (KPackageKit или Synaptics). Нужно снести ntfs-3g и ntfsprogs. Например, так: apt-get remove ntfs-3g ntfsprogs
  10. Вот теперь можно установить наши пропатченные драйвера. Из каталога ~/src/ntfs-3g_ntfsprogs-2011.4.12 (мы ведь еще в нем) выполняем: sudo make install
  11. И, на всякий случай, делаем симлинк: sudo ln -s /sbin/ntfs-3g /sbin/ntfs