Windows 7 ne parvient pas à installer sur KVM avec qemu

8

J'essaie d'installer Windows 7 en tant que système d'exploitation invité dans une machine virtuelle hébergée par ma boîte Ubuntu Karmic 64 bits. J'arrive au point de sélectionner mes paramètres de langue et de cliquer sur «Installer maintenant», mais peu de temps après, j'obtiens un écran bleu de la mort.

J'ai essayé quelques variantes, notamment en utilisant la version 32 bits de Windows 7, qui échoue très rapidement. La virt-installcommande que j'ai essayée inclut ceci:

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

Les informations limitées que j'ai pu trouver suggéraient que «Vista» devrait fonctionner comme la variante --os, je n'ai trouvé aucune valeur spécifique à Windows 7.

Voici mon écran bleu:

BSOD

J'ai trouvé très peu de choses sur Google, donc je suppose que ce n'est pas un cas de KVM qui ne prend tout simplement pas en charge Windows 7.

Mise à jour:

J'ai réussi à créer une machine virtuelle Windows 7 en utilisant l'application graphique "Virtual Machine Manager", bien que je ne comprenne pas vraiment la cause du problème avec la machine virtuelle créée avec virt-install. La comparaison des fichiers de configuration sous / etc / libvirt / qemu fournit quelques indices, bien que je n'en sache pas assez pour les interpréter correctement. Les différences intéressantes dans les deux configurations de VM sont:

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

Je ne sais pas si cela signifie que la machine virtuelle fonctionnelle n'utilise pas du tout qemu, ou s'il y a une autre différence dans la façon dont elle est utilisée avec kvm.

Update2:

J'ai donc répondu à ma propre question (principalement) ci-dessous. Une machine virtuelle KVM doit utiliser la propre émulation de processeur de KVM plutôt que celle de qemu pour que je puisse installer Windows 7. Je ne sais pas s'il est possible de faire quelque chose pour le faire fonctionner sur un processeur d'émulation qemu, ou si une version plus récente le supportera. Mais au moins, il est possible de le faire fonctionner sur une machine virtuelle KVM.

Kief
la source

Réponses:

7

Voici le moyen facile

Sauf si vous avez des raisons spécifiques pour lesquelles vous installez un GuestOS à l'aide de virt-install, voici la manière «facile» de le faire sans virt-install.

J'ai une machine virtuelle fonctionnelle avec Windows 7 installé. Voici comment je l'ai créé.

Étape 1: créer l'image du disque virtuel

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

Cela crée un disque virtuel au format qcow2. La définition de la taille de la partition sur 100 g (gigaoctets) n'allouera pas 100 Go d'espace disque physique. La partition virtuelle ne prendra autant d'espace que les données qu'elle contient. Le 100g fait juste pour que vous n'espérez (espérons-le) jamais augmenter la taille. L'augmentation de la taille par défaut d'une image qcow2 est toujours un problème dans le ** .

Étape 2: installez le système d'exploitation

Si vous utilisez un CD-ROM physique réel pour charger le système d'exploitation, utilisez la commande suivante.

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

Si vous utilisez une image disque pour charger le système d'exploitation, utilisez cette commande.

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

Voici la répartition des commandes:

  • kvm - appelle la machine virtuelle du noyau (évident)
  • -m 750 - alloue 750 Mo de mémoire pour la machine virtuelle
  • -cd-rom configure le cd-rom. Pour un disque physique, utilisez le même disque que votre HostOS. Pour une image, indiquez un chemin d'accès au fichier image.
  • -boot d démarre la machine virtuelle depuis le cd-rom

J'ai défini l'encombrement de la mémoire pour la charge initiale à 750 pour être conservateur afin que je puisse être sûr que l'installation se termine sans manquer de mémoire. Pour les charges suivantes, je le règle généralement sur 512.

Remarque: AFIAK, la commande kvm ne fonctionne que dans les versions plus récentes de Debian / Ubuntu ou de leurs dérivés. Si cela ne fonctionne pas, la commande équivalente (et plus courante) est qemu-system-x86_64 ou qemu-kvm pour 32 bits.

Après avoir effectué tout le processus d'installation, la machine virtuelle devrait redémarrer dans un système d'exploitation fonctionnel. Pour charger à nouveau la VM, il suffit de lancer cette commande:

kvm -m 512 vdisk.img

