Installation der virtuellen Qemu-KVM-Maschine auf einem Heim-PC mit Linux. Verwenden von KVM zum Erstellen virtueller Maschinen auf einem Server. KVM zum Erstellen einer virtuellen Maschine Ubuntu

In diesem Einführungsartikel werde ich kurz auf alles eingehen Software, wird im Serviceentwicklungsprozess verwendet. Sie werden in den folgenden Artikeln ausführlicher besprochen.

Warum ? Das operationssystem ist für mich nah und verständlich, sodass es bei der Auswahl einer Distribution keine Qualen, Qualen oder Herumwerfen gab. Es bietet keine besonderen Vorteile gegenüber Red Hat Enterprise Linux, es wurde jedoch beschlossen, mit einem bekannten System zu arbeiten.

Wenn Sie vorhaben, eine Infrastruktur mit ähnlichen Technologien selbstständig bereitzustellen, würde ich Ihnen zu RHEL raten: Dank guter Dokumentation und gut geschriebenen Anwendungsprogrammen wird es, wenn nicht um eine Größenordnung, so doch auf jeden Fall doppelt so einfach sein Dank des entwickelten Zertifizierungssystems können Sie leicht eine Reihe von Spezialisten finden, die mit diesem Betriebssystem auf dem richtigen Niveau vertraut sind.

Wir haben uns erneut für die Verwendung entschieden Debian-Squeeze mit einer Reihe von Paketen von Sid/Experimentell und einige Pakete wurden mit unseren Patches zurückportiert und kompiliert.
Es gibt Pläne, ein Repository mit Paketen zu veröffentlichen.

Bei der Auswahl der Virtualisierungstechnologie wurden zwei Optionen in Betracht gezogen: Xen und KVM.

Auch die Tatsache, dass es eine große Anzahl an Entwicklern, Hostern und kommerziellen Lösungen auf Xen-Basis gab, wurde berücksichtigt – umso interessanter war es, eine Lösung auf KVM-Basis zu implementieren.

Der Hauptgrund, warum wir uns für den Einsatz von KVM entschieden haben, ist die Notwendigkeit, virtuelle Maschinen unter FreeBSD und in Zukunft unter MS Windows auszuführen.

Zum Fahren virtuelle Maschinen Es erwies sich als äußerst praktisch, Produkte zu verwenden, die seine API verwenden: Virsh, virtueller Manager, virt-install, usw.

Dabei handelt es sich um ein System, das die Einstellungen virtueller Maschinen speichert, sie verwaltet, Statistiken darüber führt und beim Start sicherstellt, dass dies der Fall ist virtuelle Maschine Die Schnittstelle wurde erstellt, verbindet Geräte mit der Maschine - führt im Allgemeinen eine Reihe von Aufgaben aus nützliche Arbeit und noch ein bisschen mehr dazu.

Natürlich ist die Lösung nicht perfekt. Zu den Nachteilen zählen:

  • Absolut verrückte Fehlermeldungen.
  • Es ist nicht möglich, einen Teil der Konfiguration der virtuellen Maschine im laufenden Betrieb zu ändern, obwohl QMP (QEMU Monitor Protocol) dies zulässt.
  • Manchmal ist es aus unbekannten Gründen nicht möglich, eine Verbindung zu libvirtd herzustellen – es reagiert nicht mehr auf externe Ereignisse.

Das Hauptproblem bei der Implementierung des Dienstes war gleich zu Beginn die Beschränkung der Ressourcen für virtuelle Maschinen. In Xen wurde dieses Problem mit Hilfe eines internen Schedulers gelöst, der Ressourcen zwischen virtuellen Maschinen verteilt – und das Beste daran ist, dass auch die Möglichkeit implementiert wurde, Festplattenvorgänge zu begrenzen.

Bis zum Aufkommen des Kernel-Ressourcenzuweisungsmechanismus gab es in KVM nichts Vergleichbares. Der Zugriff auf diese Funktionen wurde, wie unter Linux üblich, über ein spezielles realisiert Dateisystem cgroup, in dem gewöhnlich verwendet wird Systemaufrufe write() könnten Sie der Gruppe einen Prozess hinzufügen, ihm sein Gewicht in Papageien zuweisen, den Kern angeben, auf dem er ausgeführt werden soll, spezifizieren Durchsatz Geben Sie die Festplatte an, die dieser Prozess verwenden kann, oder weisen Sie ihr wiederum eine Gewichtung zu.

Der Vorteil besteht darin, dass all dies im Kernel implementiert ist und nicht nur für den Server, sondern auch für den Desktop verwendet werden kann (was im berühmten „The ~200 Line Linux Kernel Patch That Does Wonders“ verwendet wurde). Und meiner Meinung nach ist dies eine der bedeutendsten Änderungen im 2.6-Zweig, abgesehen von meiner Lieblingsnummer #12309 und der Ablage eines anderen Dateisystems. Na ja, vielleicht, außer POHMELFS (aber nur wegen des Namens).

Meine Einstellung zu dieser Utility-Bibliothek ist sehr zweideutig.

Einerseits sieht es ungefähr so ​​aus:

Und es ist auch verdammt schwierig, dieses Ding aus dem Quellcode zusammenzustellen, geschweige denn in ein Paket zu packen: Manchmal scheint es mir, dass Linux From Scratch etwas einfacher von Grund auf zu erstellen ist.

Andererseits ist es eine sehr leistungsstarke Sache, mit der Sie Images für virtuelle Maschinen erstellen, diese ändern, komprimieren, Grub installieren, die Partitionstabelle ändern, Konfigurationsdateien verwalten, Hardwaremaschinen in eine virtuelle Umgebung übertragen und virtuelle Maschinen übertragen können von einem Image zum anderen, virtuelle Maschinen vom Image auf die Hardware übertragen und, um ehrlich zu sein, hier lässt mich meine Vorstellungskraft ein wenig im Stich. Oh ja: Sie können auch einen Daemon in einer virtuellen Linux-Maschine ausführen und live auf die Daten der virtuellen Maschine zugreifen, und das alles in Shell, Python, Perl, Java, Ocaml. Das ist kurz und bündig volle Liste was man damit machen kann.

