Update to r50292:

Add a new section about Xen to the virtualization chapter.
It is based on the entries in the FreeBSD Wiki andi Xen's
own instructions specific to FreeBSD.

In particular, it describes how to configure the host machine,
set up the Dom0, and add a DomU VM afterwards.

Reviewed by:	bcr
Differential Revision:	https://reviews.freebsd.org/D11276
This commit is contained in:
Bjoern Heidotting 2017-06-23 17:02:58 +00:00
parent 64f092ccd1
commit af80308bff
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=50398

View file

@ -5,7 +5,7 @@
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/virtualization/chapter.xml,v 1.14 2010/07/03 14:29:30 jkois Exp $
basiert auf: r50094
basiert auf: r50292
-->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
@ -32,6 +32,15 @@
<contrib>bhyve Abschnitt beigetragen von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<personname>
<firstname>Benedict</firstname>
<surname>Reuschling</surname>
</personname>
<contrib>Xen Abschnitt beigetragen von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<personname>
@ -40,6 +49,12 @@
</personname>
<contrib>Übersetzt von </contrib>
</author>
<author>
<personname>
<firstname>Björn</firstname>
<surname>Heidotting</surname>
</personname>
</author>
</authorgroup>
</info>
@ -1475,19 +1490,356 @@ ifconfig_bridge0="addm <replaceable>igb0</replaceable> addm <replaceable>tap0</r
</step>
</procedure>
</sect2>
</sect1>
<!--
Note: There is no working/end-user ready Xen support for FreeBSD as of 07-2010.
Hide all information regarding Xen under FreeBSD.
<sect1 xml:id="virtualization-host-xen">
<title>&os; als &xen;-Host</title>
<sect2 id="virtualization-other">
<title>Andere Virtualisierungsmöglichkeiten</title>
<para><application>Xen</application> ist ein
GPLv2-lizensierter <link
xlink:href="https://de.wikipedia.org/wiki/Hypervisor#Klassifizierung">
Typ-1-Hypervisor</link> für &intel; und &arm;
Architekturen. Seit &os;&nbsp;8.0 gibt es Unterstützung für
&i386; und &amd;&nbsp;64-Bit <link
xlink:href="https://wiki.xenproject.org/wiki/DomU">DomU</link>
sowie <link
xlink:href="https://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud">Amazon
EC2</link> unpriviligierte Domänen (virtuelle Maschinen).
Dom0 priviligierte Domänen (Host) wird seit &os;&nbsp;11.0
unterstützt. Aus Performancegründen wurde in &os;&nbsp;11 die
Unterstützung für paravirtualisierte Domänen (PV) zugunsten von
Hardware virtualisierten Domänen (HVM) entfernt.</para>
<para>Zusätzlich wird
daran gearbeitet, <application>&xen;</application> als
funktionierende Host-Umgebung (dom0) für &os;
verfügbar zu machen.</para>
<para>&xen; ist ein Bare-Metal-Hypervisor, was bedeutet, dass es
das erste Programm ist, welches nach dem <acronym>BIOS</acronym>
geladen wird. Anschließend wird ein spezieller priviligierter
Gast namens Domain-0 (kurz <literal>Dom0</literal>) gestartet.
Dom0 nutzt seine speziellen Privilegien, um direkt auf die
zugrunde liegende Hardware zuzugreifen, was es zu einer sehr
leistungsstarken Lösung macht. Es ist in der Lage, direkt auf
Festplattencontroller und Netzwerkadapter zuzugreifen. Die
&xen; Werkzeuge zum Verwalten und Steuern des &xen; Hypervisors
werden auch von Dom0 zum Erstellen, Auflisten und Zerstören von
VMs verwendet. Dom0 stellt virtuelle Festplatten und
Netzwerkfunktionalität für unpriviligierte Domänen bereit, die
oft als DomU bezeichnet werden. Dom0 kann mit der
Servicekonsole anderer Hypervisor verglichen werden, wohingegen
DomU die einzelnen Gast-VMs ausführt.</para>
<para>&xen; kann VMs zwischen verschiedenen &xen; Servern
migrieren. Wenn beide Xen-Hosts denselben zugrundeliegenden
Speicher teilen, kann die Migration durchgeführt werden, ohne
dass die VM zuerst heruntergefahren werden muss. Stattdessen
wird die Migration live durchgeführt, während die DomU läuft.
Sie brauchen daher keinen Neustart oder Ausfallzeit einplanen.
Dies ist bei Wartungsarbeiten und Upgrade-Fenstern sinnvoll, um
sicherzustellen, dass die von der DomU bereitgestellten Dienste
weiterhin zur Verfügung stehen. Viele weitere Funktionen von
&xen; finden Sie im <link
xlink:href="https://wiki.xenproject.org/wiki/Category:Overview">
Xen Wiki</link>. Sie sollten jedoch beachten, dass derzeit
noch nicht alle Funktionen von &os; unterstützt werden.</para>
<sect2 xml:id="virtualization-host-xen-requirements">
<title>Hardwareanforderungen für &xen; Dom0</title>
<para>Um den &xen; Hypervisor auf einem Host auszuführen, ist
eine bestimmte Hardwarefunktionalität erforderlich.
Hardware-virtualisierte Domänen benötigen Unterstützung für
Extended Page Table (<link
xlink:href="https://de.wikipedia.org/wiki/Extended_Page_Table">
EPT</link>) und Input/Output Memory Management Unit
(<link xlink:href="https://de.wikipedia.org/wiki/IOMMU">IOMMU</link>)
im Host-Prozessor.</para>
</sect2>
<sect2 xml:id="virtualization-host-xen-dom0-setup">
<title>&xen; Dom0 Control Domain Konfiguration</title>
<para>Das Paket <package>emulators/xen</package> verwendet
binäre Schnappschüsse von &os;&nbsp;11 amd64 oder
äquivalenten, aus den Quellen übersetzte Systeme. Für dieses
Beispiel benötigen die nichtpriviligierten Domänen eine
VNC-Ausgabe, auf die Sie von einem anderen System aus, mit
einem Werkzeug wie <package>net/tightvnc</package>, zugreifen
können.</para>
<para>Installieren Sie <package>emulators/xen</package>:</para>
<screen>&prompt.root; <userinput>pkg install xen</userinput></screen>
<para>Die Konfigurationsdateien müssen angepasst werden, um den
Host für die Integration von Dom0 vorzubereiten. Ein Eintrag
in <filename>/etc/sysctl.conf</filename> deaktiviert die
Begrenzung für Speicherseiten. Andernfalls lassen sich DomU
VMs mit höheren Speicheranforderungen nicht ausführen.</para>
<screen>&prompt.root; <userinput>sysrc -f /etc/sysctl.conf vm.max_wired=-1</userinput></screen>
<para>Für eine andere speicherbezogene Einstellung muss in
<filename>/etc/login.conf</filename> die Option
<literal>memorylocked</literal> auf
<literal>unlimited</literal> gesetzt werden. Ansonsten kann
das Erstellen von DomU-Domänen mit der Meldung
<errorname>Cannot allocate memory</errorname> fehlschlagen.
Nachdem Sie die Änderung in
<filename>/etc/login.conf</filename> gemacht haben, müssen Sie
<command>cap_mkdb</command> ausführen um die Datenbank zu
aktualisieren. <xref linkend="security-resourcelimits"/>
enthält hierzu ausführliche Informationen.</para>
<screen>&prompt.root; <userinput>sed -i '' -e 's/memorylocked=64K/memorylocked=unlimited/' /etc/login.conf</userinput>
&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen>
<para>Fügen Sie einen Eintrag für die &xen; Konsole in
<filename>/etc/ttys</filename> ein:</para>
<screen>&prompt.root; <userinput>echo 'xc0 "usr/libexec/getty Pc" xterm on secure' >> /etc/ttys</userinput></screen>
<para>Dom0 wird durch die Auswahl eines &xen;-Kernels in
<filename>/boot/loader.conf</filename> aktiviert. &xen;
benötigt von dem Hostsystem auch Ressourcen wie CPU und
Speicher, sowohl für sich selbst als auch für andere
DomU Domains. Wie viele Ressourcen benötigt werden, hängt
von den individuellen Anforderungen und der eingesetzten
Hardware ab. In diesem Beispiel werden der Dom0 8&nbsp;GB
Speicher und 4 virtuelle CPUs zur Verfügung gestellt. Die
serielle Konsole und Protokollierung wird ebenfalls
aktiviert:</para>
<screen>&prompt.root; <userinput>sysrc -f /boot/loader.conf hw.pci.mcfg=0</userinput>
&prompt.root; <userinput>sysrc -f /boot/loader.conf xen_kernel="/boot/xen"</userinput>
&prompt.root; <userinput>sysrc -f /boot/loader.conf xen_cmdline="dom0_mem=8192M dom0_max_vcpus=4 dom0pvh=1 console=com1,vga com1=115200,8n1 guest_loglvl=all loglvl=all"</userinput></screen>
<para>Protokolldateien, die &xen; für die Dom0- und DomU-VMs
erstellt, werden in <filename>/var/log/xen</filename>
gespeichert. Dieses Verzeichnis ist standardmäßig nicht
vorhanden und muss erstellt werden.</para>
<screen>&prompt.root; <userinput>mkdir /var/log/xen</userinput>
&prompt.root; <userinput>chmod 644 /var/log/xen</userinput></screen>
<para>&xen; bietet ein Bootmenü zur Aktivierung und
Deaktivierung des Hypervisors in
<filename>/boot/menu.rc.local</filename>:</para>
<screen>&prompt.root; <userinput>echo "try-include /boot/xen.4th" >> /boot/menu.rc.local</userinput></screen>
<para>Aktivieren Sie den xencommons Dienst während des
Systemstarts:</para>
<screen>&prompt.root; <userinput>sysrc xencommons_enable=yes</userinput></screen>
<para>Diese Einstellungen reichen zwar aus, um ein Dom0-fähiges
System zu starten, allerdings fehlt es dann an
Netzwerkfunktionalität für die DomU-Rechner. Um dies zu
beheben, können Sie eine Netzwerkbrücke über die
Netzwerkschnittstelle des Hosts herstellen, die die DomU-VMs
für die Verbindung zum Netzwerk benutzen können. Ersetzen Sie
<replaceable>igb0</replaceable> durch den Namen der
Netzwerkschnittstelle des Hosts.</para>
<screen>&prompt.root; <userinput>sysrc autobridge_interfaces=bridge0</userinput>
&prompt.root; <userinput>sysrc autobridge_bridge0=<replaceable>igb0</replaceable></userinput>
&prompt.root; <userinput>sysrc ifconfig_bridge0=SYNCDHCP</userinput></screen>
<para>Starten Sie den Host neu, um den &xen;-Kernel zu laden und
den Dom0 zu starten.</para>
<screen>&prompt.root; <userinput>reboot</userinput></screen>
<para>Nach dem erfolgreichen Booten des &xen;-Kernels und der
Anmeldung am System wird das &xen;-Werkzeug
<command>xl</command> verwendet, um Informationen über die
Domänen anzuzeigen.</para>
<screen>&prompt.root; <userinput>xl list</userinput>
Name ID Mem VCPUs State Time(s)
Domain-0 0 8192 4 r----- 962.0</screen>
<para>Die Ausgabe bestätigt, dass der Dom0 (auch Domain-0
genannt) die ID <literal>0</literal> hat und ausgeführt wird.
Der vorher in <filename>/boot/loader.conf</filename>
definierte Speicher und die virtuellen CPUs sind ebenfalls
vorhanden. Weitere Informationen finden Sie in der <link
xlink:href="https://www.xenproject.org/help/documentation.html">
&xen; Dokumentation</link>. Jetzt können DomU Gast-VMs
erstellt werden.</para>
</sect2>
<sect2 xml:id="virtualization-host-xen-domu-setup">
<title>&xen; DomU Gast-VM Konfiguration</title>
<para>Unpriviligierte Domänen bestehen aus einer
Konfigurationsdatei und virtuellen oder physikalischen
Festplatten. Der virtuelle Plattenspeicher für die DomU kann
aus Dateien bestehen, die mit &man.truncate.1; erstellt
wurden, oder ZFS Volumes wie in <xref
linkend="zfs-zfs-volume"/> beschrieben. In diesem Beispiel
wird ein 20&nbsp;GB Volume verwendet. Eine VM wird mit dem
ZFS Volume erstellt, ein &os; ISO-Abbild, 1&nbsp;GB RAM und
zwei virtuelle CPUs. Das ISO-Abbild mit den
Installationsdateien wird mit &man.fetch.1; heruntergeladen
und lokal in der Datei <filename>freebsd.iso</filename>
gespeichert.</para>
<screen>&prompt.root; <userinput>fetch <replaceable>ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-bootonly.iso</replaceable> -o <replaceable>freebsd.iso</replaceable></userinput></screen>
<para>Ein ZFS Volume von 20&nbsp;GB namens
<filename>xendisk0</filename> wird erstellt und dient der VM
als Festplatte.</para>
<screen>&prompt.root; <userinput>zfs create -V20G -o volmode=dev zroot/xendisk0</userinput></screen>
<para>Die neue DomU Gast-VM wird in einer Datei definiert.
Einige spezifische Einstellungen wie Name, Tastaturbelegung
und VNC-Verbindungsdetails werden ebenfalls konfiguriert.
Für dieses Beispiel enthält die folgende
<filename>freebsd.cfg</filename> eine minimale
DomU-Konfiguration:</para>
<screen>&prompt.root; <userinput>cat freebsd.cfg</userinput>
builder = "hvm" <co xml:id="co-xen-builder"/>
name = "freebsd" <co xml:id="co-xen-name"/>
memory = 1024 <co xml:id="co-xen-memory"/>
vcpus = 2 <co xml:id="co-xen-vcpus"/>
vif = [ 'mac=00:16:3E:74:34:32,bridge=bridge0' ] <co xml:id="co-xen-vif"/>
disk = [
'/dev/zvol/tank/xendisk0,raw,hda,rw', <co xml:id="co-xen-disk"/>
'/root/freebsd.iso,raw,hdc:cdrom,r' <co xml:id="co-xen-cdrom"/>
]
vnc = 1 <co xml:id="co-xen-vnc"/>
vnclisten = "0.0.0.0"
serial = "pty"
usbdevice = "tablet"</screen>
<para>Erklärung der einzelnen Zeilen:</para>
<calloutlist>
<callout arearefs="co-xen-builder">
<para>Dies definiert, welche Art von Virtualisierung
verwendet wird. <literal>hvm</literal> bezieht sich auf
hardwaregestützte Virtualisierung oder
<foreignphrase>Hardware Virtual Machine</foreignphrase>.
Gastbetriebssysteme können unverändert auf der CPU mit
Virtualisierungserweiterungen laufen und bieten nahezu die
gleiche Leistung wie auf physikalischer Hardware.
<literal>generic</literal> ist der voreingestellte Wert
und erstellt eine PV-Domain.</para>
</callout>
<callout arearefs="co-xen-name">
<para>Der Name dieser virtuellen Maschine. Er dient zur
Unterscheidung von anderen virtuellen Maschinen auf der
selben Dom0. Diese Angabe ist zwingend
erforderlich.</para>
</callout>
<callout arearefs="co-xen-memory">
<para>Die Größe an RAM in Megabytes, die der VM zur
Verfügung steht. Die Größe wird vom verfügbaren Speicher
des Hypervisors subtrahiert, nicht vom Speicher der
Dom0.</para>
</callout>
<callout arearefs="co-xen-vcpus">
<para>Die Anzahl der virtuellen CPUs, die dem Gast zur
Verfügung stehen. Für die beste Leistung sollten Sie
dem Gast nicht mehr CPUs zuteilen, als die Anzahl der
CPUs auf dem physikalischen Host.</para>
</callout>
<callout arearefs="co-xen-vif">
<para>Der virtuelle Netzwerkadapter. Dies ist die Brücke,
die mit der Netzwerkschnittstelle des Hosts verbunden ist.
Der Parameter <literal>mac</literal> definiert die
MAC-Adresse der virtuellen Schnittstelle. Dieser
Parameter ist optional. Falls keine MAC definiert ist,
wird &xen; eine zufällige MAC generieren.</para>
</callout>
<callout arearefs="co-xen-disk">
<para>Der vollständige Pfad zur Festplatte, Datei, oder ZFS
Volume für den Plattenspeicher dieser VM. Optionen und
Festplattendefinitionen werden durch Kommata
getrennt.</para>
</callout>
<callout arearefs="co-xen-cdrom">
<para>Das Boot-Medium, aus dem das initiale Betriebssystem
installiert wird. In diesem Beispiel wird das zuvor
heruntergeladene ISO-Abbild benutzt. Andere Geräte und
weitere Optionen sind in der &xen; Dokumentation
beschrieben.</para>
</callout>
<callout arearefs="co-xen-vnc">
<para>Optionen, die die VNC-Konnektivität der seriellen
Konsole der DomU steuern. Dabei handelt es sich um die
aktive VNC-Unterstützung, die verwendete IP-Adresse, der
Gerätename der seriellen Konsole und die Eingabemethoden
für Maus, Tastatur und andere Geräte.
<literal>keymap</literal> konfiguriert die
Tastaturbelegung, die in der Voreinstellung
<literal>english</literal> ist.</para>
</callout>
</calloutlist>
<para>Nachdem die Konfigurationsdatei mit allen notwendigen
Optionen erstellt wurde, wird die DomU erstellt, indem die
Datei als Parameter an <command>xl</command> übergeben
wird.</para>
<screen>&prompt.root; <userinput>xl create freebsd.cfg</userinput></screen>
<note>
<para>Jedes mal, wenn die Dom0 neu gestartet wird, muss die
Konfigurationsdatei nochmals an <command>xl</command>
übergeben werden, um die DomU neu zu erstellen. In der
Voreinstellung wird nur die Dom0 nach einem Neustart
angelegt, nicht die einzelnen VMs. Die VMs können dort
fortfahren, wo sie aufgehört haben, weil sie das
Betriebssystem auf der virtuellen Festplatte gespeichert
haben. Die Konfiguration der virtuellen Maschine kann sich
mit der Zeit ändern (bspw. beim Hinzufügen von mehr
Arbeitsspeicher). Die Konfigurationsdateien der virtuellen
Maschinen müssen ordnungsgemäß gesichert und vorgehalten
werden, um die Gast-VM bei Bedarf neu erstellen zu
können.</para>
</note>
<para>Die Ausgabe von <command>xl list</command> bestätigt, dass
die DomU erstellt wurde.</para>
<screen>&prompt.root; <userinput>xl list</userinput>
Name ID Mem VCPUs State Time(s)
Domain-0 0 8192 4 r----- 1653.4
freebsd 1 1024 1 -b---- 663.9</screen>
<para>Um die Installation des Basis-Betriebssystems zu beginnen,
starten Sie den VNC-Client und verbinden Sie sich mit
Netzwerkadresse des Hosts oder mit der IP-Adresse, die auf der
Zeile <literal>vnclisten</literal> in
<filename>freebsd.cfg</filename> konfiguriert wurde. Nachdem
das Betriebssystem installiert ist, fahren Sie die DomU
herunter und trennen den VNC-Viewer. Bearbeiten Sie dann
die <filename>freebsd.cfg</filename>, entfernen Sie die Zeile
mit der <literal>cdrom</literal> Definiton, oder kommentieren
Sie die Zeile mit <literal>#</literal> aus. Um diese neue
Konfiguration zu laden, ist es notwendig, die alte DomU mit
<command>xl</command> zu zerstören, indem Sie entweder den
Namen oder die ID als Parameter übergeben. Danach kann die
DomU mit der angepassten <filename>freebsd.cfg</filename> neu
erstellt werden.</para>
<screen>&prompt.root; <userinput>xl destroy freebsd</userinput>
&prompt.root; <userinput>xl create freebsd.cfg</userinput></screen>
<para>Auf die Maschine kann jetzt wieder mit dem VNC-Viewer
zugegriffen werden. Dieses mal wird sie von einer virtuellen
Festplatte booten, auf der das Betriebssystem installiert
wurde. Die virtuelle Maschine kann nun verwendet
werden.</para>
</sect2>
-->
</sect1>
</chapter>