Avec tous les commutateurs de ligne de commande dont vous avez besoin pour monter des disques physiques, du matériel, etc. supplémentaires. Pour trouver des informations sur les commutateurs de ligne de commande, consultez kvm --help.

Si vous ne comprenez pas la différence entre la «paravirtualisation» et la «virtualisation native», Matthias a déjà fait une excellente explication des différences .

Pour une explication plus «approfondie» de ce processus, lisez cet article .

Plie d'Evan
la source
3

La raison de ce problème avec l'installation de Windows avec la virtualisation qemu est la différence entre la "paravirtualisation" qemu et la "virtualisation native" des KVM. La paravirtualisation signifie qu'elle simule un CPU et a besoin d'un noyau spécial du côté du client (système virtuel) pour que ce système sache comment appeler correctement les fonctions du CPU. C'est la raison pour laquelle tous les systèmes ne peuvent pas fonctionner avec qemu sans KVM.

De l'autre côté, les systèmes virtuels utilisant KVM peuvent accéder directement au CPU (car KVM utilise le support AMD / Intel Hardware Virtualization). Dans ce cas, aucun noyau spécial n'est nécessaire. L'inconvénient est que l'hôte doit avoir un processeur moderne qui prend en charge cette virtualisation matérielle (appelé SVM sur AMD et VT-x pour Intel) et que le système client doit pouvoir fonctionner sur ce processeur (pas un problème, car la plupart des systèmes peut fonctionner sur un x86), ce qui réduit la portabilité.

Matthias
la source
1
+1 grande explication des différences entre la «paravirtualisation» et la «virtualisation native»
Evan Plaice
2

L'exception 0x1e est KMODE_EXCEPTION_NOT_HANDLED, qui est généralement une erreur liée au matériel ou au pilote de périphérique. Je suppose que, pour une raison quelconque, Windows n'aime pas le matériel émulé de la machine virtuelle.

Avez-vous essayé d'utiliser VirtualBox ? Ils ont une version pour Karmic Koala et ils prennent en charge Windows 7 (j'utilise Win7 en ce moment sur une boîte Windows XP).

Jared Harley
la source
Merci, je veux rester avec KVM, car nous l'utilisons avec Eucalyptus. C'est autant un exercice d'apprentissage pour moi qu'un besoin pragmatique de faire fonctionner Windows 7.
Kief
1

Après quelques recherches et consultations avec un collègue, le problème semble être lié à l'émulation du processeur qemu. Ma commande virt-install a créé la machine virtuelle KVM en utilisant l'émulation CPU de qemu. VMM a créé une machine virtuelle KVM en utilisant la propre émulation CPU de KVM (bien qu'utilisant toujours qemu pour émuler d'autres parties du PC, car la version actuelle de KVM utilise qemu pour cela).

En ajoutant le paramètre --accelerate à ma commande virt-install, je peux créer une machine virtuelle et y installer Windows 7.

Ainsi, la réponse semble être que Windows 7 ne peut pas être installé sur une machine virtuelle à l'aide de l'émulation de processeur qemu-kvm-0.11.0, mais cela peut être résolu en utilisant la propre émulation de processeur de KVM. Cela se fait en utilisant l'option --accelerate pour virt-install. Le paramètre du fichier de configuration sera <domain type="kvm">plutôt que <domain type="qemu">.

Kief
la source
Merci pour cela! J'ai édité le fichier xml comme suggéré, substituant kvm à qemu et installé Win7 64bit sans problème! (fonctionnant sur Fed12 64 bits)
0

L'autre différence que je vois ci-dessus est que KVM ne devrait être qu'une émulation 32 bits ... ou du moins avec votre différence XML qui se démarque.

Il semble que le support 64 bits ait été ajouté à KVM, donc qemu-system-x86_64 avec --acceleratepourrait / pourrait vous donner à la fois KVM et 64 bits, à condition que votre noyau soit construit pour cela par votre distribution.

Mike Mestnik
la source
0

J'ai pu démarrer l'installation en modifiant d'abord l'affichage cirruscomme recommandé ici: https://ubuntuforums.org/showthread.php?t=2325843&s=67c08420c394b532ea814a0c46752914&p=13500324#post13500324

  1. installer Win 7 avec des graphismes cirrus, arrêter vm
  2. ajouter un deuxième adaptateur graphique en tant que qxl
  3. démarrer vm et installer le pilote qxl
  4. arrêter vm et retirer l'adaptateur cirrus
Jiab77
la source
Merci pour votre commentaire, j'ai ajouté la solution complète.
Jiab77