Interessanterweise wird der Großteil des Codes zum Zeitpunkt der Assemblierung generiert, ebenso wie die Dokumentation für das Projekt. Ocaml und Perl sind weit verbreitet. Der Code selbst wird in C geschrieben, der dann in OCaml verpackt wird, und die wiederholten Codeteile werden selbst generiert. Die Arbeit mit Bildern erfolgt durch Starten eines speziellen Dienst-Images (Supermin-Appliance), an das Befehle über einen Kanal gesendet werden. Dieses Rettungsabbild enthält eine Reihe von Dienstprogrammen wie parted, mkfs und andere, die für einen Systemadministrator nützlich sind.

Vor kurzem habe ich sogar damit begonnen, es zu Hause zu verwenden, als ich die benötigten Daten aus dem Nandroid-Image extrahierte. Dies erfordert jedoch einen Yaffs-fähigen Kernel.

Andere

Nachfolgend finden Sie einige weitere interessante Links zu einer Beschreibung der verwendeten Software – lesen und studieren Sie diese bei Interesse selbst. Zum Beispiel,

Ich schreibe diese Notiz, um es zu demonstrieren Schritt-für-Schritt-Installation und Einrichten einer KVM-basierten virtuellen Maschine unter Linux. Ich habe zuvor über Virtualisierung geschrieben, wo ich die wunderbare .

Jetzt stehe ich vor einem Mietproblem. guter Server mit großem Volumen Arbeitsspeicher und volumetrisch Festplatte. Aber ich möchte Projekte nicht direkt auf dem Host-Rechner ausführen, deshalb werde ich sie in separate kleine virtuelle Server aufteilen, auf denen Linux- oder Docker-Container laufen (ich werde in einem anderen Artikel darüber sprechen).

Alle modernen Cloud-Hostings funktionieren nach dem gleichen Prinzip, d. h. Ein Hoster auf guter Hardware erstellt eine Reihe virtueller Server, die wir früher VPS/VDS nannten, und verteilt sie an Benutzer oder automatisiert diesen Prozess (Hallo, DigitalOcean).

KVM (kernelbasierte virtuelle Maschine) ist Software für Linux unter Verwendung x86-kompatibler Prozessorhardware, um mit der Intel VT/AMD SVM-Virtualisierungstechnologie zu arbeiten.

KVM installieren

Ich werde alle Machenschaften zum Erstellen einer virtuellen Maschine unter Ubuntu 16.04.1 LTS OS ausführen. Um zu überprüfen, ob Ihre Prozesse Hardwarevirtualisierung unterstützen Intel-basiert VT/AMD SVM, ausführen:

Grep -E "(vmx|svm)" /proc/cpuinfo

Ist das Terminal nicht leer, ist alles in Ordnung und KVM kann installiert werden. Ubuntu unterstützt offiziell nur den KVM-Hypervisor (Teil des Linux-Kernels) und empfiehlt die Verwendung der libvirt-Bibliothek als Tool zur Verwaltung, was wir als Nächstes tun werden.

Sie können die Hardware-Virtualisierungsunterstützung in Ubuntu auch mit dem folgenden Befehl überprüfen:

Bei Erfolg sehen Sie etwa Folgendes:

INFO: /dev/kvm vorhanden KVM-Beschleunigung kann verwendet werden

Installieren Sie Pakete für die Arbeit mit KVM:

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder Bridge-Utils

Wenn Sie Zugriff auf die grafische Shell des Systems haben, können Sie den libvirt-GUI-Manager installieren:

Sudo apt-get install virt-manager

Die Verwendung von virt-manager ist recht einfach (nicht schwieriger als VirtualBox), daher werden wir in diesem Artikel über die Konsolenoption zum Installieren und Konfigurieren eines virtuellen Servers sprechen.

Installieren und Konfigurieren eines virtuellen Servers

In der Konsolenversion der Installation, Konfiguration und Systemverwaltung ist das Dienstprogramm virsh (ein Add-on zur libvirt-Bibliothek) ein unverzichtbares Werkzeug. Es verfügt über eine große Anzahl von Optionen und Parametern, detaillierte Beschreibung kann man so erhalten:

Mann Virsh

oder rufen Sie die Standard-Hilfe auf:

Virsh-Hilfe

Bei der Arbeit mit virtuellen Servern halte ich mich stets an folgende Regeln:

  1. ich behalte ISO-Bilder Betriebssystem im Verzeichnis /var/lib/libvirt/boot
  2. Ich speichere Bilder virtueller Maschinen im Verzeichnis /var/lib/libvirt/images
  3. Über den DHCP-Server des Hypervisors weise ich jeder neuen virtuellen Maschine explizit eine eigene statische IP-Adresse zu.

Beginnen wir mit der Installation der ersten virtuellen Maschine (64-Bit-Server Ubuntu 16.04 LTS):

Cd /var/lib/libvirt/boot sudo wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

Nachdem Sie das Image heruntergeladen haben, starten Sie die Installation:

Sudo virt-install \ --virt-type=kvm \ --name ubuntu1604\ --ram 1024 \ --vcpus=1 \ --os-variant=ubuntu16.04 \ --hvm \ --cdrom=/var/ lib/libvirt/boot/ubuntu-16.04.1-server-amd64.iso \ --network network=default,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/ubuntu1604. img,size=20,bus=virtio

