(Logiciel informatique) FreeBSD hyperviseur
BHyve est l'hyperviseur BSD de type 2 disponible depuis la version 10 de FreeBSD (ou FreeNAS 9.10). Il accepte divers systèmes invités, tels que : FreeBSD, NetBSD, OpenBSD, Debian, Ubuntu ou encore Microsoft Windows 10. En outre, il tire parti des systèmes de fichiers ZFS. Au moins deux gestionnaires de machines virtuelles (en ligne de commandes) existent pour BHyve : BMT et iohyve.
Note : pour pouvoir fonctionner, BHyve requiert un processeur supportant une ou plusieurs des technologies suivantes :
Intel® Extended Page Tables (EPT) ou AMD® Rapid Virtualization Indexing (RVI) ou Nested Page Tables (NPT). Les systèmes invités Linux® ou FreeBSD avec plus d'un vCPU requièrent en outre le support de VMX en mode non restreint (UG). (source : [1])
En premier lieu, il faut installer les paquets requis :
pkg inst iohyve qemu-devel grub2-bhyve
(notes : qemu-devel a été remplacé par qemu-tools ; le dernier paquet n'est plus maintenu : il est utilisé pour le démarrage des systèmes invités GNU/Linux)
Stopper la VM existante dans Virtualbox (si elle est lancée), puis convertir son image disque (depuis le format Virtualbox .vdi vers le format brut img) :
qemu-img convert -f vdi -O raw /path/to/virtualbox-disk-image.vdi /path/to/raw-image.img
Si la VM utilise plutôt un disque au format .vhd, vous pouvez le convertir en .vdi auparavant directement avec l'outil VBoxManage de VirtualBox :
VBoxManage clonehd /path/to/virtualbox-disk-image.vhd /path/to/virtualbox-disk-image.vdi --format vdi
Relever la taille exacte du fichier image obtenu, par exemple avec :
ls -al /path/to/raw-image.img
(ex. : 536870912000 pour 500 Go)
Configurer BHyve à l'aide du gestionnaire iohyve :
la commande suivante définit en une ligne le pool de stockage des VMs (un zvol iohyve y sera créé), le chargement automatique des modules requis (vmm) et l'interface réseau qui sera pontée (ici l'agrégat de liens lagg0) pour communiquer avec la VM (par défaut, un pont nommé bridge0 sera créé)
iohyve setup pool=DATA kmod=1 net=lagg0
Créer puis configurer la nouvelle VM BHyve à l'aide du gestionnaire iohyve :
iohyve create leng 536870912000
(où 536870912000 est la taille exacte de l'image disque convertie qui a été précédemment relevée et sera la taille du disque de la VM leng...)
iohyve set leng ram=4GB cpu=1 loader=grub-bhyve os=d8lvm
(...destinée à un OS Linux de type Debian/Ubuntu pourvu de 4 Go de RAM et d'un CPU/core avec un système de fichiers utilisant LVM. Voici les types d'os supportés: openbsd57, openbsd58, openbsd59, openbsd60, openbsd61, netbsd, debian (sans LVM), d8lvm (avec LVM), centos6, centos7 (sans XFS), ubuntu (avec LVM, sinon debian), arch, et custom (non standard). Notez qu'il est inutile de préciser un chargeur (loader) ou un os si l'invité est un système FreeBSD.)
Copier l'image disque précédemment convertie vers le disque de la VM bhyve :
dd if=/path/to/raw-image.img of=/dev/zvol/DATA/iohyve/leng/disk0
(le pool utilisé pour stocker les VMs est ici DATA et le nom de la VM nouvellement créée dans BHyve est leng)
Lister les VMs disponibles avec leur état :
iohyve list
Lancer la VM :
iohyve start leng
Pour activer la configuration au démarrage du système, il suffit pour terminer d'ajouter les lignes suivantes à /etc/rc.conf :
iohyve_enable="YES"
iohyve_flags="kmod=1 net=lagg0"
Si la VM ne démarre pas, votre schéma de partitions peut être incorrect et/ou poser problème à iohyve.
Pour s'y connecter en console :
iohyve console leng
Dans la console grub, pour lister les partitions :
ls
Selon la syntaxe grub, hd0,1 signifie disque #1, partition #1, équivalent, par exemple, à (hd0,msdos1).
Pour lister le contenu de la partition :
ls (hd0,1)/
Identifiez ainsi votre partition racine, contenant les entrées '/root', '/sbin'... : par exemple, hd0,1.
Puis, si elle diffère, identifiez la partition qui contient les fichiers du noyau (vmlinuz*, initrd*) : par exemple, hd0,2 si /boot est une partition dédiée.
Contrôlez que le système invité démarre bien avec ces informations, en saisissant (encore dans la console grub) :
(Adaptez si nécessaire à votre schéma de partitions)
Une fois le système invité démarré, par précaution, mettez à jour la configuration de grub :
sudo update-grub
Si vous redémarrez la machine virtuelle, cependant, le problème va se reproduire, car le fichier de configuration grub de l'invité n'est pas lu par BHyve/iohyve
Pour y remédier, vous devez créer un fichier grub.cfg
spécialement pour BHyve, qui doit être placé directement à la racine de la VM (là où se trouve son fichier device.map
). Dans notre exemple :
vim /iohyve/leng/grub.cfg
Ce fichier contiendra :
timeout=30
menuentry 'leng (bhyve)' {
root=hd0,2
linux /vmlinuz-4.4.0-131-generic root=/dev/sda1
initrd /initrd.img-4.4.0-131-generic
}
Notez que les chemins de vmlinuz* et initrd* sont ici relatifs à la racine de hd0,2 (la partition /boot) :
/vmlinuz-4.4.0-131-generic correspond donc bien à /boot/vmlinuz-4.4.0-131-generic sur le système invité
et /initrd.img-4.4.0-131-generic à /boot/initrd.img-4.4.0-131-generic
En outre, le paramètre root=/dev/sda1 indique au système invité que la partition racine se trouve quant à elle sur /dev/sda1 (soit sur la partition #1 du disque #1)
Cela doit correspondre à ce qui a été précédemment relevé ainsi qu'aux informations qui figurent désormais dans le fichier /boot/grub/menu.lst
du système invité.
Enfin, pour que le fichier créé soit bien pris en compte par iohyve, il faut veiller à indiquer que le type de système invité est « sur mesure » :
iohyve set os=custom
Pour relancer la VM bloquée sur la console de grub :
iohyve forcekill leng
iohyve start leng
Installation et configuration (FreeBSD Handbook) : https://www.freebsd.org/doc/handbook/virtualization-host-bhyve.html
Ms Windows 10 comme système invité : https://www.ateamsystems.com/tech-blog/howto-windows-10-bhyve-w-freebsd-11/
iohyve - FreeBSD bhyve manager utilizing ZFS: https://github.com/pr1ntf/iohyve
BMT - BHyve Management tool sur Github (a-team systems) : https://github.com/ateamsystems/bmt
FreeNAS - Migrating from Virtualbox to BHyve : https://mikusa.blogspot.com/2017/01/freenas-migrating-from-virtualbox-to.html
et https://blog.yuo.be/2017/01/04/migrating-a-vm-from-virtualbox-to-iohyve-bhyve-on-freenas-9-10/
Grub et iohyve : http://kflu.github.io/2020/04/08/2020-04-08-freebsd-bhyve/ ; https://www.truenas.com/community/threads/iohyve-bhyve-setup-questions-regarding-ubuntu-and-arch-vms.49343/
BHyve, UEFI and Grub : https://www.davidschlachter.com/misc/freebsd-bhyve-uefi-shell
Ce document a été publié le 2019-07-30 23:26:10. (Dernière mise à jour : 2024-06-18 14:33:39.)