Installation des IC sur une VM HyperV Linux
Introduction
Les IC (Integration components) sont un ensemble de services qui améliore l’intégration entre une VM et son hôte Hyper V.
Dans le cas d'une VM Linux (ici Debian), le plus simple est d'installer un kernel les incluant. Cela est même obligatoire dans certaines situations.
Cette procédure servira donc par exemple dans le cas d'une VM Debian devant être migrée d'un hôte Hyper-V 2008 vers un hôte Hyper V 2012, pour laquelle l'installation d'un noyau supérieur à la version 2.6 (ici 3.2.0-0.bpo) est préalablement nécessaire.
/!\ Avant toute chose, l'opération n'étant pas sans risque, il est nécessaire de s'assurer posséder une sauvegarde à jour de sa VM, et/ou d'en réaliser un snapshot : Faire un snapshot /!\
Ikoula ne pourra être tenu responsable en cas de mauvaise manipulation.
Pré-requis
Afin de savoir quel kernel doit être installé, il est nécessaire de connaître au préalable :
- la version de son OS (Debian ou CentOS)
- son architecture (32 ou 64 bits)
Pour déterminer la version de l'OS, la commande est la suivante :
cat /etc/issue
Exemples de résultat :
root@test:~$ cat /etc/issue Debian GNU/Linux 6.0 \n \l
root@test:~$ cat /etc/issue CentOS release 6.3 (Final)
Dans le premier cas il s'agit donc d'un Debian (en version 6) et dans le second d'un CentOS (en version 6.3)
Pour déterminer son architecture, la commande est la suivante :
uname -m
Exemples de résultat :
root@test:~$ uname -m i686
root@test:~$ uname -m x86_64
Dans le premier cas il s'agit donc d'une architecture 32 bits et dans le second d'une 64 bits.
Installation
Debian
On commence par la récupération des paquets non-spécifiques à une architecture en particulier :
wget -r -nd -A "*.deb" --no-parent ftp://ftp.ikoula.com/pub/hyperv/debian/all
Puis, les paquets soumis à l'architecture :
Pour un OS 32 bits :
wget -r -nd -A "*.deb" --no-parent ftp://ftp.ikoula.com/pub/hyperv/debian/i386
ou
Pour un OS 64 bits :
wget -r -nd -A "*.deb" --no-parent ftp://ftp.ikoula.com/pub/hyperv/debian/amd64
Après quoi on installe les paquets via les commandes suivantes :
export DEBIAN_FRONTEND=noninteractive ; export APT_LISTCHANGES_FRONTEND=none ; /usr/bin/dpkg -i --force-confdef --force-confold *.deb
Puis on régénère le grub et l'initramfs :
/usr/sbin/update-grub
/usr/sbin/update-initramfs -utk all
Pour plus de propreté, on peut aussi ajouter les dépôts backports (pour profiter des updates des paquets installés) au sources.list :
echo "#Squeeze Backports
deb http://ftp.debian.ikoula.com/debian-backports squeeze-backports main contrib non-free" >> /etc/apt/sources.list
CentOS
Sous CentOS, la procédure diffère : on n'installe pas un nouveau kernel, on utilise les RPMs fournis par Microsoft pour compiler les modules Hyper V sur le kernel existant.
On commence par la récupération des paquets spécifiques à l'architecture courante :
Pour un OS 32 bits :
wget -r -nd -A "*.rpm" --no-parent ftp://ftp.ikoula.com/pub/hyperv/centos/i686/
ou
Pour un OS 64 bits :
wget -r -nd -A "*.rpm" --no-parent ftp://ftp.ikoula.com/pub/hyperv/centos/x86_64/
Après quoi on installe les paquets via la commande suivante :
/bin/rpm -ivh *.rpm
On previent toute update de paquet kernel qui retirerait les IC en blacklistant les paquets dont le nom contient 'kernel' :
sed -i -e 's/RPM-GPG-KEY-CentOS-6/RPM-GPG-KEY-CentOS-6\nexclude="*kernel*"/g' /etc/yum.repos.d/CentOS-Base.repo
Puis on régénère l'initramfs :
INITRAMFS_FILES=`ls /boot | grep initramfs`
for INITRAMFS in $INITRAMFS_FILES ; do
KERNEL_VERSION=${INITRAMFS/#initramfs-/}
KERNEL_VERSION=${KERNEL_VERSION/%.img/}
/sbin/dracut --force /boot/${INITRAMFS} ${KERNEL_VERSION}
done
Configuration post-installation et activation des IC
Explications
Le module ata_piix (kernel par défaut) détecte les disques en sd (sda, sdb,...), les IC ancienne génération (kernel ikhpv) détectaient les disques en hd (hda, hdb,...).
Les nouveaux IC (kernels de distribution [ou backportés] récents) détectent, quant à eux, correctement les disques en sd (sda, sdb, ...).
En résumé :
- Si vous venez d'une version ancienne des IC (kernel ikhpv), vous devez modifier fstab et grub en sd.
- Si vous venez d'une distribution sans IC, les disques ont sûrement été reconnus en sd mais il vaut mieux contrôler les fichiers fstab/grub.
Fichier fstab
Le fichier /etc/fstab doit donc ressembler à ça :
root@test:~$ cat /etc/fstab [...] /dev/sda1 /boot ext2 defaults 0 0 /dev/sda2 none swap sw 0 0 /dev/sda3 / ext3 defaults 0 0 [...]
Si les partitions sont notées en hdX, il faut éditer le fichier afin de corriger par sdX.
Désactivation ata_piix
On désactive le module ata_piix pour que les disques soient uniquement détectés par les modules HPV (IC) :
echo "# Blacklist ata_piix for HyperV" >> /etc/modprobe.d/blacklist.conf
echo "blacklist ata_piix" >> /etc/modprobe.d/blacklist.conf
Activation des modules au démarrage
On active maintenant les modules HPV au démarrage de l'OS. Pour cela dans les fichiers /etc/modules et /etc/modules.conf nous ajoutons les modules hv_ (Hyper-V) :
echo "hv_vmbus
hv_storvsc
hv_blkvsc
hv_utils
hv_mouse" >> /etc/modules >> /etc/modules.conf
Configuration du grub
Debian
Pour que le kernel ajouté soit directement configuré dans le menu.lst, le plus simple est de faire un update-grub, ainsi les couples kernels/initramfs disponibles serons listés et configurés dans le menu.lst :
/usr/sbin/update-grub
La fin du fichier /boot/grub/menu.lst doit donc maintenant ressembler à ça :
root@test:~$ cat /boot/grub/menu.lst [...] # kopt=root=/dev/sda3 ro [...] title Debian GNU/Linux, kernel 3.2.0-0.bpo.4-amd64 root (hd0,0) kernel /vmlinuz-3.2.0-0.bpo.4-amd64 root=/dev/sda3 ro initrd /initrd.img-3.2.0-0.bpo.4-amd64 title Debian GNU/Linux, kernel 3.2.0-0.bpo.4-amd64 (single-user mode) root (hd0,0) kernel /vmlinuz-3.2.0-0.bpo.4-amd64 root=/dev/sda3 ro single initrd /initrd.img-3.2.0-0.bpo.4-amd64 [...]
Si les partitions sont toujours notées en hdX, il faut éditer le fichier afin de corriger par sdX.
CentOS
L'ajout/correction doit se faire à la main. Vous devez éditer le fichier afin de remplacer les hdX par sdX.
La fin du fichier /boot/grub/menu.lst doit ressembler à ça :
[...] #boot=/dev/sda [...] title CentOS (2.6.32-<version>.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-<version>.el6.x86_64 ro root=/dev/sda3 initrd /initramfs-2.6.32-<version>.el6.x86_64.img title CentOS Linux (2.6.32-<version>.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-<version>.el6.x86_64 ro root=/dev/sda3 initrd /initramfs-2.6.32-<version>.el6.x86_64.img [...]
Reboot
Il faut redémarrer le serveur pour que les modifications soient prises en compte :
reboot
Au reboot on peut vérifier que les modules sont correctement chargés :
lsmod | grep hv_
Puis on peut pour Debian vérifier la version du kernel :
uname -r
Par exemple :
root@test:~$ uname -r 3.2.0-0.bpo.4-amd64
Cet article vous a semblé utile ?
Activer l'actualisation automatique des commentaires