Установка и настройка 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.
С тех пор прошло некоторое количество времени, 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.
Эта карта обычно хорошо работает в системах, которые официально не поддерживаются Microsoft. У нее есть только один минус - ограничение скорости в 100 мегабит. Впрочем большинству клиентов этого вполне хватает. Теперь систему можно устанавливать. В этом процессе нет ничего необычного поэтому мы его пропускаем.
Ближе к концу установки система предлагает настроить сетевую карту. Делать это можно двумя путями: DHCP или статической адресацией. Многие из пытавшихся настроить сеть во FreeBSD под Hyper-V говорят, что сеть работает плохо, DHCP нестабилен и использовать его нельзя . Дескать, мы обречены на жизнь со статической адресацией. Это не правда. :) Давайте попробуем воспользоваться DHCP.
Как видите, система правильно нашла мой домашний маршрутизатор 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. Казалось бы ничего страшного, но гостевая ОС перестает вообще реагировать на какие либо команды основной системы.
Самое неприятное, что из меню исчезает команда "Turn Off" ведь по мнению Hyper-V гостевая ОС уже почти завершилась. И завершать ее еще раз было бы некорректно. В таком состоянии гостевая ОС может висеть довольно долго, но мы ждать этого не будем.
Запускаем Powershell с правами Administrator даже если вы в данный момент являетесь Local Administrator, иначе скрипт Powershell не покажет вам нужную виртуальную машину. Завершаем работу этой виртуальной машины с помощью скрипта Powershell и WMI.
> Get-WmiObject -Namespace root\virtualization msvm_computersystem | Format-Table ElementName, ProcessId
> kill номер процесса
И пока виртуальная машина не успела перезапуститься выключаем ее кнопкой "Turn Off". Извлекаем из виртуального CD-ROM установочный диск иначе инсталляция начнется снова. После этого спокойно загружаем только что установленную систему. Все идет хорошо до тех пор пока FreeBSD не попытается получить адрес по DHCP. Как видите это ей не удается как на этапе загрузки так и после загрузки.
Итак давайте чинить FreeBSD.
Налаживаем работу с DHCP.
Если после загрузки виртуальной машины выполнить следующие команды:
# ifconfig de0 down
# ifconfig de0 up
# dhclient de0
Или включить/выключить все сетевые интерфейсы с помощью скрипта
# /etc/rc.d/netif restart
то после этого сетевой интерфейс de0 начинает функционировать нормально и получает IP адрес через DHCP и сеть работает так так и должна.
Но подобное счастье длится только до следующей перезагрузки системы. К сожалению данная настройка не переживет перезагрузку системы поэтому нам необходимо внести изменения в /etc/rc.conf вписав в него следующую строку.
ifconfig_de0=”DHCP media 100baseTX mediaopt full-duplex”
Того же самого эффекта можно добиться с помощью программы sysinstall. Нужно только добавить опции ”DHCP media 100baseTX mediaopt full-duplex” в параметры команды ifconfig.
Устраняем причину зависания при перезагрузке или приостановке ОС
Насколько я понимаю система зависает потому что не может правильно управлять питанием через 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 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.0Anonymous
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.aspxAnonymous
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 Судя по всему у Андрея был другой релиз FreeBSDAnonymous
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.gzAnonymous
April 05, 2010
alk Скорее всего, какой-то необходимый параметр закоментировали в конфиге, дело тут не в Hyper-V, меня 8.0 BSD вполне адекватно работает и без выше описанных рецетовAnonymous
April 06, 2010
А вот в VMWare ESX(i) почему то все работает без дополнительных патчей. И Windows и Linux и FreeBSDAnonymous
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.aspxAnonymous
February 01, 2012
Это же надо, сколько танцев с бубном? :) И это поверхность айсберга! Вывод прост - не пытаться ставить FreeBSD под Hyper-V все равно нормально работать она не будет. Лучше уж наоборот, если заказчику так хочется Microsoft продуктов. ;)