web-dev-qa-db-fra.com

Windows 10 UEFI Physique à KVM / LIBVIRT Virtual

Publication originale

Je migre mon PC de Windows 10 en Linux. Il y a quelques choses pour lesquelles j'ai toujours besoin de Windows et je suis actuellement double-démarrage, avec Windows et Linux sur des disques physiques distincts. J'aimerais vous échapper du double démarrage et exécuter mon installation Windows 10 virtualisée sous KVM + Libvirt + QEMU.

La partie délicate ici semble être que mon installation Windows 10 a été effectuée via UEFI (avec la table de partition GPT) plutôt que le BIOS Legacy BIOS MBR. Voici ce que mon disque Windows ressemble à:

$ Sudo parted /dev/nvme0n1 print
Model: Unknown (unknown)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size    File system  Name                          Flags
 1      1049kB  524MB  523MB   ntfs         Basic data partition          hidden, diag
 2      524MB   628MB  104MB   fat32        EFI system partition          boot, esp
 3      628MB   645MB  16.8MB               Microsoft reserved partition  msftres
 4      645MB   500GB  499GB   ntfs         Basic data partition          msftdata

Comme il a été configuré comme UEFI, il semble que certaines étapes supplémentaires soient nécessaires pour virtualiser, car LibVirt ne semble pas supporter UEFI hors de la boîte. Ce que j'ai essayé était d'exporter chacune des partitions ci-dessus comme une image Qcow2, avec une commande comme celle-ci:

$ qemu-img convert -f raw -O qcow2 /dev/nvme0n1p1 win10_part1.qcow2

Et répété pour les quatre partitions. Ensuite, j'ai créé une machine virtuelle sous ART-Manager, important les quatre disques Qcow2. J'ai installé le package "OVMF" pour ma distribution (Manjaro) et ajouté cette ligne dans le fichier de configuration XML de la machine virtuelle, dans la section "OS":

<loader type='rom'>/usr/share/ovmf/x64/OVMF_CODE.fd</loader>

Lorsque je démarre la machine virtuelle, je vois l'écran Splash Tianocore. Mais cela me laissa tomber dans une coque Grub2, plutôt que de trouver le chargeur de démarrage Windows.

J'ai également essayé de démarrer cette VM à partir de l'ISO de Windows 10, en espérant que je pourrais "réparer" le système pour démarrer. Mais ça n'a pas marché.

Je suis sûr que je manque quelque chose. Encore mieux serait de convertir cela en MBR Boot, juste pour éviter la dépendance OVMF.

Éditer/mettre à jour ...

Le commentaire de Dylan, je l'ai fait travailler, mais un certain nombre de petits problèmes sont arrivés en cours de route, je pensais que je les posterais ici au cas où d'autres ont des problèmes similaires.

Comme Dylan a écrit, la première étape a été créée pour créer une image du Disque entier, plutôt que des disques individuels par partition. J'ai utilisé cette commande:

qemu-img convert -f raw -O qcow2 /dev/nvme0n1 win10_import.qcow2

J'ai ensuite créé la machine virtuelle dans virt-manager, en spécifiant l'image de disque ci-dessus ("win10_import.qcow2") comme mon lecteur.

Ensuite, il était d'utiliser le micrologiciel OVMF (Tianocore) UEFI. Cela a été fait en installant le paquet OVMF ("OVMF" sur Manjaro), puis l'ajoutez à la définition XML de la machine virtuelle:

  <os>
    <type Arch='x86_64' machine='pc-q35-3.0'>hvm</type>
    <loader type='rom'>/usr/share/ovmf/x64/OVMF_CODE.fd</loader>
  </os>

