Полноценный доступ ко всем Linux-файловым системам в Windows с помощью coLinux

В данной статье пойдет речь о том, как получить практически полноценный доступ для чтения и записи ко всем файловым системам, используемым в Linux (Ext2/3/4, ReiserFS, XFS, JFS, etc) из-под сабжевых операционных систем. Статья является вольным переводом данного руководства, причем написано оно уже довольно давно, но Boten перевел его только сейчас. :)

Что из себя представляет данный способ?

Пожалуй, все слышали о проекте coLinux. Это ядро Linux, портированное и модифицированное для запуска из Windows, включающее в себя драйвер для преобразования системных вызовов Linux в вызовы Windows. Приложения Linux могут запускаться в coLinux без перекомпиляции, при этом потеря производительности приложений не наблюдается. Мы же будем использовать coLinux-систему как промежуточное звено для доступа к нужным файловым системам. coLinux будет имеет прямой доступ к файловым системам, а из под Windows (здесь и далее — хост-система) они будут доступны при помощи Samba-сервера, настроенного на coLinux-системе (гостевой системе). Связь между гостевой и хост-системами будет осуществлена при помощи виртуального TAP-сетевого адаптера. Совместимость при этом будет практически полная, вплоть до редактирования прав доступа и проч. (естественно, в гостевой системе).

Достоинства и недостатки

Главное достоинство в том, что используется нативный Linux-драйвер файловой системы (так как фактически запущена полная копия Linux, и драйвер работает в этой среде). И поэтому будет осуществляться полный доступ к ФС без багов со стороны Windows, недоделанных, а то и вовсе нереализованных, возможностей Windows-драйверов, и т.д. Первый недостаток плавно вытекает из достоинства: из-за того, что запущена полная копия Linux со всеми драйверами, сервисами и программами, количество свободных ресурсов хост-системы порой довольно сильно уменьшается, в особенности при обмене файлами. Второй недостаток заключается в низкой скорости обмена файлами: скорость чтения из файловой системы XFS не превышает в среднем 5 мегабайт в секунду, а скорость записи — 7 (что довольно-таки странно).

Установка и настройка гостевой Linux-системы

  1. Скачиваем ядро coLinux здесь. Устанавливаем, например, в директорию C:\coLinux (далее в статье для примера будет использоваться именно она).
  2. Скачиваем один из образов установленной Linux-системы отсюда. Я предпочел Debian Lenny, и поэтому при предстоящей работе в гостевой системе будут использоваться команды, специфичные для Debian. Распаковать архив с образом нужно в директорию, куда установлен coLinux, в нашем случае C:\coLinux.
  3. Правим конфиг-файл debian-lenny.conf, расположенный в директории coLinux (мы же распаковали архив с образом в нее, так?). Снимаем символ комментирования (#) со строк #mem=256 и #eth1=tuntap
  4. Теперь необходимо прописать в конфиг имена нужных разделов для доступа к ним. Эти имена выглядят как\Device\Harddisk1\Partition2. Самый простой способ найти правильные имена для нужных разделов — это скачатьWindows-port утилиты dd и с помощью команды: dd --list в командной строке Windows с правами администратора (естественно, находясь в каталоге с исполняемым файлом dd) ищем нужные нам имена разделов под словами NT Block Device Objects (малость неудобно, т.к. искать нужные разделы придется по размеру, который, к тому же, дан в байтах). Итак, нужные имена мы нашли, теперь необходимо вписать их в конфиг. В конце конфига вписываем строки типа: cobdX=\Device\HarddiskY\PartitionZ где X — это порядковый номер файла девайса (он будет видет из-под гостевой системы в /dev), начиная с 3, а Y и Z — это номера диска и раздела в его Windows-имени. Например: cobd3=\Device\Harddisk1\Partition2 И так для каждого раздела.
  5. Заходим в свойства виртуального сетевого адаптера «TAP-Win32 Adapter V8 (coLinux)» (в WinXP — Панель управления — Сетевые подключения — ПКМ на адаптере — Свойства — Протокол Интернета (TCP/IP) — Свойства, в WinVista/7 — Панель управления — Центр управления сетями и общим доступом — Изменение параметров адаптера — ПКМ на адаптере — Свойства — Протокол Интернета версии 4 (TCP/IPv4) — Свойства) и выставляем IP-адрес 192.168.37.10 и маску подсети 255.255.255.0. Сохраняем настройки.
  6. Самый долгожданный момент — запуск гостевой системы. :) Запускаем файл debian-lenny.bat из корневой директории coLinux и ждем, пока система полностью загрузится. Заходим в систему с логином root и паролемcolinux. Создаем директории — точки монтирования разделов в гостевой системе. Редактируем файл /etc/fstab (с помощью vim или nano, по вкусу) и вписываем туда строчки для описания файловых систем для монтирования, например: /dev/cobd3 /mnt/cobd3 xfs defaults 0 0 Тут все стандартно, отмечу только, что имя файла нужного раздела совпадает со строкой раздела в конфиге coLinux. После сразу монтируем все разделы с помощью команды mount -a.
  7. Настроим виртуальный сетевой адаптер в хост-системе. Для этого добавим в файл /etc/network/interfaces следующие строки: auto eth1 iface eth1 inet static address 192.168.37.20 network 192.168.37.0 netmask 255.255.255.0 broadcast 192.168.37.255 Включаем сетевой интерфейс командой: ifup eth1 Можно тут же пропинговать хост-систему (192.168.37.10), все должно работать без проблем.
  8. Создаем обычного юзера командой adduser (напр. adduser user1) для того, чтобы предотвратить root-доступ к файлам из-под Windows
  9. Устанавливаем SSH- и Samba-серверы в гостевой системе: apt-get install openssh-server samba В конфиге Samba (/etc/samba/smb.conf) вписываем для каждого смонтированного раздела секцию такого вида: [sharename1] path=/mnt/cobd3 users=user1 read only=no Меняем нужные параметры по-нашему. После редактирования файла перезапускаем Samba с помощью команды/etc/init.d/samba reload
  10. Выбираем в контекстном меню на иконке «Мой компьютер» пункт «Подключить сетевой диск…». Прописываем в качестве пути для каждого раздела \192.168.37.20\имя_шары, где имя шары — это имя, прописанное в квадратных скобках в начале секции конфига Samba.

Ура! Раздел виден, и все успешно читается и пишется (естественно, читается и пишется только туда, где есть соответствующие права). Прописывание coLinux как сервиса Windows Осталась одна проблема — coLinux приходится запускать вручную, и при закрытии его консольного окна доступ к дискам исчезает. Решение — прописать coLinux как сервис Windows (который будет работать в фоне) и настроить его автостарт при запуске системы:

  1. В командной строке Windows (с правами администратора) в каталоге coLinux прописываем команду: daemon.exe —install-service colinux @debian-lenny.conf Тут же и запустим сервис: net start colinux.
  2. Запускаем services.msc (Win+R — services.msc — OK), находим в списке сервисов colinux, дважды щелкаем на него, и в появившемся окне выбираем тип запуска — Автоматически. Сохраняем.

Для доступа к гостевой системе мы будем использовать PuTTY (коннектимся к ip 192.168.37.20). Напоследок хотелось бы отметить, что этот способ доступа к линуксовым ФС пока является самым лучшим, потому что, как уже я отмечал выше, существующие драйверы пока не могут обеспечить полную совместимость, и, более того, за них нередко требуют деньги.