This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.
Beginnend mit FreeBSD 10.0-RELEASE ist bhyve, ein BSD-lizensierter Hypervisor, Teil des Basissystems. Dieser Hypervisor unterstützt eine Reihe von Gastbetriebssystemen, darunter FreeBSD, OpenBSD und viele Linux® Distributionen. In der Voreinstellung unterstützt bhyve eine serielle Konsole, graphische Konsolen werden nicht emuliert. bhyve verwendet Offload-Funktionen von neueren CPUs, um manuelle Speicherzuordnungen und Anweisungen zu vermeiden.
Das Design von bhyve erfordert
einen Prozessor, der Intel® Extended Page Tables
(EPT), AMD® Rapid Vitualization
Indexing (RVI) oder Nested Page Tables
(NPT) unterstützt. FreeBSD- oder
Linux®-Gastsysteme mit mehr als einer vCPU
benötigen VMX unrestricted mode support
(UG). Die meisten neueren Prozessoren,
speziell Intel® Core™ i3/i5/i7 und Intel® Xeon™
E3/E5/E7, unterstützen diese Funktionen. Unterstützung für
UG wurde mit Intel's Westmere
Mikroarchitektur eingeführt. Eine vollständige Liste der
Intel®-Prozessoren mit EPT-Unterstützung
finden Sie unter https://ark.intel.com/content/www/us/en/ark/search/featurefilter.html?productType=873&0_ExtendedPageTables=True.
RVI wird seit der dritten Generation der
AMD Opteron™-Prozessoren (Barcelona) unterstützt. Um zu sehen
ob der Prozessor bhyve unterstützt,
prüfen Sie die Ausgabe von dmesg oder
/var/run/dmesg.boot. Für AMD®-Prozessoren
suchen Sie in der Zeile Features2 nach
POPCNT. Für Intel®-Prozessoren suchen Sie
in der Zeile VT-x nach EPT
und UG.
Der erste Schritt bei der Erstellung einer virtuellen Maschine in bhyve ist die Konfiguration des Host-Systems. Laden Sie zunächst das bhyve Kernelmodul:
#kldload vmm
Erstellen Sie ein tap-Gerät, um
dieses mit der Netzwerk-Schnittstelle der virtuellen Maschine
zu verbinden. Damit sich die Schnittstelle mit dem
Netzwerk verbinden kann, müssen Sie zusätzlich eine
Bridge-Schnittstelle erzeugen, bestehend aus dem
tap-Gerät und der physikalischen
Schnittstelle. In diesem Beispiel wird die physikalische
Schnittstelle igb0 verwendet:
#ifconfigtap0create#sysctl net.link.tap.up_on_open=1net.link.tap.up_on_open: 0 -> 1#ifconfigbridge0create#ifconfigbridge0addmigb0addmtap0#ifconfigbridge0up
Erzeugen Sie eine Datei, die als virtuelle Festplatte für das Gastsystem verwendet wird. Geben Sie die Größe und den Namen der virtuellen Festplatte an:
#truncate -s16Gguest.img
Laden Sie ein Installationsabbild von FreeBSD:
#fetchFreeBSD-10.3-RELEASE-amd64-bootonly.iso 100% of 230 MB 570 kBps 06m17sftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-bootonly.iso
FreeBSD enthält ein Beispielskript um eine virtuelle Maschine
in bhyve auszuführen. Das Skript
wird die virtuelle Maschine starten und sie in einer Schleife
ausführen. Sollte die virtuelle Maschine abstürzen, wird sie
vom Skript automatisch neu gestartet. Das Skript akzeptiert
einige Optionen, um die Konfiguration der virtuellen Maschine
zu kontrollieren: -c bestimmt die Anzahl der
virtuellen CPUs, -m
begrenzt den verfügbaren Speicher des Gastsystems,
-t bestimmt das verwendete
tap-Gerät, -d gibt das
zu benutzende Festplattenabbild an, -i sagt
bhyve dass es von
CD booten soll und -I
bestimmt das CD-Abbild. Der letzte
Parameter ist der Name der virtuellen Maschine. Dieses
Beispiel startet die virtuelle Maschine im
Installationsmodus:
#sh /usr/share/examples/bhyve/vmrun.sh -c1-m1024M-ttap0-dguest.img-i -IFreeBSD-10.3-RELEASE-amd64-bootonly.isoguestname
Die virtuelle Maschine wird starten und das Installationsprogramm ausführen. Nachdem das System in der virtuellen Maschine installiert ist, werden Sie gefragt, ob eine Shell gestartet werden soll. Wählen Sie .
Starten Sie die virtuelle Maschine neu. Ein Neustart der
virtuellen Maschine wird bhyve
beenden, aber da das vmrun.sh-Skript in
einer Schleife läuft, wird bhyve
automatisch neu gestartet. Wenn dies passiert, wählen Sie die
Option Reboot im Bootloader-Menü, um die
Schleife zu unterbrechen. Anschließend kann das Gastsystem
von der virtuellen Festplatte gestartet werden:
#sh /usr/share/examples/bhyve/vmrun.sh -c4-m1024M-ttap0-dguest.imgguestname
Um andere Betriebssysteme als FreeBSD zu booten, muss zunächst der Port sysutils/grub2-bhyve installiert werden.
Als nächstes erzeugen Sie eine Datei, die das Gastsystem als virtuelle Festplatte verwenden kann:
#truncate -s16Glinux.img
Der Start einer virtuellen Maschine mit
bhyve ist ein zweistufiger Prozess.
Zuerst muss ein Kernel geladen werden, dann kann das
Gastsystem gestartet werden. Der Linux®-Kernel wird mit
sysutils/grub2-bhyve geladen. Erstellen
Sie eine device.map, damit
grub die virtuellen Geräte den
Dateien auf dem Hostsystem zuordnen kann:
(hd0) ./linux.img (cd0) ./somelinux.iso
Benutzen Sie sysutils/grub2-bhyve um den Linux®-Kernel vom ISO-Abbild zu laden:
#grub-bhyve -m device.map -r cd0 -M1024Mlinuxguest
Damit wird grub gestartet.
Wenn die Installations-CD eine Datei namens
grub.cfg enthält, wird ein Menü
angezeigt. Wenn nicht, müssen die Dateien
vmlinuz und initrd
manuell geladen werden:
grub>ls(hd0) (cd0) (cd0,msdos1) (host) grub>ls (cd0)/isolinuxboot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest splash.jpg TRANS.TBL vesamenu.c32 vmlinuz grub>linux (cd0)/isolinux/vmlinuzgrub>initrd (cd0)/isolinux/initrd.imggrub>boot
Nun, da der Linux®-Kernel geladen ist, kann das Gastsystem gestartet werden:
#bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0-s 3:0,virtio-blk,./linux.img\ -s 4:0,ahci-cd,./somelinux.iso-l com1,stdio -c4-m1024Mlinuxguest
Das System wird booten und das Installtionsprogramm starten. Starten Sie die virtuelle Maschine nach der Installation des Betriebssystems neu. Dies führt auch dazu, dass bhyve beendet wird. Die Instanz der virtuellen Maschine muss zerstört werden, bevor sie erneut in Betrieb genommen werden kann:
#bhyvectl --destroy --vm=linuxguest
Nun kann das Gastsystem direkt von der virtuellen Festplatte gestartet werden. Laden Sie den Kernel:
#grub-bhyve -m device.map -r hd0,msdos1 -Mgrub>1024Mlinuxguestls(hd0) (hd0,msdos2) (hd0,msdos1) (cd0) (cd0,msdos1) (host) (lvm/VolGroup-lv_swap) (lvm/VolGroup-lv_root) grub>ls (hd0,msdos1)/lost+found/ grub/ efi/ System.map-2.6.32-431.el6.x86_64 config-2.6.32-431.el6.x 86_64 symvers-2.6.32-431.el6.x86_64.gz vmlinuz-2.6.32-431.el6.x86_64 initramfs-2.6.32-431.el6.x86_64.img grub>linux (hd0,msdos1)/vmlinuz-2.6.32-431.el6.x86_64 root=/dev/mapper/VolGroup-lv_rootgrub>initrd (hd0,msdos1)/initramfs-2.6.32-431.el6.x86_64.imggrub>boot
Starten Sie die virtuelle Maschine:
#bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0\$ -s 3:0,virtio-blk,./linux.img-l com1,stdio -c4-m1024Mlinuxguest
Linux® wird jetzt in der virtuellen Maschine gestartet und präsentiert Ihnen vielleicht einen Anmeldeprompt. Sie können sich anmelden und die virtuelle Maschine benutzen. Wenn Sie fertig sind, starten Sie die virtuelle Maschine neu, um bhyve zu verlassen. Anschließend zerstören Sie die Instanz der virtuellen Maschine:
#bhyvectl --destroy --vm=linuxguest
Neben bhyveload und grub-bhyve kann der bhyve Hypervisor virtuelle Maschinen auch über die UEFI-Userspace-Firmware booten. Mit dieser Option werden Gastsysteme unterstützt, die von anderen Bootloadern nicht unterstützt werden.
Um die UEFI-Unterstützung in bhyve nutzen zu können, benötigen Sie zuerst die Abbilder der UEFI-Firmware. Dazu können Sie den Port oder das Paket sysutils/bhyve-firmware installieren.
Mit der Firmware an Ort und Stelle, fügen Sie die Option
-l bootrom,
zur bhyve-Befehlszeile hinzu. Der
eigentliche bhyve-Befehl könnte wie
folgt lauten:/pfad/zur/firmware
#bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \ -s 2:0,virtio-net,tap1-s 3:0,virtio-blk,./disk.img\ -s 4:0,ahci-cd,./install.iso-c4-m1024M\ -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd\guest
sysutils/bhyve-firmware enthält auch eine CSM-fähige Firmware, um Gastsysteme ohne UEFI-Unterstützung im alten BIOS-Modus zu booten:
#bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \ -s 2:0,virtio-net,tap1-s 3:0,virtio-blk,./disk.img\ -s 4:0,ahci-cd,./install.iso-c4-m1024M\ -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI_CSM.fd\guest
Die Unterstützung von UEFI-Firmware ist bei graphischen Betriebssystemen, wie Microsoft Windows®, besonders nützlich.
Unterstützung für den UEFI-GOP Framebuffer kann auch über
die Option
-s 29,fbuf,tcp=
aktiviert werden. Die Framebuffer-Auflösung kann mit
0.0.0.0:5900w= und
800h= konfiguriert
werden. Mit der Option 600wait können Sie
bhyve anweisen, auf eine
VNC-Verbindung zu warten, bevor das
Gastsystem gebootet wird. Vom Host oder aus dem Netzwerk kann
über das VNC-Protokoll auf den Framebuffer
zugegriffen werden. Zusätzlich kann
-s 30,xhci,tablet hinzugefügt werden, um eine
präzise Mauszeigersynchronisation mit dem Host zu
gewährleisten.
Der daraus resultierende Befehl würde so aussehen:
#bhyve -AHP -s 0:0,hostbridge -s 31:0,lpc \ -s 2:0,virtio-net,tap1-s 3:0,virtio-blk,./disk.img\ -s 4:0,ahci-cd,./install.iso-c4-m1024M\ -s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \ -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd\ -s 30,xhci,tablet \guest
Beachten Sie, dass der Framebuffer im BIOS-Modus keine Befehle mehr empfängt, sobald die Steuerung von der Firmware an das Gastsystem übergeben wird.
Wenn auf dem Host-Rechner ZFS eingerichtet ist, können Sie ZFS-Volumes anstelle eines Festplattenabbilds verwenden. Dies kann erhebliche Leistungsvorteile für das Gastsystem mit sich bringen. Ein ZFS-Volume kann wie folgt erstellt werden:
#zfs create -V16G-o volmode=devzroot/linuxdisk0
Geben Sie das ZFS-Volume beim Start der virtuellen Maschine an:
#bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0-s3:0,virtio-blk,/dev/zvol/zroot/linuxdisk0\ -l com1,stdio-c4-m1024Mlinuxguest
Es ist vorteilhaft, die
bhyve-Konsole mit einem Werkzeug
wie sysutils/tmux oder
sysutils/screen zu bedienen. Damit ist es
leicht, die Konsole zu verbinden oder zu trennen. Es ist auch
möglich, die Konsole als Nullmodem-Gerät zu nutzen, auf das
Sie mit cu zugreifen können. Laden Sie
dazu das nmdm Kernelmodul und ersetzen
Sie -l com1,stdio mit -l
com1,/dev/nmdm0A. Die
/dev/nmdm-Geräte werden bei Bedarf
automatisch erstellt, jeweils paarweise, entsprechend den
beiden Enden eines Nullmodemkabels
(/dev/nmdm0A und
/dev/nmdm0B). Weitere Informationen
finden Sie in nmdm(4).
#kldload nmdm#bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0-s 3:0,virtio-blk,./linux.img\ -l com1,/dev/nmdm0A-c4-m1024Mlinuxguest#cu -lConnected Ubuntu 13.10 handbook ttyS0 handbook login:/dev/nmdm0B
Für jede virtuelle Maschine wird unterhalb von
/dev/vmm ein Gerätename erzeugt.
Dadurch kann der Administrator einfach feststellen, welche
virtuellen Maschinen zur Zeit ausgeführt werden:
#ls -al /dev/vmmtotal 1 dr-xr-xr-x 2 root wheel 512 Mar 17 12:19 ./ dr-xr-xr-x 14 root wheel 512 Mar 17 06:38 ../ crw------- 1 root wheel 0x1a2 Mar 17 12:20 guestname crw------- 1 root wheel 0x19f Mar 17 12:19 linuxguest crw------- 1 root wheel 0x1a1 Mar 17 12:19 otherguest
Mit Hilfe von bhyvectl kann eine
virtuelle Maschine zerstört werden:
#bhyvectl --destroy --vm=guestname
Um das System so zu konfigurieren, dass bhyve-Gastsysteme beim Booten gestartet werden, müssen die folgenden Konfigurationen in den jeweiligen Dateien vorgenommen werden:
/etc/sysctl.conf
net.link.tap.up_on_open=1
/etc/rc.conf
cloned_interfaces="bridge0tap0" ifconfig_bridge0="addmigb0addmtap0" kld_list="vmm nmdm"
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.