Блог им. vladoosКросвиртуализация Ubuntu и Windows на VirtualBox Часть 2

Часть 2.
Теперь приступим к решению противоположной задачи. Нужно загрузить реальную винду в виртуальном окружении. И с этим не так просто. Если линукс замечательно обрабатывает ситуацию со сменой железа, то винда довольно прихотлива. Главная проблема это обработка контролера жестких дисков. Всем известна проблема, что при смене материнских плат винда отказывается загружаться и выдает ошибку STOP. В сети есть множество описаний решений этой проблемы и для нас подойдет, любое, которое нам подойдет. Потому как конфигурация железа у всех разная, то и возможное решение может быть разное.

Теоретическая часть проблемы состоит в том, что винда не определяеляет при загрузки тип контролера дисков, хотя может, но не хочет. Делает она это один раз при инсталляции. Далее она жестко прописывает драйвера подходящие производителя и больше сама никогда не меняет. Хотя в системе есть универсальные драйвера подходящие для всех контролеров, но винда их использует только в том случае, если нет других.

А поэтому нужно подготовить вашу систему к смене контролера. Для это нужно сменить драйвера IDE на стандартные. В диспетчере задач идем на наш IDE контролер. Там будет что-то типа Intel (via, nvidia… и т.п.) Клацаем правой кнопкой по меню “Обновить драйвер” далее жмем “Установка из указанного места”,=> “Не выполнять поиск. Я сам выберу нужный драйвер”, и в открывшемся списке доступных драйверов выбираем “Стандартный двухканальный контролер PCI IDE”.

Далее я на всякий случай я выполнил рекомендации мелкомягких support.microsoft.com/kb/314082/ru. Извлек файлы Atapi.sys, Intelide.sys, Pciide.sys и Pciidex.sys из архива %SystemRoot%\Driver Cache\I386\Driver.cab и скопировал их в папку %SystemRoot%\System32\Drivers. Правда в Driver.cab были не все файлы, некоторые были в sp3.cab той же директории. И запустил соответствующих регфайл по рекомендации. Что из этого сработало я не знаю. Далее создаем заглушку для виндовс раздела.

VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1

Догадываетесь, по аналогии, что /dev/sda это тоже самое, что и \\.\PhysicalDrive0, а партиция номер 1, это первая партиция на котором размещена винда. В убунте есть опасность повредить виндовс раздел, так как убунта может случайно примонтировать его, поэтому на всякий случай убедитесь, что он отмонтирован и если нет, то демонтируйте его. Хотя если ничего не записывать, а только считывать, то теоретически, все может быть обойдется.

Сразу же описываю, доставивший мне немного хлопот, нюанс. Оказывается в Ubuntu работать с дисками простым смертным запрещено. А так как файл заглушка заставляет виртуалбокс напрямую обращаться к устройству, то все команды и сам виртуалбокс придется запускать от рута. Правда, если добавить себя в группу ‘disk’, то после перезагрузки, система не будет требовать от вас пароль для работы дисковыми устройствами. Оба варианта одинаково работают. Вам самим решать, что делать, либо немного повысить себе привилегии, либо на максимум повысить привилегии для виртуалки. Хотя есть и иные варианты.

Далее, после конфигурирования виртуалки, внимательно следим за загрузчиком. Так как мне было лень разбираться в возможности использования собственных загрузчиков в файлах заглушках, то я оставил свой системный загрузчик. А он по умолчанию первым загружает Ubuntu. Если проморгать время, то загрузчик попытается загрузить его. Но так как мы предусмотрительно отключили эти партиции в виртуальном диске, то на этом все и закончится. Но если вы, как я, опрометчиво подключили все партиции устройства, то рискуете подвергнуться угрозе краша данных на вашем линукс разделе. Убеждаться в статистической безопасности или опасности такого развития событий я не стал. Поэтому будем осторожны и внимательно следим за загрузчиком.

Если танцы с бубном вокруг драйверов удались, то винда загружается и мы испытываем счастье. Насколько это решение будет работать на разных конфигурациях не могу сказать. Есть подозрение, что не везде. Я пока проверял на двух машинах. На одной потратил целый день и убил все системы, на второй все заработало с первого раза в течении 15 минут. Но даже если вы загрузились, то не торопитесь расслабляться. При обнаружении новых устройств винда обновит конфигурацию драйверов и в том числе драйвера на контролеры IDE!!! (Фанфары) Смешно не правда ли? Поэтому снова возвращаем стандартные драйвера в диспетчере устройств, как это было указано ранее, иначе наша система не может загружаться на реальном железе.

