1

Оригинальный пост

Я перевожу свой компьютер с 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" имеет правильный драйвер.

2 ответа2

1

QEMU/Libvirt ожидает, что вы предоставите виртуальный диск: ваши файлы QCOW2 должны быть дисками, а не разделами. Делая то, что вы сделали, вы получили 4 файла qcow2, каждый с одним разделом. Вы нарушили прежнюю структуру, поэтому неудивительно, что GRUB больше не может загружать вашу систему.

Я предлагаю вам преобразовать весь физический диск в один файл QCOW2, а затем подключить этот виртуальный диск к вашей виртуальной машине.

Вы должны быть в состоянии удалить файл GRUB EFI из раздела EFI (см. Инструменты libguestfs) и получить доступ к меню загрузки, так как загрузчик Windows должен быть загружен UEFI виртуальной машины.

0

Если кто-то еще наткнется на этот вопрос, есть другая альтернатива для использования собственной установки Windows в качестве виртуальной машины в Linux:

  1. Представьте себе все устройство в соответствии с принятым ответом Дилана.
  2. Запустите виртуальную машину из необработанного хранилища.

Мне удалось № 2 выше, но это может быть довольно сложно. Это становится довольно сложным и рискованным, если и Linux, и Windows используют одно и то же устройство.

Это стоит дополнительных усилий по разным причинам:

  • Уже есть и как двойной настройки загрузки.
  • Необходимо запустить Windows непосредственно на оборудовании.
    • Производительность графики для игр (и нет материнской платы / установки, способной выполнять PCI через 2x GPU и т.д.).
    • Чрезмерно чувствительные аудиоприложения, такие как Skype для бизнеса, которые плохо работают через виртуализированные аудиоустройства.
  • Хотите удобство виртуальной машины для запуска других менее требовательных приложений Windows, таких как MS Office и т.д.

Были многочисленные предостережения / обходные пути:

  • Я боролся за то, чтобы окна оставались активированными, поскольку очевидно, что они привязывают лицензии к оборудованию. Трудно было добавить серийные номера материнской платы /BIOS, точную модель процессора и серийные номера устройств хранения.
  • Добавьте правила udev, чтобы файловый менеджер Linux /Nautilus /Gnome игнорировал разделы Windows.
  • Из-за паранойи (обеспокоенные обновления Windows могут повлиять на настройки grub /boot), я не просто поделился всем своим сырым диском с виртуальной машиной. Вместо:
    • Я клонировал таблицу разделов (GPT) и раздел EFI в файлы, а также создал фальшивый конец файла образа устройства.
    • Использовал драйвер loopback для обработки клонированных изображений как устройств
    • Использовал драйвер MD (multi-device) через линейную настройку mdadm, чтобы объединить все необходимые компоненты в единое целое в качестве гибридного образа и необработанного устройства для виртуальной машины. Например, md0 построен из <GPT table clone image/loopback> + <recovery raw> + <EFI clone image/loopback> + <windows system raw> + <end of device GPT backup table/loopback> .
    • Использовал gdisk и testdisk для исправления / корректировки таблиц разделов по мере необходимости.
    • Обновление 1803 windows 10 добавило дополнительные параметры, которые я должен был отрегулировать! Новый раздел появляется после установки обновления Windows 10 апреля . Нужно исправить снова ...

Я использовал аналогичную настройку для второй системы, но значительно упростил мою жизнь, имея два отдельных устройства хранения: одно для Linux, другое для Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .