Windows 7 kann mit qemu nicht auf KVM installiert werden

8

Ich versuche, Windows 7 als Gastbetriebssystem in einer virtuellen Maschine zu installieren, die von meiner 64-Bit-Ubuntu Karmic-Box gehostet wird. Ich bin so weit, dass ich meine Spracheinstellungen auswähle und auf "Jetzt installieren" klicke, aber kurze Zeit später bekomme ich einen blauen Bildschirm mit dem Tod.

Ich habe ein paar Variationen ausprobiert, einschließlich der Verwendung der 32-Bit-Version von Windows 7, die sehr schnell ausfällt. Der virt-installBefehl, den ich ausprobiert habe, umfasst Folgendes:

sudo virt-install --connect qemu:///system -n ksm-win7 -r 2048 \
--disk path=/home/kief/VM-Images/ksm-win7.qcow2,size=50 \
-c /var/Software/Windows7/Full/64bit/SW_DVD5_SA_Win_Ent_7_64BIT_English_Full_MLF_X15-70749.ISO \
--vnc --os-type windows --os-variant vista --hvm

Die begrenzten Informationen, die ich finden konnte, deuteten darauf hin, dass "Vista" als --os-Variante funktionieren sollte. Ich habe keine spezifischen Werte für Windows 7 gefunden.

Hier ist mein blauer Bildschirm:

BSOD

Ich habe durch Googeln sehr wenig herausgefunden, daher schätze ich, dass dies kein Fall ist, in dem KVM Windows 7 einfach nicht unterstützt.

Aktualisieren:

Ich konnte mit der grafischen App "Virtual Machine Manager" erfolgreich eine Windows 7-VM erstellen, obwohl ich die Ursache des Problems mit der mit erstellten VM nicht wirklich verstehe virt-install. Der Vergleich der Konfigurationsdateien unter / etc / libvirt / qemu liefert einige Hinweise, obwohl ich nicht genug weiß, um sie richtig zu interpretieren. Die interessanten Unterschiede in den beiden VM-Konfigurationen sind:

--- win7-virt-install.xml
+++ win7-vmm.xml
-<domain type='qemu'>
+<domain type='kvm'>
@@ -21 +21 @@
-    <emulator>/usr/bin/qemu-system-x86_64</emulator>
+    <emulator>/usr/bin/kvm</emulator>
@@ -23 +23 @@
-      <source file='/home/kief/VM-Images/ksm-win7.qcow2'/>
+      <source file='/var/lib/libvirt/images/ksm-win7x64.img'/>

Ich bin mir nicht sicher, ob dies bedeutet, dass die funktionierende VM überhaupt kein qemu verwendet oder ob es einen anderen Unterschied in der Art und Weise gibt, wie es mit kvm verwendet wird.

Update2:

Also habe ich meine eigene Frage (meistens) unten beantwortet. Eine KVM-VM muss die KVM-eigene CPU-Emulation anstelle von qemu verwenden, damit ich Windows 7 installieren kann. Ich bin nicht sicher, ob es etwas gibt, das getan werden kann, um es auf einer Qemu-Emulations-CPU zum Laufen zu bringen, oder ob eine neuere Version es unterstützen wird. Zumindest ist es aber möglich, es auf einer KVM-VM zum Laufen zu bringen.

Kief
quelle

Antworten:

7

Hier ist der einfache Weg

Wenn Sie nicht genau wissen, warum Sie ein GuestOS mit virt-install installieren möchten, können Sie dies auf einfache Weise ohne virt-install tun.

Ich habe eine funktionierende VM mit Windows 7 installiert. Hier ist, wie ich es erstellt habe.

Schritt 1: Erstellen Sie das Image der virtuellen Festplatte

qemu-img create -f qcow2 vdisk.img 100g

Dadurch wird eine virtuelle Festplatte im qcow2-Format erstellt. Wenn Sie die Partitionsgröße auf 100 g (Gigabyte) festlegen, werden keine 100 g physischen Festplattenspeicher zugewiesen. Die virtuelle Partition nimmt nur so viel Platz ein wie die darin enthaltenen Daten. Die 100g machen es einfach, so dass Sie (hoffentlich) nie die Größe erhöhen müssen. Das Erhöhen der Standardgröße eines qcow2-Bildes ist immer noch ein Problem .

Schritt 2: Installieren Sie das Betriebssystem

Wenn Sie zum Laden des Betriebssystems eine physische CD-ROM verwenden, verwenden Sie den folgenden Befehl.

sudo kvm -m 750 -cdrom /dev/sr0 -boot d vdisk.img

Wenn Sie ein Disk-Image zum Laden des Betriebssystems verwenden, verwenden Sie diesen Befehl.

sudo kvm -m 750 -cd-rom /path/to/image/image.iso -boot d vdisk.img

Hier ist die Aufteilung der Befehle:

  • kvm - ruft die virtuelle Maschine des Kernels auf (offensichtlich)
  • -m 750 - Weist der virtuellen Maschine 750 MB Speicher zu
  • -cd-rom legt die CD-ROM an. Verwenden Sie für eine physische Festplatte dieselbe Festplatte wie für Ihr HostOS. Geben Sie für ein Bild einen Pfad zur Bilddatei an.
  • -boot d startet die virtuelle Maschine von der CD-ROM

Ich habe die Speicherkapazität für das anfängliche Laden auf 750 festgelegt, damit ich sicher sein kann, dass die Installation abgeschlossen ist, ohne dass der Arbeitsspeicher knapp wird. Für nachfolgende Ladevorgänge setze ich es normalerweise auf 512.