Когда мы добились столь изящного извращения, то мы можем приступать приобретению нового бесценного опыта. Получая все преимущества линукса, и не жертвуя столь привычными удобствами windows.

Эпилог

В качестве альтернативных решений проблемы с драйверами контролеров в XP, можно использовать LiveUSB сборки в качестве windows системы. В таких сборках эта проблема отсутствует, но их инсталяция на жесткий диск дело нетривиальное. Либо, как самый радикальный вариант, использовать вместо WindowsXP, Windows7. Не проверял, но говорят, что в Windows7 нет проблем со сменой материнок. Но виртуализация семерки потребует очень много памяти, но попробовать стоит. Завтра попробую скачать дистрибутив семерки и поэкспериментировать и с ним. Позже добавлю результаты эксперимента.

Отдельно хочется упомянуть про загрузчики. В виртуалбоксе есть возможность менять загрузчики для своих виртуальных носителей. То есть можно сконфигуровать такой загрузчик в виртуальной заглуше, который будет автоматически грузить конкретную систему. Но честно признаю, мне пока было лень в этом разбираться, да и не актуально это на десктопе. Хотя на серверах эта возможность может быть очень даже востребована. Если честно я об такой возможности даже и не знал, так что разбираться с этим даже очень нужно и полезно.

Так же в конце хочется упомянуть о возможности виртуалбокса работать в режиме интеграции дисплея. В этом случае вы практически не будете ощущать разницы в работе с приложениями в гостевой системе и хосте. Приложения как бы перемешаются. Очень удобно при работе с окнами.

Вот как это выглядит на моем новогоднем дестопе. Всё таки скоро новый год. :)

Всем мира, добра.
  • +9
  • vladoos
  • 22 сентября 2010, 02:48

Комментарии (4)

Всё как бы здорово, я тоже о таком не раз думал, но есть одно НО:
какая разница юзаем мы виндовс в виртуал боксе или на отдельном разделе веника? так или иначе мы его юзаем и в обоих случах (если винда не лицензионная) мы его юзаем незаконно. А если нет разницы, зачем платить больше мучаться с виртуал боксом и завиртуаленной виндой?

Ну да, единственный плюс: больше времени будем проводить в линукс.

Если бы ReactOS достиг должного уровня, то завиртуалить можно было бы его вместо винды ;)
Разница в том, что если пользователь всё же решил перейти на GNU/Linux, то он может это сделать плавно, не спеша. Ведь многие просто так, за один день, не могут снести знакомую обжитую венду и сразу же накатить непонятную и неизведанную Ubuntu (как и писал автор статьи на своём примере).

Использование пиратской венды это, конечно, плохо, но если человек в итоге от неё избавится, — значит, способ не так уж и плох :-)
У меня было два мотива. Хотелось поразвлечься и заставить себя наконец-то переехать на линуксы.:) В целом удалось совместить приятное с полезным. К сожалению от винды уйти полностью мне не удастся. В некоторых ситуациях она всегда должна быть под рукой для определенных операций. В 99% случаев виртуалки вполне хватает. Я джаба программист и мне все рано, где компилировать код, но вот тестировать в винде его нужно обязательно. А так же есть 1% процент задач, которые можно решить только в нативной загрузки винды. Это касается в основном игр. :) Мой любимый старкрафт под вином жутко глючит. Поэтому я это сделал, что бы не было соблазна моей лени воспользоваться этой отговоркой и отговорить меня от использования линукса. Теперь я могу спокойно использовать одну копию винды и для повседневной работы в виртуалке и для игр. В процессе решения этой, как мне казалось, простой задачи наткнулся на ряд специфических проблем. Решение которых оказались очень полезными с чисто практической стороны. Сперва думал просто написать маленькую заметку об этом опыте, а получилось аж на две статьи. Надеюсь это будет кому нибудь полезно.
Большое спасибо за статью! Думаю, многим пригодится (мне бы такая 2-3 года назад не помешала бы точно).
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.