Установка и настройка 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 http://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 заметно улучшилась. Установка и настройка упростилась. Подробности читайте здесь

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

Comments (25)

  1. Andrey Beshkov says:

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

    С Debian могут быть проблемы в том что он официально не поддерживается и компонентов интеграции под него нет. Скорее всего придется компилировать их вручную.

  2. Andrey Beshkov says:

    > Save state кстати нормально и у меня не выполнялся, так что дело не в патче.

    У меня Save state работает с FreeBSD 7.1 RC1 и FreeBSD 8.0

  3. > 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″ )

    . . .

    ==

    ==

  4. Andrey Beshkov says:

    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

    Может быть вы напишете?

  5. Andrey Beshkov says:

    starzzki и alk

    Какая у вас версия Hyper-V и FreeBSD у вас не работает?

  6. Andrey Beshkov says:

    Для discoloured

    Не согласен с вами. Постепенно ситуация улучшается. И как писали коллеги с новыми версиями FreeBSD и Hyper-V уже никакие патчи не нужны. Все ставится и работает отлично.

    Подробности смотрите тут

    blogs.technet.com/…/3385455.aspx

  7. Anonymous says:

    Андрей, не подскажете, какие диски подключали к виртуалке?

    Сколько не пробовал ставить FreeBSD – если диски больше 20 гигов, то при установке вылазит ошибка "write failed filesystem is full". Да конечно 3 диска по 20 это вариант, но некрасивый.

    Как я понимаю, инсталлятор не может понять геометрию созданного в Hyper-V диска

  8. Andrey Beshkov says:

    > Интересно почитать про официально поддерживаемые Linux’ы: Suse или RH. Где брать правильные версии, как ставить Integration Components…

    Обязательно напишу про это. Как оказалось процесс установки не тривиальный.

  9. Vasily Gusev says:

    Отличный пост 🙂 Буду фиксить свою тестовую бздяху 🙂

    Save state кстати нормально и у меня не выполнялся, так что дело не в патче.

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

    Интересно почитать про официально поддерживаемые Linux’ы: Suse или RH. Где брать правильные версии, как ставить Integration Components…

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

  11. Jacob Myers says:

    Можете ли вы сделать Английская версия этого? Это было полезно для меня (я знаю русский – едва ли), но она будет полезной для широкой аудитории 🙂

  12. Jayton says:

    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 😉

  13. Sean says:

    Helped me out! Thanks for the article. 🙂

  14. Ilia says:

    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  но толку ноль

    что делать помогите кто нить советом.

  15. Ilia says:

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

  16. alk says:

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

  17. starzzki says:

    Аналогичная проблема, ниже лог загрузки ОС:

    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

  18. nicksanich says:

    alk

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

  19. Dmitry says:

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

  20. starzzki says:

    nicksanich, конфиг дефолтный GENERIC использовался. Т.е. буквально по хэндбуку поставил и по шагам выполнил инструкцию Андрея.

    Dmitry, не конструктивно. Поможем немножко коллегам улучшить их продукт, конкуренция – двигатель прогресса, как известно.

    Вообще я сюда писал в надежде, что Андрей заинтересуется тем фактом, что не все так гладко и предпримет какие то шаги. Может японского коллегу разработавшего патч проинформировать?

  21. nicksanich says:

    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 ))

  22. AlexLAX says:

    Ну как же, Beshkov Andrey и без фряхи, народ бы не понял…

    Кстати, ваши статьи на опеннете и др. до сих пор помогают людям познавать мир FreeBSD

    Но ведь и родной МС тоже все больше становиться CLI управляемым, и тут Beshkov Andrey помогает миру познавать PS

    Вот с кем нужно пиво пить, ибо респект и уважуха.

  23. Дмитрий Хроменко says:

    Если кому интересно то есть хороший блог про установку Ubuntu и Debian на Hyper-V

    blog.allanglesit.com/…/Default.aspx

  24. discoloured says:

    Это же надо, сколько танцев с бубном? 🙂 И это поверхность айсберга!

    Вывод прост – не пытаться ставить FreeBSD под Hyper-V все равно нормально работать она не будет.

    Лучше уж наоборот, если заказчику так хочется Microsoft продуктов. 😉

Skip to main content