Freigeben über


Установка и настройка FreeBSD 6.3 и 7.0 в системе виртуализации Hyper-V

В последнее время среди коллег по ИТ, проснулся интерес к запуску Unix подобных систем под Hyper-V. За последнюю неделю несколько человек спросили как обстоят дела с запуском FreeBSD и Linux внутри нашей системы виртуализации. Большинство интересовал вопрос возможно ли Hyper-V использовать в производственных средах для запуска унаследованных Uniх систем. И если да, то много ли там подводных камней на пути к всеобщему счастью. Поэтому я решил тряхнуть стариной вспомнить былые развлечения и взялся за *nix системы снова. Примерно год назад я уже пробовал запускать несколько вариантов BSD систем под Hyper-V. В тот момент Hyper-V еще даже официально не вышел на рынок. Результаты были не очень обнадеживающие. На тот момент была актуальна FreeBSD 6.3 и FreeBSD 7.0. Все попытки запустить обе системы окончились неудачей. Что бы я ни делал, загрузчик ОС зависал с ошибкой “Can’t load kernel”. Мне даже не удавалось  запустить установку системы. Эти версии ОС так и не заработали под Hyper-V.

FreeBSD_17

С тех пор прошло некоторое количество времени, RTM версия Hyper-V вышла на рынок и не давно была выпущена FreeBSD 6.4. Поэтому я решил проверить ее, а заодно и версии FreeBSD 7.1 RC1 и  самую свежую FreeBSD 8.0. snapshoot 200812. В процессе исследования работы этих систем под Hyper-V я увидел что Василий Гусев тоже "борется" с FreeBSD и решил посильно помочь. В отличие от Василия, я решил использовать Windows Server 2008 Enterprise Edition, а не Windows Server 2008 R2.  Такое решение было продиктовано в первую очередь тем, что нужно было проверить как, подопытные ОС заработают под общедоступным Windows Server 2008. Не у всех ведь есть доступ к бета-версиям. К тому же использовать бета-версию в производственной среде под нагрузкой большинство моих коллег врядли бы стало.

Вот что выяснилось в процессе исследования. Все перечисленные ОС нормально загружаются под Hyper-V и выполняют свою инсталляцию так же как и на реальном оборудовании. Никаких ошибок в процессе установки не появляется. Есть маленькие проблемы, но они решаемы.

Как же установить эти ОС? Все очень просто. В связи с тем что драйверов синтетических устройств и компонентов интеграции для FreeBSD не выпускается нам придется удалить сетевую карту создаваемую по умолчанию и вместо нее добавить Legacy Network Adapter.

FreeBSD0 FreeBSD01

Эта карта обычно хорошо работает в системах, которые официально не поддерживаются Microsoft. У нее есть только один минус - ограничение скорости в 100 мегабит. Впрочем большинству клиентов этого вполне хватает. Теперь систему можно устанавливать. В этом процессе нет ничего необычного поэтому мы его пропускаем.

Ближе к концу установки система предлагает настроить сетевую карту. Делать это можно двумя путями: DHCP или статической адресацией. Многие из пытавшихся настроить сеть во FreeBSD под Hyper-V говорят, что сеть работает плохо, DHCP нестабилен и использовать его нельзя . Дескать, мы обречены на жизнь со статической адресацией. Это не правда. :) Давайте попробуем воспользоваться DHCP.

FreeBSD_1 FreeBSD_2

Как видите, система правильно нашла мой домашний маршрутизатор ASUS WL-500w являющийся по совместительству еще и DHCP сервером. В журнале работы самого DHCP сервера можно увидеть следующее

Dec 15 20:09:30 dnsmasq[52]: DHCPREQUEST(br0) 192.168.1.235 00:15:5d:01:fa:78
Dec 15 20:09:30 dnsmasq[52]: DHCPACK(br0) 192.168.1.235 00:15:5d:01:fa:78 freebsd7

Значит DHCP все таки отрабатывает нормально. :)

В конце установки в момент когда система спрашивает у нас разрешения на перезагрузку соглашаемся с ней. И в момент завершения работы она зависает в состоянии Stoping. Казалось бы ничего страшного, но гостевая ОС перестает вообще реагировать на какие либо команды основной системы.

FreeBSD_3  FreeBSD_hang 

