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










Submitting Comment, Give me a second...