Há alguns meses venho trabalhando com Microsoft Hyper-V, no intuito de justificar o custo-benefício deste em relação ao poderoso VMware vSphere, porém alguns desafios começaram a surgir. O primeiro deles foi como utilizar distribuições Linux baseadas em CentOS e Debian como sistema operacional guest. A princípio não há problema algum, o S.O. é instalado sem dificuldade, os drivers também são reconhecidos sem dificuldade.
Porém, ao se criar uma VM no Hyper-V, com o sistema operacional “Linux” definido, a interface de rede utilizada é a do tipo “Legacy”, ou seja, é um driver que emula um adaptador DEC/Intel 21140 Ethernet de 10/100Mbps, cuja finalidade é simplesmente ser compatível com a maioria dos sistemas operacionais. É claro que não queremos uma interface de rede dessas nas redes de alta performance encontradas nos datacenters de hoje em dia. Para se utilizar o adaptador do tipo “Synthetic” do Hyper-V é necessário instalar os Integration Components, que pelo menos na versão 2.0 do Hyper-V (Windows Server 2008 R2) só estava disponível para Windows, RedHat, SuSE e algumas poucas versões de kernel do CentOS.
Como na época eu precisava instalar um Debian, comecei a pesquisar e acabei achando num blog de um MVP turco chamado Yusuf Ozturk quase o que eu precisava, uma versão do kernel do Debian que possuísse os drivers necessários para funcionar o adaptador “Synthetic”. No post ele disponibiliza a versão 2.6.36 do kernel para Debian 5, este era o problema, eu precisava de uma versão para o Debian 6. Pesquisando um pouco mais no blog dele mesmo, acabei encontrando um outro post, onde ele ensinava a compilar um kernel de sua preferência, habilitando os drivers necessários para o Hyper-V.
Fiquei intrigado com o fato de haver drivers específicos para o Hyper-V dentro do kernel do Linux, e ao pesquisar sobre o fato, encontrei algumas referências incluindo esta do Brian Lewis comentando sobre a colaboração entre a Microsoft e os desenvolvedores open source, a qual possibilitaram tal feito. Sim, à partir do kernel 3.4, é possível utilizar um Linux como guest no Hyper-V e ainda usufruir dos benefícios do Integration Components, sem muito esforço. Vamos então ao que interessa? Abaixo segue a sequência para se compilar um novo kernel no Debian 6, ainda não testei com outras distribuições, mas acredito não ser muito diferente disso:
apt-get update aptitude update apt-get install build-essential apt-get install ncurses-dev kernel-package fakeroot apt-get install linux-headers-`uname -r` apt-get install linux-source-`uname -r | awk -F"-" '{print $1}'` cd /usr/src wget -c #link do kernel desejado em kernel.org bzip2 -d #arquivo baixado tar -xf #arquivo descompactado cd linux-#versão do kernel baixado cp /boot/config-$(uname -r) ./.config
Antes de iniciarmos a compilação do kernel, é necessário se atentar para alguns detalhes. Execute o comando abaixo para entrar no menu de configuração do kernel, e siga os passos referente à versão do kernel que você baixou:
make menuconfig
- Kernel anterior à versão 3.4:
Você precisará instalar os drivers através da versão do Linux Integration Components referente à distribuição que você está utilizando, o Linux IC é fornecido diretamente pela Microsoft. Ou, você pode compilar uma versão de Kernel, habilitando os drivers para Hyper-V na seção “Stagging” conforme as duas imagens abaixo:
- Kernel 3.4 em diante:
Os drivers para Hyper-V finalmente saem da classificação “Stagging” e entram de vez no kernel do Linux. Para habilitá-los, siga as telas abaixo:
O driver de rede, especificamente, está em um local separado, volte para Device Drivers, e siga o caminho abaixo:
- Kernel 3.6 em diante:
Boa notícia! os drivers para Hyper-V já estão habilitados por padrão!
Após preparar o kernel com os drivers necessários, vamos então ao processo de compilação. Este processo é demorado, e depende muito dos recursos de hardware que estão alocados para a máquina.
make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-hyperv kernel_image kernel_headers
Após o último comando, basta aguardar o kernel ser compilado, e você irá encontrar dois arquivos .deb na raiz do /usr/src/. Instale estes dois pacotes conforme abaixo, e depois basta reiniciar, você já estará utilizando o novo kernel:
dpkg -i #informe os dois arquivos .deb que você criou echo -e "hv_vmbus\nhv_storvsc\nhv_blkvsc\nhv_netvsc" >> /etc/initramfs-tools/modules update-initramfs -u -k #versão kernel
Bom, é isso, agora é só aproveitar e montar seu plano de migração do VMware para Hyper-V!