Après cela, Windows serait toujours Crash pendant la botte, avec une crise bluescreen et l'erreur "Exception de thread du système non manipulé". Pour une raison quelconque, il n'a pas aimé le paramètre CPU de la "configuration du processeur de la copie hôte". J'ai changé en "Core2duo", et cela a démarré. En ce moment, j'utilise "Sandybridge" et cela fonctionne également. (Pour ce que ça vaut la peine, j'ai créé un autre, séparé Win10 VM faisant une nouvelle installation à partir de zéro. que VM a fonctionné avec la "configuration du processeur de la copie hôte". My La CPU est AMD Ryzen 5 2400g.)

Problème suivant que j'ai rencontré était que Windows 10 a été insupportablement lent. D'une manière ou d'une autre, j'ai réussi à créer le VM avec l'hyperviseur "QEMU TCG", plutôt que "KVM". Cela a du sens, comme l'ancien est émulation et terriblement lentement, tandis que cette dernière est une véritable virtualisation assistée du matériel. (Comment cela s'est passé: tout en essayant de faire fonctionner cela, j'ai également fait une mise à niveau du BIOS sur le système physique, qui réinitialisez tous mes paramètres de BIOS, dont une virtualisation désactivée (appelée "SVM" dans mon BIOS). Une fois que j'ai corrigé que , J'ai pu utiliser l'hyperviseur de la vitesse quasi native KVM.)

Le prochain numéro était que la résolution de l'écran était bloquée à 800x600. Windows ne me laisserait pas le changer. Je pourrais faire un correctif ponctuel en appuyant sur Esc dès que la machine à bottes, à droite lorsque l'éclaboussure Tianocore apparaît. Cela me prend dans les paramètres UEFI, où je peux forcer une résolution plus élevée. Mais ce n'est pas une solution permanente.

Depuis ma machine virtuelle spécifiée QXL comme périphérique vidéo, je devais installer les pilotes QXL dans Windows. Cette page, Création de machines virtuelles Windows à l'aide de pilotes Virtio explique comment faire cela. La version courte est la suivante: Téléchargez le Virtio-Win ISO sur la machine hôte. Ajoutez-le à la VM sous forme de lecteur de CD-ROM. Ensuite, démarrez dans la machine virtuelle, naviguez sur le bon dossier du CD-ROM et installez tous les pilotes Virtio nécessaires. Spécifiquement, pour QXL Video sur Windows 10, le dossier "QXLDOD" a le bon pilote.

2
Matt

QEMU/LIBVIRT Attendez-vous à ce que vous fournissez un disque virtuel: vos fichiers Qcow2 doivent être du disque et non des partitions. En faisant ce que vous avez fait, vous avez 4 fichiers Qcow2, chacun avec une seule partition. Vous avez cassé la structure précédente, ce n'est pas une surprise que GRUB Je ne peux plus démarrer votre système.

Je vous suggère de convertir tout le lecteur physique en un seul fichier QCow2, puis de connecter ce lecteur virtuel à votre VM.

Vous devriez être capable de supprimer le GRUB fichier EFI à partir de la partition EFI (voir les outils de libguestfs) et obtenir la conduite du menu de démarrage, car le chargeur de démarrage de Windows doit être chargé par l'UEFI de VM.

1
Dylan

Si quelqu'un d'autre trébuche sur cette question, il existe une autre alternative pour l'utilisation d'une installation de Windows natif comme VM à Linux:

  1. Image de l'appareil entier comme selon la réponse acceptée par Dylan.
  2. Exécutez le VM de la mémoire brute.

J'ai géré le n ° 2 ci-dessus, mais cela peut être tout à fait impliqué. Il devient assez complexe et risque si Linux et Windows partagent le même appareil.

Cela ne vaut que l'effort supplémentaire pour diverses raisons:

  • Déjà et comme une configuration à double démarrage.
  • Besoin d'exécuter des fenêtres directement sur le matériel.
    • Performances graphiques pour les jeux (et ne possédez pas de carte mère/configuration capable de faire de la passée PCI avec 2x GPU, etc.).
    • Des applications audio trop sensibles telles que Skype pour les entreprises qui fonctionnent mal à l'aide de périphériques audio virtualisés.
  • Voulez-vous la commodité d'A VM pour exécuter d'autres applications Windows moins exigeantes telles que MS Office, etc.

Il y avait de nombreuses mises en garde/de contournement:

  • J'avais une bagarre pour que Windows reste activée car elle attache évidemment des licences au matériel. Travailler avec l'ajout de numéros de série de la carte mère/BIOS, un modèle de processeur exact et des numéros de stockage du périphérique de stockage semblaient aider.
  • Ajoutez des règles UDev pour faire que le gestionnaire de fichiers Linux/Nautilus/Gnome ignore les partitions Windows.
  • En raison de la paranoïa (les mises à jour Windows inquiet pourraient affecter la configuration de Grub/Boot), je n'ai pas simplement partagé mon entraînement brut entier avec le VM. Au lieu:
    • J'ai cloné la partition (GPT) et la partition EFI vers des fichiers, et j'ai également créé une fausse extrémité du fichier image de périphérique.
    • Utilisé le pilote de bouclage pour traiter les images clonées en tant que périphériques
    • Utilisé le pilote MD (multi-périphériques) via la configuration linéaire MDADM pour chaîner toutes les pièces nécessaires en tant que dispositif hybride imagé et brut pour le VM. Par exemple. md0 Construit à partir de <GPT table clone image/loopback> + <recovery raw> + <EFI clone image/loopback> + <windows system raw> + <end of device GPT backup table/loopback>.
    • Utilisé GDISK et TestDisk pour corriger/ajuster les tables de partition au besoin.
    • 1803 Windows 10 Mise à jour a lancé dans une partie supplémentaire que j'ai dû ajuster! nouvelle partition apparaît après l'installation de la mise à jour Windows 10 avril . Nécessaire pour corriger à nouveau ...

J'ai utilisé une configuration similaire sur un 2e système, mais j'ai beaucoup simplifié la vie, beaucoup plus facile d'avoir 2 périphériques de stockage séparés, un pour Linux, l'autre pour Windows.

1
JPvRiel