Windows 7 non si installa su KVM con qemu


8

Sto cercando di installare Windows 7 come SO guest in una macchina virtuale ospitata dalla mia casella Ubuntu Karmic a 64 bit. Sono arrivato al punto di selezionare le mie impostazioni della lingua e fare clic su "Installa ora", ma poco dopo ricevo una schermata blu della morte.

Ho provato alcune varianti, incluso l'uso della versione a 32 bit di Windows 7, che fallisce molto rapidamente. Il virt-installcomando che ho provato include questo:

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

Le informazioni limitate che ho trovato hanno suggerito che 'Vista' dovrebbe funzionare come la variante --os, non ho trovato alcun valore specifico per Windows 7.

Ecco la mia schermata blu:

BSOD

Ho trovato molto poco su Google, quindi suppongo che questo non sia un caso di KVM che semplicemente non supporta Windows 7.

Aggiornare:

Sono stato in grado di creare correttamente una VM Windows 7 utilizzando l'app grafica "Virtual Machine Manager", anche se non capisco davvero la causa del problema con la VM creata con virt-install. Il confronto dei file di configurazione in / etc / libvirt / qemu fornisce alcuni indizi, anche se non ne so abbastanza per interpretarli correttamente. Le differenze interessanti nelle due configurazioni della VM sono:

--- 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'/>

Non sono sicuro che ciò significhi che la VM funzionante non utilizza affatto qemu o se c'è qualche altra differenza nel modo in cui viene utilizzata con kvm.

Update2:

Quindi ho risposto alla mia domanda (principalmente) di seguito. Una VM KVM deve utilizzare l'emulazione della CPU di KVM anziché quella di qemu per poter installare Windows 7. Non sono sicuro se c'è qualcosa che può essere fatto per farlo funzionare su una CPU di emulazione qemu, o se una versione più recente lo supporterà. Ma almeno è possibile farlo funzionare su una macchina virtuale KVM.

Risposte:


7

Ecco il modo semplice

A meno che tu non abbia dei motivi specifici per cui installeresti un GuestOS usando virt-install, ecco il modo "semplice" per farlo senza virt-install.

Ho una VM funzionante con Windows 7 installato. Ecco come l'ho creato.

Passaggio 1: creare l'immagine del disco virtuale

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

Questo crea un disco virtuale nel formato qcow2. L'impostazione della dimensione della partizione su 100 g (gigabyte) non alloca 100 gb di spazio fisico sul disco rigido. La partizione virtuale occuperà tanto spazio quanto i dati che contiene. I 100 g lo rendono così, spero che tu non abbia mai bisogno di aumentare le dimensioni. Aumentare le dimensioni predefinite di un'immagine qcow2 è ancora una seccatura in a ** da fare .

Passaggio 2: installare il sistema operativo

Se stai usando un vero cd-rom fisico per caricare il sistema operativo, usa il seguente comando.

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

Se si utilizza un'immagine del disco per caricare il sistema operativo, utilizzare questo comando.

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

Ecco la ripartizione dei comandi:

  • kvm - chiama la macchina virtuale del kernel (ovvio)
  • -m 750: alloca 750 MB di memoria per la macchina virtuale
  • -cd-rom imposta il cd-rom. Per un disco fisico utilizzare lo stesso disco di HostOS. Per un'immagine, fornire un percorso al file di immagine.
  • -boot d avvia la macchina virtuale dal cd-rom

Ho impostato il footprint di memoria per il caricamento iniziale su 750 come conservativo, quindi posso essere sicuro che l'installazione termina senza esaurire la memoria. Per i carichi successivi di solito lo imposto su 512.

Nota: AFIAK, il comando kvm funziona solo nelle versioni più recenti di Debian / Ubuntu o dei loro derivati. Se non funziona, il comando equivalente (e più comune) è qemu-system-x86_64 o qemu-kvm per 32 bit.

Dopo aver completato l'intero processo di installazione, la VM dovrebbe riavviarsi in un sistema operativo funzionante. Per caricare nuovamente la VM basta avviare questo comando:

kvm -m 512 vdisk.img

Con qualsiasi opzione della riga di comando è necessario montare ulteriori dischi fisici, hardware, ecc. Per trovare informazioni sulle opzioni della riga di comando, consultare kvm --help.

Se non capisci la differenza tra 'paravirtualizzazione' e 'virtualizzazione nativa' Matthias 'ha già fatto una grande spiegazione delle differenze .

Per una spiegazione più "approfondita" di questo processo leggi questo articolo .


3

Il motivo di questo problema con l'installazione di Windows con la virtualizzazione di qemu è la differenza tra "paravirtualizzazione" di qemu e "virtualizzazione nativa" di KVM. Paravirtualizzazione significa che simula una CPU e ha bisogno di un kernel speciale sul lato del client (sistema virtuale) in modo che questo sistema sappia come chiamare correttamente la CPU. Questo è il motivo per cui non tutti i sistemi sono in grado di eseguire qemu senza KVM.

Dall'altro lato, i sistemi virtuali che utilizzano KVM possono accedere direttamente alla CPU (poiché KVM utilizza il supporto di virtualizzazione hardware AMD / Intel). In tal caso non è necessario alcun kernel speciale. Il rovescio della medaglia è che l'host deve avere una CPU moderna che supporti questa virtualizzazione hardware (chiamata SVM su AMD e VT-x per Intel) e che il sistema client deve essere in grado di funzionare su quella CPU (non un problema, come la maggior parte dei sistemi può essere eseguito su un x86), riducendo la portabilità.


1
+1 grande spiegazione delle differenze tra "paravirtualizzazione" e "virtualizzazione nativa"
Evan Plaice,

2

L'eccezione 0x1e è KMODE_EXCEPTION_NOT_HANDLED, che di solito è un errore relativo all'hardware o al driver del dispositivo. La mia ipotesi è che, per qualsiasi motivo, a Windows non piaccia l'hardware emulato dalla macchina virtuale.

Hai provato ad usare VirtualBox ? Hanno una versione per Karmic Koala e supportano Windows 7 (sto eseguendo Win7 in questo momento su una scatola di Windows XP).


Grazie, voglio restare con KVM, poiché lo stiamo usando con Eucalyptus. Questo è per me un esercizio di apprendimento tanto quanto un'esigenza pragmatica di far funzionare Windows 7.
Kief,

1

Dopo alcune ricerche e consultazioni con un collega, il problema sembra riguardare l'emulazione della CPU qemu. Il mio comando virt-install ha creato la macchina virtuale KVM usando l'emulazione CPU di qemu. VMM ha creato una macchina virtuale KVM utilizzando l'emulazione della CPU di KVM (anche se continua a utilizzare qemu per emulare altre parti del PC, poiché l'attuale versione di KVM utilizza qemu per questo).

Aggiungendo il parametro --accelerate al mio comando virt-install, sono in grado di creare una macchina virtuale e installare Windows 7 su di essa.

Quindi, la risposta sembra essere che Windows 7 non può essere installato su una macchina virtuale usando l'emulazione CPU qemu-kvm-0.11.0, ma questo può essere aggirato usando l'emulazione CPU di KVM. Questo viene fatto usando l'opzione --accelerate di virt-install. Il parametro del file di configurazione sarà <domain type="kvm">anziché <domain type="qemu">.


grazie per questo! Ho modificato il file XML come suggerito, sostituendo kvm con qemu e ho installato Win7 64 bit senza problemi! (in esecuzione su Fed12 64 bit)

0

L'altra differenza che vedo dall'alto è che KVM dovrebbe essere solo l'emulazione a 32 bit ... o almeno con il tuo diff XML che risalta.

Sembra che il supporto a 64 bit sia stato aggiunto a KVM, quindi qemu-system-x86_64 con --acceleratepotrebbe / potrebbe darti sia KVM che 64 bit, a condizione che il tuo kernel sia costruito per questo dalla tua distribuzione.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.