Wenn wir alle diese Parameter in „menschliche Sprache“ übersetzen, stellt sich heraus, dass wir eine virtuelle Maschine mit dem Betriebssystem Ubuntu 16.04, 1024 MB RAM, 1 Prozessor und einer Standard-Netzwerkkarte erstellen (die virtuelle Maschine greift wie aufgrund von NAT auf das Internet zu ), 20 GB Festplatte.

Es lohnt sich, auf den Parameter zu achten --os-variant, teilt es dem Hypervisor mit, an welches Betriebssystem die Einstellungen angepasst werden sollen.
Eine Liste der verfügbaren Betriebssystemoptionen erhalten Sie, indem Sie den folgenden Befehl ausführen:

Osinfo-Abfrage os

Wenn ein solches Dienstprogramm nicht auf Ihrem System vorhanden ist, installieren Sie Folgendes:

Sudo apt-get install libosinfo-bin

Nach dem Start der Installation erscheint in der Konsole folgende Meldung:

Die Domäneninstallation läuft noch. Sie können sich erneut mit der Konsole verbinden, um den Installationsvorgang abzuschließen.

Dies ist eine normale Situation, wir werden die Installation über VNC fortsetzen.
Schauen wir uns an, welcher Port auf unserer virtuellen Maschine aktiviert wurde (z. B. im nächsten Terminal):

Virsh dumpxml ubuntu1604... ...

Port 5900, auf lokaler Adresse 127.0.0.1. Um eine Verbindung zu VNC herzustellen, müssen Sie die Portweiterleitung über SSH verwenden. Stellen Sie vorher sicher, dass die TCP-Weiterleitung im SSH-Daemon aktiviert ist. Gehen Sie dazu in die SSHD-Einstellungen:

Cat /etc/ssh/sshd_config | grep AllowTcpForwarding

Wenn nichts gefunden wurde oder Folgendes angezeigt wird:

AllowTcpForwarding Nr

Dann bearbeiten wir die Konfiguration

AllowTcpForwarding ja

und sshd neu starten.

Portweiterleitung einrichten

Wir führen den Befehl auf dem lokalen Rechner aus:

Ssh -fN -l login -L 127.0.0.1:5900:localhost:5900 server_ip

Hier haben wir die SSH-Portweiterleitung vom lokalen Port 5900 zum Server-Port 5900 konfiguriert. Jetzt können Sie mit jedem VNC-Client eine Verbindung zu VNC herstellen. Ich bevorzuge UltraVNC wegen seiner Einfachheit und Bequemlichkeit.

Nach erfolgreicher Verbindung wird das Standard-Willkommensfenster zum Starten der Ubuntu-Installation auf dem Bildschirm angezeigt:

Nach Abschluss der Installation und dem üblichen Neustart erscheint das Anmeldefenster. Nach dem Login ermitteln wir die IP-Adresse der neu erstellten virtuellen Maschine, um diese später statisch zu machen:

Ifconfig

Wir erinnern uns und gehen zur Host-Maschine. Wir ziehen die MAC-Adresse der „Netzwerk“-Karte der virtuellen Maschine heraus:

Virsh dumpxml ubuntu1604 | grep "MAC-Adresse"

Erinnern wir uns an unsere Mac-Adresse:

Bearbeitung Netzwerkeinstellungen Hypervisor:

Sudo virsh net-edit-Standard

Wir suchen nach DHCP und fügen Folgendes hinzu:

Es sollte ungefähr so ​​aussehen:

Damit die Einstellungen wirksam werden, müssen Sie den DHCP-Server des Hypervisors neu starten:

Sudo virsh net-destroy default sudo virsh net-start default sudo service libvirt-bin restart

Danach starten wir die virtuelle Maschine neu, ihr wird nun immer die IP-Adresse zugewiesen – 192.168.122.131.

Es gibt andere Möglichkeiten, eine statische IP für eine virtuelle Maschine festzulegen, beispielsweise durch direktes Bearbeiten der Netzwerkeinstellungen im Gastsystem, aber hier ist alles, was Ihr Herz begehrt. Ich habe gerade die Option gezeigt, die ich am liebsten verwende.

Führen Sie Folgendes aus, um eine Verbindung zum Terminal der virtuellen Maschine herzustellen:

Ssh 192.168.122.131

Das Auto ist kampfbereit.

Virsh: Befehlsliste

Laufen sehen virtuelle Hosts(Alle verfügbaren können durch Hinzufügen von --all erhalten werden):

Sudo-Virsh-Liste

Sie können den Host neu starten:

Sudo virsh startet $VM_NAME neu

Stoppen Sie eine virtuelle Maschine:

Sudo virsh stoppt $VM_NAME

Stopp ausführen:

Sudo virsh zerstört $VM_NAME

Sudo virsh start $VM_NAME

Deaktivieren:

Sudo virsh beendet $VM_NAME

Zum Autorun hinzufügen:

Sudo virsh Autostart $VM_NAME

Sehr oft ist es notwendig, ein System zu klonen, um es in Zukunft als Framework für andere virtuelle Betriebssysteme zu verwenden; hierfür wird das Dienstprogramm virt-clone verwendet.

Virt-clone --help

Es klont eine vorhandene virtuelle Maschine und ändert hostsensible Daten, beispielsweise die Mac-Adresse. Passwörter, Dateien und andere benutzerspezifische Informationen im Klon bleiben gleich. Wenn die IP-Adresse auf der geklonten virtuellen Maschine manuell registriert wurde, kann es aufgrund eines Konflikts (2 Hosts mit derselben IP) zu Problemen beim SSH-Zugriff auf den Klon kommen.

Neben der Installation einer virtuellen Maschine über VNC ist es auch möglich, X11Forwarding über das Dienstprogramm virt-manager zu verwenden. Unter Windows können Sie hierfür beispielsweise Xming und PuTTY nutzen.

In Ubuntu wird empfohlen, den KVM-Hypervisor (Virtual Machine Manager) und die libvirt-Bibliothek als Verwaltungstool dafür zu verwenden. Libvirt umfasst eine Reihe von Software-APIs und Benutzeranwendungen zur Verwaltung virtueller Maschinen (VMs), virt-manager (grafische Schnittstelle, GUI) oder virsh ( Befehlszeile,CLI). Als alternative Manager können Sie convirt (GUI) oder convirt2 (WEB-Schnittstelle) verwenden.

Derzeit wird unter Ubuntu nur der KVM-Hypervisor offiziell unterstützt. Dieser Hypervisor ist Teil des Betriebssystemkerncodes Linux-Systeme. Im Gegensatz zu Xen unterstützt KVM keine Paravirtualisierung. Das heißt, um sie nutzen zu können, muss Ihre CPU VT-Technologien unterstützen. Sie können überprüfen, ob Ihr Prozessor diese Technologie unterstützt, indem Sie den folgenden Befehl im Terminal ausführen:

Wenn Sie als Ergebnis die folgende Meldung erhalten:

INFO: /dev/kvm vorhanden KVM-Beschleunigung kann verwendet werden

Das bedeutet, dass KVM problemlos funktioniert.

Wenn Sie am Ausgang die folgende Meldung erhalten haben:

Ihre CPU unterstützt keine KVM-Erweiterungen. Die KVM-Beschleunigung kann NICHT verwendet werden

Dann können Sie die virtuelle Maschine weiterhin verwenden, sie ist jedoch deutlich langsamer.

    Installieren Sie 64-Bit-Systeme als Gäste

    Weisen Sie Gastsystemen mehr als 2 GB RAM zu

Installation

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder Bridge-Utils

Hierbei handelt es sich um eine Installation auf einem Server ohne X, d. h. es ist keine grafische Oberfläche enthalten. Sie können es mit dem Befehl installieren

Sudo apt-get install virt-manager

Danach erscheint im Menü der Punkt „Virtual Machine Manager“ und mit hoher Wahrscheinlichkeit wird alles funktionieren. Sollten weiterhin Probleme auftreten, müssen Sie die Anweisungen im englischen Wiki lesen.

Erstellen eines Gastsystems

Vorgehensweise zum Erstellen eines Gastes mit GUI ziemlich einfach.

Aber der Textmodus kann beschrieben werden.

qcow2

Beim Erstellen eines Systems mit einer GUI als Festplatte Es wird vorgeschlagen, entweder eine vorhandene Bilddatei oder ein Blockgerät auszuwählen oder zu erstellen neue Datei mit Rohdaten (RAW). Dies ist jedoch bei weitem nicht das einzige verfügbare Dateiformat. Von allen in man qemu-img aufgeführten Festplattentypen ist qcow2 der flexibelste und modernste. Es unterstützt Snapshots, Verschlüsselung und Komprimierung. Es muss erstellt werden, bevor ein neuer Gast erstellt wird.

Qemu-img create -o preallocation=metadata -f qcow2 qcow2.img 20G

Laut dem gleichen Mann qemu-img führt die Vorabzuweisung von Metadaten (-o preallocation=metadata) dazu, dass die Festplatte zunächst etwas größer wird, dies aber zulässt bessere Leistung in den Momenten, in denen das Bild wachsen muss. Tatsächlich können Sie in diesem Fall mit dieser Option einen unangenehmen Fehler vermeiden. Das erstellte Image nimmt zunächst weniger als ein Megabyte Platz ein und wächst bei Bedarf auf die angegebene Größe. Das Gastsystem sollte diese endgültige angegebene Größe sofort sehen, es kann jedoch sein, dass es sie während der Installationsphase sieht tatsächliche Größe Datei. Natürlich installieren Sie auf Festplatte 200 kB groß wird es ablehnen. Der Fehler ist nicht spezifisch für Ubuntu; er tritt zumindest in RHEL auf.

Zusätzlich zum Image-Typ können Sie anschließend die Verbindungsmethode auswählen – IDE, SCSI oder Virtio Disk. Die Leistung des Festplattensubsystems hängt von dieser Wahl ab. Es gibt keine eindeutig richtige Antwort; Sie müssen anhand der Aufgabe auswählen, die dem Gastsystem zugewiesen wird. Wenn das Gastsystem „zum Anschauen“ erstellt wird, reicht jede Methode aus. Im Allgemeinen ist es normalerweise die E/A, die den Engpass einer virtuellen Maschine darstellt. Daher muss bei der Erstellung eines hochbelasteten Systems mit diesem Problem so verantwortungsvoll wie möglich umgegangen werden.

Ich habe bereits über die Installation geschrieben Qemu-KVM V Debian. Meiner Meinung nach erwiesen sich die Informationen jedoch als unvollständig. Außerdem habe ich einige Nuancen nicht berücksichtigt. Daher mache ich Sie auf einen aktualisierten Artikel zur Installation der virtuellen Qemu-KVM-Maschine aufmerksam. Alter Artikel Natürlich werde ich es löschen.

Ich denke, ich sollte erklären, was es ist virtuelle Maschine, ist es nicht wert. Sie wissen das wahrscheinlich (da Sie diesen Artikel lesen). Wenn nicht - . Wir werden uns direkt auf das Thema konzentrieren. Qemu-KVM ist ein Projekt zur Kombination zweier (meiner Meinung nach) traumhaftesten Technologien der vollständigen Virtualisierung. Qemu ist eine Art „Computer-Emulator“, der eine Vielzahl von Hardware-Architekturen unterstützt. Es kann fast jedes Betriebssystem für jedes Gerät ausführen (ich habe beispielsweise alte Versionen ausgeführt). Mac OS X, was für ist PowerPC). Der Nachteil von Qemu ist seine Langsamkeit aufgrund der fehlenden Hardwarebeschleunigung. Und dann kommt ein weiteres Projekt zur Rettung - KVM. Oder virtuelle Kernelmaschine. KVM ist eine Linux-Kernel-Technologie, die eine Hardwarebeschleunigung bei vollständiger Virtualisierung ermöglicht. Der Nachteil von KVM besteht darin, dass es nur die x86-Architektur unterstützt

