Ubuntu Server 10.4 dans Hyper-V avec les drivers Hyper-V

Mise à jour octobre 2013 : les choses ont bien changé depuis cet article de 2010. Les drivers Hyper-V sont maintenant activés par défaut dans la plupart des distributions Linux et aucune manipulation n'est maintenant nécessaire. Plus d'information dans cet article.


En juillet dernier, Microsoft annonçait la mise à disposition du code source des drivers pour Linux dans l’environnement de virtualisation Hyper-V. Dans la pratique, la version 2.6.32 du noyau Linux contient maintenant les drivers pour les composants synthétiques d’une machine virtuelle Hyper-V, à savoir le VMBus, le stockage, et le réseau. Dans le détail, il s’agit des modules hv_vmbus, hv_storvsc, hv_blkvsc et hv_netvsc : ces modules sont décrits dans cet article.

Afin de sortir des configurations “supportées officiellement”, j’ai testé l’activation de ces modules dans le nouvel Ubuntu Server 10.4, fourni récemment avec le noyau 2.6.32. Pour cela j’ai trouvé cet article qui explique comment activer ces modules, et dont je m’inspire donc largement.

Activation des modules

Dans un premier temps il faut faire en sorte que les modules Hyper-V soient chargés au démarrage. Pour ce faire, modifier le fichier /etc/initramfs-tools/modules et ajouter les 4 lignes suivantes :

hv_vmbus
hv_storvsc
hv_blkvsc
hv_netvsc

Puis, mettre à jour l’image initramfs :

$ sudo update-initramfs –u

Enfin, configurer le réseau en modifiant le fichier /etc/network/interfaces de façon à configurer l’interface réseau nommée seth0. En effet, une carte réseau synthétique s’appellera sethn, au lieu de ethn pour la carte réseau “legacy”.

Par exemple pour une configuration DHCP, ajouter ceci dans /etc/network/interfaces :

auto seth0
iface seth0 inet dhcp

ou, pour une adresse IP statique :

auto seth0
iface seth0 inet static
address adresse_ip
netmask masque
gateway adresse_passerelle

Il ne reste plus qu’à redémarrer, et à vérifier le bon chargement des drivers à l’aide de la commande :

$ lsmod | grep hv_

Test de la procédure

Pour mon test, j’ai utilisé Hyper-V de Windows Server 2008 R2, et Ubuntu Server 10.4 32 bits (ubuntu-10.04-server-i386.iso).

Etant donné que j’ai configuré la VM avec une carte réseau synthétique, celle-ci n’est pas détectée lors de l’installation. Ce n’est pas grave, elle le sera lorsque l’on aura effectué les étapes décrites précédemment après l’installation.

Erreur : aucune carte réseau détectée
Sur ce message d’erreur, choisir <Continue>.

Une fois la machine virtuelle installée et démarrée, les étapes décrites ci-dessus sont assez simples à mettre en œuvre :

initramfs

interfaces

Après un redémarrage (sudo reboot), nous avons bien le réseau actif sur la carte synthétique seth0, ainsi que les autres drivers chargés :

Réseau et drivers Hyper-V

Voilà de quoi exécuter des serveurs Linux sous Hyper-V avec des performances correctes. Reste à attendre l’intégration dans le noyau Linux des prochaines fonctionnalités (multi processeurs, synchronisation d’horloge et arrêt intégré) –ces fonctionnalités sont pour l’instant disponibles dans la beta des services d’intégration 2.1, pour SUSE Linux Enterprise Server et Red Hat Enterprise Linux.