Самое неприятное, что из меню исчезает команда "Turn Off" ведь по мнению Hyper-V гостевая ОС уже почти завершилась. И завершать ее еще раз было бы некорректно. В таком состоянии гостевая ОС может висеть довольно долго, но мы ждать этого не будем.

Запускаем Powershell с правами Administrator даже если вы в данный момент являетесь Local Administrator, иначе скрипт Powershell не покажет вам нужную виртуальную машину. Завершаем работу этой виртуальной машины с помощью скрипта Powershell и WMI.

> Get-WmiObject -Namespace root\virtualization msvm_computersystem | Format-Table ElementName, ProcessId

> kill номер процесса

FreeBSD_15  FreeBSD_15_1

И пока виртуальная машина не успела перезапуститься выключаем ее кнопкой "Turn Off". Извлекаем из виртуального CD-ROM установочный диск иначе инсталляция начнется снова. После этого спокойно загружаем только что установленную систему. Все идет хорошо до тех пор пока FreeBSD не попытается получить адрес по DHCP. Как видите это ей не удается как на этапе загрузки так и после загрузки.

FreeBSD_4 

Итак давайте чинить FreeBSD.

Налаживаем работу с DHCP.

Если после загрузки виртуальной машины выполнить следующие команды:

# ifconfig de0 down

# ifconfig de0 up

# dhclient de0

Или включить/выключить все сетевые интерфейсы с помощью скрипта

# /etc/rc.d/netif restart

то после этого сетевой интерфейс de0 начинает функционировать  нормально и получает IP адрес через  DHCP и сеть работает так так и должна.

FreeBSD25

Но подобное счастье длится только до следующей перезагрузки системы. К сожалению данная настройка не переживет перезагрузку системы поэтому нам необходимо внести изменения в /etc/rc.conf вписав в него следующую строку.

ifconfig_de0=”DHCP media 100baseTX mediaopt full-duplex”

Того же самого эффекта можно добиться с помощью  программы sysinstall. Нужно только добавить опции ”DHCP media 100baseTX mediaopt full-duplex” в параметры команды ifconfig.

 FreeBSD_14

Устраняем причину зависания при перезагрузке или приостановке ОС

Насколько я понимаю система зависает потому что не может правильно управлять питанием через ACPI. Для того чтобы это исправить один из Японских коллег написал патч для ядра FreeBSD.

Сеть у вас уже работает так что скачать патч и все нужные утилиты не составит труда. Давайте установим патч и посмотрим что получится.  В гостевой ОС должен быть установлен компилятор, исходные тексты ядра и моя любимая утилита wget. Если у вас нет wget можете использовать fetch. Чтобы скомпилировать и установить новое ядро нужно выполнить вот такие команды.

# cd /tmp

# wget https://shell.peach.ne.jp/~aoyama/wordpress/download/fbs71-200809-hvpatch.bz2 

# cd /usr/src/

# bzcat < /path/to/fbs71-200809-hv.patch.bz2 | patch -p1

# make buildkernel

# make installkernel

# shutdown -r now

Затем "убиваем" гостевую ОС с помощью скрипта на Powershell о котором я уже писал. И после перезагрузки у вас должны пропасть проблемы с сетью и подвисанием самой ОС.

Теперь можно полноценно использовать FreeBSD под Hyper-V. Понятно что процедура лечения ОС не простая, но ведь никто вас не заставляет ее проходить повторно. В случае необходимости просто клонируйте виртуальную машину и создайте еще один экземпляр FreeBSD. Дабы не быть голословным привожу снимок экрана на котором видны три виртуальных машины FreeBSD 6.4 i386, FreeBSD 7.1 RC1 i386 и FreeBSD 8.0. CURRENT 200812 amd64 нормально работающих в моей системе. 

FreeBSD_Final

Есть правда маленькая загвоздка FreeBSD 6.4 i386 упрямо не хочет завершать процесс заморозки по нажатию кнопки "Save", видимо патч на нее подействовал не совсем правильно. Надо будет на досуге продолжить разбирательство с ней.

В следующих записях в блоге думаю сделать тестирование скорости работы FreeBSD под Hyper-V. Надеюсь вам это будет интересно. После этого можно будет обосновано говорить о том, стоит ли использовать FreeBSD в системе виртуализации Hyper-V для каких либо промышленных задач.

