Windows 10 UEFI Физический для KVM/libvirt Виртуальный
Оригинальное сообщение
Я переношу свой компьютер с Windows 10 на Linux. Есть несколько вещей, для которых мне все еще нужна Windows, и в настоящее время я выполняю двойную загрузку с Windows и Linux на отдельных физических дисках. Я хотел бы отказаться от двойной загрузки и запустить свою установку Windows 10, виртуализированную в KVM+libvirt+qemu.
Сложность здесь, похоже, заключается в том, что моя установка Windows 10 была выполнена через UEFI (с таблицей разделов GPT), а не через устаревший BIOS МБР. Вот как выглядит мой диск Windows:
$ 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
Поскольку он был настроен как UEFI, похоже, для виртуализации необходимы некоторые дополнительные шаги, поскольку libvirt, похоже, не поддерживает UEFI из коробки. Я попытался экспортировать каждый из вышеперечисленных разделов в виде образа qcow2 с помощью такой команды:
$ qemu-img convert -f raw -O qcow2 /dev/nvme0n1p1 win10_part1.qcow2
И повторяется для всех четырех разделов. Затем я создал виртуальную машину под управлением virt-manager, импортировав все четыре диска qcow2. Я установил пакет "ovmf" для своего дистрибутив (Manjaro) и добавил эту строку в файл конфигурации XML виртуальной машины в разделе "ОС":
<loader type='rom'>/usr/share/ovmf/x64/OVMF_CODE.fd</loader>
Когда я загружаю виртуальную машину, я вижу заставку TianoCore. Но это просто сбрасывает меня в оболочку grub2, вместо того, чтобы найти загрузчик Windows.
Я также попытался загрузить эту виртуальную машину из установочного ISO Windows 10, надеясь, что смогу "восстановить" систему для загрузки. Но это не сработало.
Я уверен, что что-то упускаю. Еще лучше было бы обратить это для загрузки MBR, просто чтобы избежать зависимости OVMF.
Редактировать/Обновлять...
Согласно комментарию Дилана, я действительно заставил его работать, но по пути возникло несколько небольших проблем, я подумал, что опубликую их здесь на случай, если у других возникнут подобные проблемы.
Первым шагом, как писал Дилан, было создание образа всего диска , а не отдельных дисков для каждого раздела. Я использовал эту команду:
qemu-img convert -f raw -O qcow2 /dev/nvme0n1 win10_import.qcow2
Затем я создал виртуальную машину в virt-manager, указав выше образа диска ("win10_import.qcow2") в качестве моего диска.
Далее следовало использовать прошивку UEFI OVMF (TianoCore). Это было сделано путем установки пакета ovmf ("ovmf" на Manjaro), а затем добавления его в XML-определение виртуальной машины:
<os>
<type arch='x86_64' machine='pc-q35-3.0'>hvm</type>
<loader type='rom'>/usr/share/ovmf/x64/OVMF_CODE.fd</loader>
</os>
После этого Windows будет по-прежнему аварийно завершать работу во время загрузки с синим экраном и ошибкой "ИСКЛЮЧЕНИЕ СИСТЕМНОГО ПОТОКА НЕ ОБРАБОТАНО". По какой-то причине ему не понравилась настройка процессора "Копировать конфигурацию центрального процессора". Я перешел на "core2duo", и это загрузилось. Прямо сейчас я использую "Сэндибридж", и это тоже работает. (Чего бы это ни стоило, я создал еще одну отдельную виртуальную машину Win10, выполнив новую установку с нуля. Что виртуальная машина действительно работала с "Конфигурацией процессора узла копирования". Мой процессор AMD Ryzen 5 2400G.)
Следующая проблема, с которой я столкнулся, заключалась в том, что Windows 10 работала невыносимо медленно. Каким-то образом мне удалось создать виртуальную машину с помощью гипервизора "QEMU TCG", а не "KVM". Это имеет смысл, так как первое эмуляция и ужасно медленная, в то время как последняя является настоящей аппаратной виртуализацией. (Как это произошло: пытаясь заставить это работать, я также выполнил обновление BIOS в физической системе, которое сбросило все мои настройки BIOS, одна из которых отключила виртуализацию (называемую "SVM" в моем BIOS). Как только я исправил это, я смог использовать гипервизор KVM с почти родной скоростью.)
Следующая проблема заключалась в том, что разрешение экрана застряло на 800x600. Windows не позволила бы мне его изменить. Я мог бы сделать одноразовое исправление, нажав Esc, как только машина загрузится, сразу после появления всплеска TianoCore. Это приводит меня в настройки UEFI, где я могу принудительно увеличить разрешение. Но это не постоянное исправление.
Поскольку моя виртуальная машина указала QXL в качестве видеоустройства, мне нужно было установить драйверы QXL в Windows. На этой странице Создание виртуальных машин Windows с использованием драйверов virtIO объясняется, как это сделать. Краткая версия такова: загрузите virtio-win iso на главной машине. Добавьте его в виртуальную машину в качестве привода компакт-дисков. Затем загрузитесь в виртуальную машину, перейдите в нужную папку на компакт-диске и установите все необходимые драйверы VirtIO. В частности, для видео QXL в Windows 10 в папке "qxldod" есть нужный драйвер.