Hinweis: AFIAK, der Befehl kvm funktioniert nur in neueren Versionen von Debian / Ubuntu oder deren Derivaten. Wenn dies nicht funktioniert, lautet der entsprechende (und häufigere) Befehl "qemu-system-x86_64" oder "qemu-kvm" für 32-Bit.

Nachdem Sie den gesamten Installationsprozess durchlaufen haben, sollte die VM in einem funktionierenden Betriebssystem neu gestartet werden. Um die VM erneut zu laden, starten Sie einfach diesen Befehl:

kvm -m 512 vdisk.img

Mit allen Befehlszeilenoptionen müssen Sie zusätzliche physische Datenträger, Hardware usw. bereitstellen. Informationen zu Befehlszeilenoptionen finden Sie unter kvm --help.

Wenn Sie den Unterschied zwischen "Paravirtualisierung" und "native Virtualisierung" nicht verstehen , hat Matthias die Unterschiede bereits großartig erklärt .

Für eine ausführlichere Erklärung dieses Vorgangs lesen Sie diesen Artikel .

Evan Scholle
quelle
3

Der Grund für dieses Problem bei der Installation von Windows mit der QEMU-Virtualisierung ist der Unterschied zwischen der QEMU- "Paravirtualisierung" und der KVM-"nativen Virtualisierung". Paravirtualisierung bedeutet, dass es eine CPU simuliert und einen speziellen Kernel auf der Seite des Clients (virtuelles System) benötigt, damit dieses System weiß, wie es die CPU-Funktionen korrekt aufruft. Das ist der Grund, warum nicht alle Systeme mit qemu ohne KVM laufen können.

Auf der anderen Seite können virtuelle Systeme, die KVM verwenden, direkt auf die CPU zugreifen (da KVM die Unterstützung von AMD / Intel Hardware Virtualization verwendet). In diesem Fall wird kein spezieller Kernel benötigt. Der Nachteil ist, dass der Host über eine moderne CPU verfügen muss, die diese Hardware-Virtualisierung unterstützt (SVM unter AMD und VT-x für Intel), und dass das Client-System auf dieser CPU ausgeführt werden kann (wie die meisten Systeme kein Problem) kann auf einem x86) laufen, was die Portabilität verringert.

Matthias
quelle
1
+1 große Erklärung der Unterschiede zwischen "Paravirtualisierung" und "native Virtualisierung"
Evan Plaice
2

Die 0x1e-Ausnahme ist KMODE_EXCEPTION_NOT_HANDLED, dass es sich normalerweise entweder um einen Hardware- oder einen Gerätetreiberfehler handelt. Ich vermute, dass Windows aus irgendeinem Grund die emulierte Hardware der virtuellen Maschine nicht mag.

Haben Sie es mit VirtualBox versucht ? Sie haben eine Veröffentlichung für Karmic Koala und unterstützen Windows 7 (ich starte Win7 gerade auf einer Windows XP-Box).

Jared Harley
quelle
Danke, ich möchte bei KVM bleiben, da wir es mit Eukalyptus verwenden. Dies ist für mich ebenso eine Lernübung wie eine pragmatische Notwendigkeit, Windows 7 zum Laufen zu bringen.
Kief
1

Nach einigen Nachforschungen und Konsultationen mit einem Kollegen scheint das Problem bei der QEMU-CPU-Emulation zu liegen. Mein virt-install-Befehl hat die virtuelle KVM-Maschine mit der CPU-Emulation von qemu erstellt. VMM hat eine virtuelle KVM-Maschine mithilfe der KVM-eigenen CPU-Emulation erstellt (obwohl immer noch qemu zum Emulieren anderer Teile des PCs verwendet wird, da die aktuelle KVM-Version hierfür qemu verwendet).

Durch Hinzufügen des Parameters --accelerate zu meinem Befehl virt-install kann ich eine VM erstellen und Windows 7 darauf installieren.

Die Antwort scheint also zu sein, dass Windows 7 nicht mit der CPU-Emulation qemu-kvm-0.11.0 auf einer virtuellen Maschine installiert werden kann. Dies kann jedoch mit der KVM-eigenen CPU-Emulation umgangen werden. Dies geschieht mit der Option --accelerate für die virtuelle Installation. Der Konfigurationsdateiparameter ist <domain type="kvm">eher als <domain type="qemu">.

Kief
quelle
Danke dafür! Ich habe die XML-Datei wie vorgeschlagen bearbeitet, kvm für qemu ersetzt und Win7 64bit ohne Probleme installiert! (läuft auf Fed12 64bit)
0

Der andere Unterschied, den ich von oben sehe, ist, dass KVM nur 32-Bit-Emulation sein sollte ... oder zumindest mit Ihrem XML-Diff, der auffällt.

Es sieht so aus, als ob KVM um 64-Bit-Unterstützung erweitert wurde. Qemu-system-x86_64 --acceleratekönnte Ihnen also sowohl KVM als auch 64-Bit bieten, vorausgesetzt, Ihr Kernel wurde von Ihrer Distribution dafür entwickelt.

Mike Mestnik
quelle
0

Ich konnte die Installation starten, indem ich zuerst die Anzeige cirruswie hier empfohlen änderte : https://ubuntuforums.org/showthread.php?t=2325843&s=67c08420c394b532ea814a0c46752914&p=13500324#post13500324

  1. Installieren Sie Win 7 mit Cirrus-Grafiken, fahren Sie VM herunter
  2. Fügen Sie eine zweite Grafikkarte als qxl hinzu
  3. booten sie vm und installieren sie den qxl treiber
  4. Fahren Sie VM herunter und entfernen Sie den Cirrus-Adapter
Jiab77
quelle
Vielen Dank für Ihren Kommentar, ich habe die komplette Lösung hinzugefügt.
Jiab77