Так же есть планы написать о всех тонкостях запуска Linux под Hyper-V. Пишите в комментариях про какие Unix\Linux ОС под Hyper-V вам будет наиболее интересно почитать.

 

Обновление.

За время прошедшее с момента написания этой заметки ситуация с FreeBSD заметно улучшилась. Установка и настройка упростилась. Подробности читайте здесь

https://blogs.technet.com/b/abeshkov/archive/2011/02/07/3385455.aspx

Comments

  • Anonymous
    January 01, 2003
    > Интересно было бы почитать про установку Debian но не думаю, что там слишком большие отличия. С Debian могут быть проблемы в том что он официально не поддерживается и компонентов интеграции под него нет. Скорее всего придется компилировать их вручную.

  • Anonymous
    January 01, 2003
    > Save state кстати нормально и у меня не выполнялся, так что дело не в патче. У меня Save state работает с FreeBSD 7.1 RC1 и FreeBSD 8.0

  • Anonymous
    January 01, 2003
    > FreeBSD - если диски больше 20 гигов, то при установке вылазит ошибка "write failed filesystem is full". у меня установился на 125Gb Примерно вот так: vvm.blog.tut.by/.../freebsd-10-on-hyper-v == == Convert to .VHD FreeBSD-10.0-ALPHA5-amd64-memstick.img Attach as disk to secondary ATA channel, boot and install: – syntetic LANCard work ( may be need run “dhclient hn0″ ) . . . == ==

  • Anonymous
    January 01, 2003
    starzzki Японскому коллеге можно написать через форму в его блоге http://translate.google.com/translate?js=y&prev=_t&hl=en&ie=UTF-8&layout=1&eotf=1&u=http%3A%2F%2Fshell.peach.ne.jp%2Faoyama%2F&sl=ja&tl=en Я к сожалению сейчас сделать это не могу т.к полностью загружен запуском конференции по Visual Studio 2010 Может быть вы напишете?

  • Anonymous
    January 01, 2003
    starzzki и alk Какая у вас версия Hyper-V и FreeBSD у вас не работает?

  • Anonymous
    January 01, 2003
    Для discoloured Не согласен с вами. Постепенно ситуация улучшается. И как писали коллеги с новыми версиями FreeBSD и Hyper-V уже никакие патчи не нужны. Все ставится и работает отлично. Подробности смотрите тут blogs.technet.com/.../3385455.aspx

  • Anonymous
    January 01, 2003
    Андрей, не подскажете, какие диски подключали к виртуалке? Сколько не пробовал ставить FreeBSD - если диски больше 20 гигов, то при установке вылазит ошибка "write failed filesystem is full". Да конечно 3 диска по 20 это вариант, но некрасивый. Как я понимаю, инсталлятор не может понять геометрию созданного в Hyper-V диска

  • Anonymous
    January 01, 2003
    > Интересно почитать про официально поддерживаемые Linux'ы: Suse или RH. Где брать правильные версии, как ставить Integration Components... Обязательно напишу про это. Как оказалось процесс установки не тривиальный.

  • Anonymous
    December 17, 2008
    Отличный пост :) Буду фиксить свою тестовую бздяху :) Save state кстати нормально и у меня не выполнялся, так что дело не в патче. >Так же есть планы написать о всех тонкостях запуска Linux под Hyper-V. Пишите в комментариях про какие UnixLinux ОС под Hyper-V вам будет наиболее интересно почитать. Интересно почитать про официально поддерживаемые Linux'ы: Suse или RH. Где брать правильные версии, как ставить Integration Components...

  • Anonymous
    December 18, 2008
    Интересно было бы почитать про установку Debian но не думаю, что там слишком большие отличия.

  • Anonymous
    March 11, 2009
    Можете ли вы сделать Английская версия этого? Это было полезно для меня (я знаю русский - едва ли), но она будет полезной для широкой аудитории :)

  • Anonymous
    March 14, 2009
    I would also like to see this is an English version. I was cunning and Googled "Beshkov Andrey freebsd hyper-v" or the like and found a direct link from Google then used their 'Translate this page' link ;)

  • Anonymous
    June 25, 2009
    Helped me out! Thanks for the article. :)

  • Anonymous
    August 05, 2009
    hmm... i can't seem to find a patch in there anywhere     пишет после запуска команды bzcat < /path/to/fbs71-200809-hv.patch.bz2 | patch -p1   хотя wget нормально скачал файл, затем внимательно присмотревшись увидел что в имени файла стоит лишняя точка hv.patch.bz2 изменил имя файла в команде bzcat < /path/to/fbs71-200809-hvpatch.bz2 | patch -p1  но толку ноль что делать помогите кто нить советом.

  • Anonymous
    August 05, 2009
    Вопрос решился очень просто ))), надо было включить немножко мозга и внимательней смотреть на путь откуда брать патч )))

  • Anonymous
    March 10, 2010
    У меня после сборки ядра отвалилась сетевуха (негрузится зараза)

  • Anonymous
    March 10, 2010
    Аналогичная проблема, ниже лог загрузки ОС: de0: <Digital 21140A Fast Ethernet> irq 11 at device 10.0 on pci0 de0: can't read ENET ROM (why=-3) (ffffffffffffffffffffffffffffffffffffffffffff de0: 21140A [10-100Mb/s] pass 2.0 de0: address unknown Всё это происходит именно после наложения патча. Вот еще человек о том же пишет http://www.opennet.ru/openforum/vsluhforumID1/88373.html Судя по всему у Андрея был другой релиз FreeBSD

  • Anonymous
    March 10, 2010
    hyper-v 6.0.6001.18016 freebsd ftp://ftp.ru.freebsd.org/pub/FreeBSD/ISO-IMAGES-i386/8.0/8.0-RELEASE-i386-dvd1.iso.gz

  • Anonymous
    April 05, 2010
    alk Скорее всего, какой-то необходимый параметр закоментировали в конфиге, дело тут не в Hyper-V,  меня 8.0 BSD вполне адекватно работает и без выше описанных рецетов

  • Anonymous
    April 06, 2010
    А вот в VMWare ESX(i) почему то все работает без дополнительных патчей. И Windows и Linux и FreeBSD

  • Anonymous
    April 08, 2010
    nicksanich, конфиг дефолтный GENERIC использовался. Т.е. буквально по хэндбуку поставил и по шагам выполнил инструкцию Андрея. Dmitry, не конструктивно. Поможем немножко коллегам улучшить их продукт, конкуренция - двигатель прогресса, как известно. Вообще я сюда писал в надежде, что Андрей заинтересуется тем фактом, что не все так гладко и предпримет какие то шаги. Может японского коллегу разработавшего патч проинформировать?

  • Anonymous
    April 09, 2010
    starzzki Параметр поддержку MII Bus случайно не комментировали? Я уже наступал на эти грабли, случайно поставив # :) . В статье http://www.lissyara.su/articles/freebsd/tuning/make_kernel/ описаны многие параметры конфига GENERIC, в частности, что MII BUS необходим для основной массы современных NIC. Вернувшись к теме, хочу отметить, что описанная здесь проблема была актуальна на Server 2008 Ent R2 <B>RC</B> с ролью Hyper-V. В данный момент стоит Server 2008 R2 6.1.7600, как в FreeBSD 8.0, так и в 7.1 зависаний нет, перезагрузка и выключение происходит без зависаний. p.s. В RC версии у меня и PS/2 клавиатуры отваливались после поднятия роли Hyper-V ))

  • Anonymous
    May 13, 2010
    Ну как же, Beshkov Andrey и без фряхи, народ бы не понял... Кстати, ваши статьи на опеннете и др. до сих пор помогают людям познавать мир FreeBSD Но ведь и родной МС тоже все больше становиться CLI управляемым, и тут Beshkov Andrey помогает миру познавать PS Вот с кем нужно пиво пить, ибо респект и уважуха.

  • Anonymous
    August 16, 2010
    Если кому интересно то есть хороший блог про установку Ubuntu и Debian на Hyper-V blog.allanglesit.com/.../Default.aspx

  • Anonymous
    February 01, 2012
    Это же надо, сколько танцев с бубном? :) И это поверхность айсберга! Вывод прост - не пытаться ставить FreeBSD под Hyper-V все равно нормально работать она не будет. Лучше уж наоборот, если заказчику так хочется Microsoft продуктов. ;)