Warum Qemu-KVM? Für Linux ist dies das am meisten empfohlene Virtualisierungsprojekt. Es funktioniert schneller als VirtualBox Und VMware-Player(Meinen Tests zufolge) ist KVM eine native Technologie für Linux. Plus, wenn Sie ein gutes haben Gaming-Computer Mit zwei Grafikkarten können Sie Qemu-KVM installieren Windows, werfen Sie eine der Grafikkarten hinein und vergessen Sie den Neustart auf ein anderes Betriebssystem. Wenn Sie spielen möchten, starten Sie eine virtuelle Maschine mit Windows und spielen. Die Leistung beträgt 95 % der Leistung von Windows, das auf der Hardware installiert ist. Aber meiner Meinung nach ist es einfach wunderschön. Darüber werde ich einen separaten Artikel schreiben. Das wird interessant:)

Jetzt werde ich unseren Aktionsplan beschreiben. Zunächst werde ich die Installation anhand eines Beispiels durchführen Debian 8.2 GNOME 64 Bit, obwohl es in anderen grafischen Umgebungen keine wesentlichen Unterschiede geben wird. Zweitens beschreibe ich die Arbeit mit KVM nur im grafischen Modus (schließlich werden wir es nicht auf einem Server installieren). Daher keine Terminals, Skripte usw., wie es bei der Servervirtualisierung üblich ist. Drittens rate ich Ihnen, zusätzlich die Dokumentation zu Qemu und KVM zu lesen (Links gebe ich am Ende des Artikels). Dies wird Ihnen sehr nützlich sein, wenn Sie das volle Potenzial dieses Pakets ausschöpfen möchten. Nun, unser Aktionsplan ist klar. Nun die Handlungsschritte:

  • qemu-kvm installieren;
  • Installation eines Grafikmanagers und zusätzlicher Dienstprogramme;
  • Einrichten einer Netzwerkbrücke;
  • Erstellen von Speicher für virtuelle Maschinen;
  • Installation eines Gastsystems.
Überprüfen wir zunächst, ob Ihr Computer Hardwarevirtualisierung unterstützt. Führen Sie dazu den Befehl im Terminal aus:

egrep "(vmx|svm)" /proc/cpuinfo

Die Befehlsausgabe muss beides enthalten vmx, oder svm. Wenn sie nicht vorhanden sind, prüfen Sie, ob die Virtualisierung im BIOS aktiviert ist (suchen Sie nach Elementen). Intel VT-i oder ähnliches für AMD). Wenn es nichts gibt, dann haben Sie kein Glück.

Installieren Sie die erforderlichen Komponenten:

sudo apt install qemu-kvm bridge-utils libvirt-bin virt-manager

Fügen Sie sich der libvirt-Gruppe hinzu:

sudo adduser $USER libvirt

Jetzt richten wir das Netzwerk ein. Damit alle virtuellen Maschinen auf das Netzwerk zugreifen und miteinander kommunizieren können, müssen Sie für jede virtuelle Maschine eine Netzwerkbrücke und virtuelle Netzwerkkarten erstellen ( Tippen Sie auf Geräte). Da wir virtuelle Maschinen über die grafische Oberfläche installieren, müssen Taps nicht manuell erstellt werden. Virtueller Manager wird dies jedes Mal für uns tun, wenn wir anfangen. Wir müssen nur die Brücke konfigurieren. Lassen Sie uns zunächst das Routing im Kernel aktivieren:

sudo nano /etc/sysctl.conf

Wir suchen nach der Zeile net.ipv4_forward=0 und ändern ihren Wert in 1 . Wir sparen außerdem:

sudo sysctl -p

Von nun an gehe ich von Folgendem aus: 1) Es gibt eines auf Ihrem Computer LAN-Karte, der vom Router eine IP-Adresse erhält. 2) Sie greifen über ein 3G-Modem auf das Internet zu und Ihre Netzwerkkarte ist kostenlos. Diese Option beinhaltet mehr selbstgemacht, aber es wurde mehrmals getestet (ich habe es selbst auf einer der Maschinen getestet). Öffnen Sie also die Schnittstellendatei:

sudo nano /etc/network/interfaces

Sein Standardinhalt ist:



Auto lo
iface lo inet loopback

Wir ändern seinen Inhalt. Für die erste Option:

Quelle /etc/network/interfaces.d/*

# Die Loopback-Netzwerkschnittstelle
Auto lo
iface lo inet loopback

auto eth0
iface eth0 inet-Handbuch

auto br0
iface br0 inet static
Adresse 192.168.0.2
Gateway 192.168.0.1
Netzmaske 255.255.255.0
Netzwerk 192.168.0.0
Sendung 192.168.0.255
bridge_ports eth0
bridge_stp aus
bridge_maxwait 0
Bridge_fd 0

Für die zweite Option:

Quelle /etc/network/interfaces.d/*

# Die Loopback-Netzwerkschnittstelle
Auto lo
iface lo inet loopback

auto ppp0
iface ppp0 inet wvdial

auto eth0
iface eth0 inet-Handbuch

auto br0
iface br0 inet static
Adresse 192.168.0.2
Gateway 192.168.0.1
Netzmaske 255.255.255.0
Netzwerk 192.168.0.0
Sendung 192.168.0.255
bridge_ports eth0
bridge_stp aus
bridge_maxwait 0
Bridge_fd 0
up Route del Standard br0

Notiz: wenn du es nicht brauchst Automatische Verbindung Internet über Modem nach dem Systemstart, entfernen Sie das Auto ppp0 und
iface ppp0 inet wvdial . Stellen Sie andernfalls sicher, dass beim Systemstart das Modem in den USB-Anschluss eingesteckt ist.

Speichern. Für die Option mit einem Modem müssen Sie nun ein Dialer-Programm installieren wvdial:

Sudo apt install wvdial

Bearbeiten der Konfiguration (Hinweis: Als Beispiel wird ein 3G-Modem verwendet Beeline. Beispiele für Konfigurationen für andere Modems finden Sie leicht im Internet):

sudo nano /etc/wvdial.conf


Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","home.beeline.ru"
Dummmodus = 1
ISDN = 0
Modemtyp = USB-Modem
Neues PPPD = ja
Telefon = *99#
Modem = /dev/ttyACM0
Benutzername = beeline
Passwort = beeline
Baud = 9600
Land = Russland
Automatische Wiederverbindung=ein
Auto-DNS = aus
Leerlaufsekunden = 0

Speichern. Jetzt schaltet sich das Modem sofort nach dem Systemstart ein. Die Zeile „route del default br0“ löscht die Standardroute durch die Brücke. Andernfalls können Sie keine Verbindung zum Internet herstellen, da der Datenverkehr über die Brücke und nicht über das 3G-Modem erfolgt.

Der letzte Schritt, den wir sagen müssen Firewall, sodass der Datenverkehr von unseren virtuellen Maschinen zum Netzwerk und zurück weitergeleitet wird. Dazu können Sie auf zwei Arten vorgehen: Schreiben Sie ein Skript mit mehreren Regeln für iptables, das mit dem System mitläuft, oder geben Sie diese Regeln manuell ein und speichern Sie sie. Ich werde die erste Option verwenden. Für das zweite müssen Sie das Paket installieren iptables-persistent und geben Sie einfach die Regeln einzeln ein (mit sudo). Also. Erstellen Sie ein Skript (in beliebiger Reihenfolge). Texteditor). Fügen Sie dort den folgenden Inhalt ein:

#!/bin/sh

# Definieren Sie die Ausgabeschnittstelle, für die Adressersetzung (NAT) angewendet wird
iptables -v -t nat -A POSTROUTING -o ppp0 -j MASKERADE

# Wir leiten alle Pakete weiter, die zum Modem kamen globales Netzwerk(0.0.0.0/0) zum lokalen Netzwerk (192.168.0.0/24)
iptables -v -A FORWARD -i ppp0 -o br0 -s 0.0.0.0/0 -d 192.168.0.0/24 -j ACCEPT

# Leiten Sie alle Pakete weiter, die von kommen lokales Netzwerk(192.168.0.0/24) zu global (0.0.0.0/0)
iptables -v -A FORWARD -i br0 -o ppp0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j ACCEPT

Speichern Sie es unter Gateway.sh und Ausführungsrechte erteilen (entweder in den Dateieigenschaften oder im Terminal mit dem Befehl chmod +x Gateway.sh). Jetzt können Sie es entweder manuell starten, nachdem das System gestartet wurde, oder es zum Start hinzufügen. Verschieben Sie dazu das Skript nach ~/.config/autostart(V Dateimanager Mach die Show an versteckte Dateien und Sie sehen das Verzeichnis .config in Ihrem Home-Verzeichnis).

Jetzt ist alles bereit für die Installation der virtuellen Maschine. Starten Sie im Anwendungsmenü Virt Manager (Virtual Machine Manager):

Klicken Sie mit der rechten Maustaste auf die Zeile localhost und wähle Einzelheiten. Gehen Sie zur Registerkarte Lagerung. Wir müssen das Verzeichnis (oder die Festplattenpartition/Festplatte) zum Speichern der virtuellen Maschinen angeben.

Klicken Sie in der unteren linken Ecke auf das Pluszeichen ( Fügen Sie einen Pool hinzu), geben Sie die Art des Speichers und den Pfad dorthin an.

Auf der Registerkarte Netzwerk Schnittstellen können Sie prüfen, ob alles funktioniert.

Jetzt drücken wir Datei – Neue virtuelle Maschine. Geben Sie den Pfad zum Disk-Image und den Typ der virtuellen Maschine an. Als nächstes geben wir die Menge an RAM dafür und die Anzahl der Prozessorkerne an. Geben Sie als Nächstes unseren Speicher an und klicken Sie Neuer Band. Geben Sie den Namen an, belassen Sie den Typ qcow2, und Größe. Dies wird eine virtuelle Festplatte sein. Wenn Sie planen, ein System mit einer grafischen Shell und einer Reihe von Programmen zu installieren, geben Sie mehr Speicherplatz (50 Gigabyte) an. Aktivieren Sie auf der letzten Registerkarte das Kontrollkästchen Ändern Sie die Einstellungen vor dem Start, überprüfen Sie, ob unsere Bridge als Netzwerkgerät ausgewählt ist, geben Sie einen beliebigen Namen für die virtuelle Maschine ein und klicken Sie Vollständig. Das Parameterfenster für diese virtuelle Maschine wird vor Ihnen geöffnet.





Gehen Sie zur Registerkarte CPU, und setzen Sie ein Häkchen Hostprozessoreinstellungen kopieren.

Neben der Registerkarte Netz(als nächstes) und auch angeben vitio. Auf der Registerkarte Anzeige Bitte angeben Würzen, und auf der Registerkarte Video - QXL. Normalerweise bietet dieser Link maximale Performance Zeichnen von Grafiken, aber wenn Sie möchten, können Sie experimentieren. Bitte beachten Sie dies für Gäste Windows-Systeme, erfordert eine separate Installation des QXL-Treibers (in Windows selbst).


Nachdem nun alles fertig ist, klicken Sie in die obere linke Ecke Starten Sie die Installation. Und installieren Sie das System wie gewohnt, mit einer Ausnahme: Sobald das Installationsprogramm mit der automatischen Konfiguration des Netzwerks beginnt, klicken Sie auf Stornieren, und wählen Sie Konfigurieren Sie das Netzwerk manuell. Geben Sie die gewünschte IP-Adresse für die virtuelle Maschine an (in unserem Fall). 192.168.0.3 ), Subnetzmaske ( 255.255.255.0 ), Gateway (das Gateway ist die Hostadresse, d. h 192.168.0.2 ) und DNS-Server (hier einfach Google angeben 8.8.8.8 ). Und alle. Es besteht keine Notwendigkeit, weiter etwas zu unternehmen. Installieren Sie das System und konfigurieren Sie es. Im Allgemeinen ist das alles. Die beschriebenen Schritte sind eine Möglichkeit, beispielsweise VirtualBox durch eine bessere Alternative zu ersetzen. Nachdem Sie die Dokumentation gelesen haben, werden Sie verstehen, wie vielfältig die Möglichkeiten von Qemu-KVM sind. Auf zusätzliche Konsolenparameter und Methoden zum Starten virtueller Maschinen über das Terminal habe ich hier bewusst verzichtet, da dies auf einer Heimmaschine nicht immer notwendig ist. Ich werde dazu einen separaten Artikel schreiben, in dem es um die Einrichtung eines Heim-Multifunktionsservers geht (der auch als virtueller Maschinenserver fungieren kann). Für diejenigen, die aus irgendeinem Grund nicht verstanden haben, was geschrieben wurde, oder es immer noch unverständliche Momente gibt, empfehle ich, sich ein Video anzusehen, in dem ich nicht beschreibe, sondern zeige, wie man all diese Dinge installiert und konfiguriert. Wenn Sie Anregungen oder Ergänzungen zum Artikel haben, schreiben Sie in die Kommentare.

Überprüfung der Hypervisor-Unterstützung

Wir prüfen, ob der Server Virtualisierungstechnologien unterstützt:

cat /proc/cpuinfo | egrep „(vmx|svm)“

Als Antwort sollten Sie etwa Folgendes erhalten:

Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm konstant_tsc arch_perfmon pebs bts rep_good nopl xtopologie nonstop_tsc a perf mperf pni pclmulqdq dtes64 Monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm epb tpr_shadow vnmi flexpriority ept vpid dtherm ida arat

Andernfalls gehen Sie zum BIOS, suchen Sie die Option zum Aktivieren der Virtualisierungstechnologie (hat unterschiedliche Namen, zum Beispiel Intel Virtualization Technology oder Virtualization) und aktivieren Sie sie – legen Sie den Wert fest Aktivieren.

Sie können die Kompatibilität auch mit dem Befehl überprüfen:

* wenn der Befehl einen Fehler zurückgibt „kvm-ok-Befehl nicht gefunden“, installieren Sie das entsprechende Paket: apt-get installiert den CPU-Checker.

Wenn wir sehen:

INFO: /dev/kvm existiert
KVM-Beschleunigung kann genutzt werden

Das bedeutet, dass es Hardware-Unterstützung gibt.

Vorbereiten des Servers

Der Einfachheit halber erstellen wir ein Verzeichnis, in dem wir Daten für KVM speichern:

mkdir -p /kvm/(vhdd,iso)

* Es werden zwei Verzeichnisse erstellt: /kvm/vhdd(für virtuell Festplatte) Und /kvm/iso(für ISO-Bilder).

Stellen wir die Zeit ein:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* diesen Befehl stellt die Zone entsprechend der Moskauer Zeit ein.

ntpdate ru.pool.ntp.org

* Wir synchronisieren mit dem Zeitserver.

Installation und Start

Wir installieren KVM und die notwendigen Verwaltungsdienstprogramme.

a) Ubuntu bis Version 18.10

apt-get install qemu-kvm libvirt-bin virtinst libosinfo-bin

b) Ubuntu nach 18.10:

apt-get install qemu-kvm libvirt-daemon-system libvirt-bin virtinst libosinfo-bin

* Wo qemu-kvm- Hypervisor; libvirt-bin— Hypervisor-Steuerungsbibliothek; Virtinst— Dienstprogramm zur Verwaltung virtueller Maschinen; libosinfo-bin– ein Dienstprogramm zum Anzeigen einer Liste von Betriebssystemoptionen, die als Gastbetriebssysteme verwendet werden können.

Lass es uns einrichten automatischer Start Service:

systemctl aktiviert libvirtd

Starten wir libvirtd:

systemctl startet libvirtd

Netzwerkkonfiguration

Virtuelle Maschinen können hinter NAT (einem KVM-Server) arbeiten oder IP-Adressen aus dem lokalen Netzwerk empfangen – dazu müssen Sie eine Netzwerkbrücke konfigurieren. Letzteres konfigurieren wir.

Benutzen Fernverbindung, überprüfen Sie die Einstellungen sorgfältig. Tritt ein Fehler auf, wird die Verbindung abgebrochen.

Bridge-Utils installieren:

apt-get installiere Bridge-Utils

a) Netzwerkeinrichtung in älteren Ubuntu-Versionen (/etc/network/interfaces).

Öffnen Sie die Konfigurationsdatei, um Netzwerkschnittstellen zu konfigurieren:

vi /etc/network/interfaces

Und lassen Sie es uns in dieser Form ausdrücken:

#iface eth0 inet statisch
# Adresse 192.168.1.24
# Netzmaske 255.255.255.0
#Gateway 192.168.1.1
# DNS-Nameserver 192.168.1.1 192.168.1.2

Auto br0
iface br0 inet static
Adresse 192.168.1.24
Netzmaske 255.255.255.0
Gateway 192.168.1.1
DNS-Nameserver 192.168.1.1 192.168.1.2
bridge_ports eth0
Bridge_fd 9
bridge_hello 2
Bridge_maxage 12
bridge_stp aus

* wobei alles, was auskommentiert ist, die alten Einstellungen meines Netzwerks sind; br0— Name der Schnittstelle der erstellten Bridge; eth0— eine vorhandene Netzwerkschnittstelle, über die die Bridge betrieben wird.

Starten Sie den Netzwerkdienst neu:

systemctl startet das Netzwerk neu

b) Einrichten eines Netzwerks in neuen Versionen von Ubuntu (netplan).

vi /etc/netplan/01-netcfg.yaml

* abhängig von der Systemversion, Konfigurationsdatei Yaml kann einen anderen Namen haben.

Bringen wir es in Form:

Netzwerk:
Version 2
Renderer: networkd
Ethernet:
eth0:
dhcp4: falsch
dhcp6: falsch
wakeonlan: stimmt

Brücken:
br0:
MAC-Adresse: 2c:6d:45:c3:55:a7
Schnittstellen:
-eth0
Adressen:
- 192.168.1.24/24
Gateway4: 192.168.1.1
MTU: 1500
Nameserver:
Adressen:
- 192.168.1.1
- 192.168.1.2
Parameter:
stp: wahr
Vorwärtsverzögerung: 4
dhcp4: falsch
dhcp6: falsch

*V in diesem Beispiel Wir erstellen eine virtuelle Bridge-Schnittstelle br0; Wir nutzen es als physische Schnittstelle eth0.

Netzwerkeinstellungen anwenden:

Wir bestehen auf Umleitung Netzwerktraffic(damit virtuelle Maschinen mit einer NAT-Netzwerkschnittstelle auf das Internet zugreifen können):

vi /etc/sysctl.d/99-sysctl.conf

Fügen Sie die Zeile hinzu:

net.ipv4.ip_forward=1

Übernehmen Sie die Einstellungen:

sysctl -p /etc/sysctl.d/99-sysctl.conf

Erstellen einer virtuellen Maschine

Um die erste virtuelle Maschine zu erstellen, geben Sie den folgenden Befehl ein:

virt-install -n VM1\
--Auto-Start\
--noautoconsole\
--network=bridge:br0 \
--ram 2048 --arch=x86_64 \
--vcpus=2 --cpu host --check-cpu \
--disk path=/kvm/vhdd/VM1-disk1.img,size=16 \
--cdrom /kvm/iso/ubuntu-18.04.3-server-amd64.iso \
--graphics vnc,listen=0.0.0.0,password=vnc_password \
--os-type linux --os-variant=ubuntu18.04 --boot cdrom,hd,menu=on

  • VM1 - Name die Maschine, die erstellt wird;
  • Auto-Start - zulassen, dass die virtuelle Maschine zusammen mit dem KVM-Server automatisch gestartet wird;
  • noautoconsole — stellt keine Verbindung zur Konsole der virtuellen Maschine her;
  • Netzwerk - Netzwerkart. In diesem Beispiel erstellen wir eine virtuelle Maschine mit einer „Netzwerkbrücke“-Schnittstelle. Um eine interne Schnittstelle mit NAT-Typ zu erstellen, geben Sie ein --network=default,model=virtio;
  • RAM - Menge an RAM;
  • vcpus — Anzahl virtueller Prozessoren;
  • Festplatte - virtuelle Festplatte: Weg - Pfad zur Festplatte; Größe - sein Volumen;
  • CD-ROM - virtuelles Laufwerk mit einem Systemabbild;
  • Grafik Parameter für die Verbindung zu einer virtuellen Maschine über eine grafische Konsole (in diesem Beispiel verwenden wir VNC); Hören - an welcher Adresse werden VNC-Anfragen empfangen (in unserem Beispiel alle); Passwort - Passwort für die Verbindung über VNC;
  • Betriebssystemvariante – Gastbetriebssystem (wir haben die gesamte Liste mit dem Befehl erhalten osinfo-query os, in diesem Beispiel installieren wir Ubuntu 18.04).

Verbindung zu einer virtuellen Maschine herstellen

Laden Sie auf dem Computer, von dem aus wir mit virtuellen Maschinen arbeiten möchten, einen VNC-Client herunter, beispielsweise TightVNC, und installieren Sie ihn.

Auf dem Server geben wir ein:

virsh vncdisplay VM1

Der Befehl zeigt an, auf welchem ​​Port VNC für Maschine VM1 ausgeführt wird. Ich hatte:

* :1 bedeutet, dass Sie 1 zu 5900 addieren müssen - 5900 + 1 = 5901.

Starten Sie den von uns installierten TightVNC Viewer und geben Sie die Verbindungsdaten ein:

Klicke auf Verbinden. Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie das Kennwort ein, das Sie beim Erstellen der VM angegeben haben ( vnc_password). Wir werden über eine Remote-Konsole eine Verbindung zur virtuellen Maschine herstellen.

Wenn wir uns nicht an das Passwort erinnern, öffnen wir das Setup der virtuellen Maschine mit dem Befehl:

Und wir finden die Zeile:



* In diesem Beispiel wird ein Passwort für den Zugriff auf die virtuelle Maschine verwendet 12345678 .

Verwalten einer virtuellen Maschine über die Befehlszeile

Beispiele für Befehle, die beim Arbeiten mit virtuellen Maschinen nützlich sein können.

1. Holen Sie sich eine Liste der erstellten Maschinen:

virsh list --all

2. Aktivieren Sie die virtuelle Maschine:

virsh startet VM-Name

* Wo VM-Name— der Name der erstellten Maschine.

3. Fahren Sie die virtuelle Maschine herunter:

ubuntu-vm-builder ist ein von Canonical entwickeltes Paket, um die Erstellung neuer virtueller Maschinen zu erleichtern.

Um es zu installieren, geben Sie Folgendes ein:

apt-get installiere ubuntu-vm-builder