Оригинальный пост
Я перевожу свой компьютер с Windows 10 на Linux. Есть несколько вещей, для которых мне все еще нужна Windows, и в настоящее время у меня двойная загрузка, с Windows и Linux на отдельных физических дисках. Я бы хотел избежать двойной загрузки и запустить виртуальную установку Windows 10 под KVM+libvirt+qemu.
Кажется, что сложная часть заключается в том, что моя установка Windows 10 была выполнена через UEFI (с таблицей разделов GPT), а не из устаревшей BIOS MBR. Вот как выглядит мой диск 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-файл конфигурации виртуальной машины в разделе "os":
<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»).
Далее нужно было использовать прошивку OVMF (TianoCore) UEFI. Это было сделано путем установки пакета 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", и это загрузилось. Прямо сейчас я использую "SandyBridge", и это тоже работает. (Для чего бы это ни стоило, я создал другую, отдельную виртуальную машину 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 на хост-компьютер. Добавьте его в виртуальную машину в качестве привода CD-ROM. Затем загрузитесь в виртуальную машину, перейдите в нужную папку на компакт-диске и установите все необходимые драйверы VirtIO. В частности, для видео QXL в Windows 10 папка "qxldod" имеет правильный драйвер.