Что нового

Windows 11 в Proxmox VE: UEFI, TPM 2.0, VirtIO и локальная учётная запись

В этой статье я собрал свою рабочую схему установки Windows 11 в Proxmox VE. В отличие от Windows 10, здесь я сразу создаю виртуальную машину с современным виртуальным оборудованием: q35, OVMF/UEFI, EFI Disk, TPM 2.0, VirtIO-диском и сетевой картой VirtIO.
8e330f70-5c8a-4e33-bb0d-b0100a9973bf.jpg

Отдельно разберу проблему, которая сейчас особенно раздражает при установке Windows 11: требование войти в Microsoft Account.

Я решил её через отдельный ISO с Autounattend.xml. Windows автоматически подхватывает этот файл во время установки, создаёт локальную учётную запись и позволяет обойти этап создания Microsoft Account.

Готовый ISO я также выложил для скачивания.

Что я использую​


Моя стандартная Windows 11 VM выглядит примерно так:

Код:
Machine:
q35

BIOS:
OVMF (UEFI)

EFI Disk:
Enabled
Pre-Enroll Keys: Enabled

TPM:
2.0

CPU:
Type: host
Sockets: 1
Cores: 4-8

RAM:
8-16 GB

SCSI Controller:
VirtIO SCSI single

System Disk:
SCSI
100-150 GB

Discard:
Enabled

IO Thread:
Enabled

Network:
VirtIO

QEMU Guest Agent:
Enabled

В основе получается такая связка:

Код:
q35
+
OVMF / UEFI
+
EFI
+
TPM 2.0
+
VirtIO

Какие ISO мне понадобятся​


Для установки я использую три ISO-образа:

  1. Windows 11 x64.
  2. VirtIO-драйверы.
  3. Отдельный ISO для автоматического создания локальной учётной записи.

VirtIO ISO:

virtio-win-0.1.285.iso

Прямая ссылка:

Код:
https://sysadmin.guru/static/virtio-win-0.1.285.iso

ISO для локальной учётной записи:

win11-local-account-sysadmin_guru.iso

Прямая ссылка:

Код:
https://sysadmin.guru/static/win11-local-account-sysadmin_guru.iso

В итоге к VM у меня подключены:

Код:
Windows 11.iso
virtio-win-0.1.285.iso
win11-local-account-sysadmin_guru.iso

Создаю виртуальную машину​


В Proxmox VE нажимаю:

Код:
Create VM

Выбираю ISO Windows 11 и перехожу к настройке виртуального оборудования.

Сразу стараюсь правильно задать Machine, BIOS, EFI и TPM, потому что менять основные параметры виртуальной платформы после установки Windows без необходимости не стоит.

Machine Type — q35​


Для Windows 11 я выбираю:

Код:
Machine: q35

Старый:

Код:
i440fx

для новой Windows 11 VM я обычно не использую.

q35 лучше подходит для современной UEFI-конфигурации и виртуальных устройств PCI Express.

BIOS — OVMF / UEFI​


BIOS выставляю:

Код:
OVMF (UEFI)

То есть:

Код:
Machine: q35
BIOS: OVMF

SeaBIOS для обычной Windows 11 мне не нужен.

Добавляю EFI Disk​


При использовании OVMF создаю EFI Disk.

Включаю:

Код:
Pre-Enroll Keys

Получается:

Код:
EFI Disk: Enabled
Pre-Enroll Keys: Enabled

Это понадобится для нормальной UEFI-конфигурации и Secure Boot.

Добавляю TPM 2.0​


В Proxmox открываю:

Код:
VM
→ Hardware
→ Add
→ TPM State

Выбираю:

Код:
Version: 2.0

В итоге системная часть VM выглядит так:

Код:
Machine: q35
BIOS: OVMF
EFI Disk: Enabled
TPM: 2.0

Таким образом я не отключаю проверку TPM в Windows 11, а предоставляю системе нормальный виртуальный TPM.

Secure Boot​


Для нормальной Secure Boot-конфигурации у меня используются:

Код:
OVMF
EFI Disk
Pre-Enroll Keys
TPM 2.0

Я предпочитаю сразу создавать виртуальную машину в современном варианте, а не обходить аппаратные требования Windows 11.

Настройка процессора​


На одиночном PVE-сервере я обычно выбираю:

Код:
CPU Type: host

Например:

Код:
Sockets: 1
Cores: 4
Type: host

или:

Код:
Sockets: 1
Cores: 8
Type: host

Я предпочитаю один виртуальный сокет.

То есть:

Код:
1 Socket
8 Cores

вместо:

Код:
2 Sockets
4 Cores

CPU host и Live Migration​


Если VM должна мигрировать между разными PVE-узлами с различающимися процессорами, host может быть неудобен.

Для одиночного хоста или одинаковых CPU я предпочитаю именно:

Код:
host

Оперативная память​


Для Windows 11 я ориентируюсь примерно так:

Код:
4 GB  - слишком мало для нормальной работы
8 GB  - нормальный старт
16 GB - комфортная рабочая VM

Обычно использую:

Код:
8192 MB

или:

Код:
16384 MB

Ballooning​


Для постоянных рабочих Windows VM я чаще отключаю Ballooning:

Код:
Memory:
16384 MB

Ballooning:
Disabled

Так я получаю фиксированный и предсказуемый объём оперативной памяти.

Если VM много, Ballooning можно оставить включённым.

Контроллер диска​


Для Windows 11 выбираю:

Код:
SCSI Controller:
VirtIO SCSI single

Системный диск создаю как:

Код:
Bus/Device:
SCSI

Например:

Код:
scsi0: 120 GB

Размер диска​


Для Windows 11 я обычно выделяю:

Код:
100 GB

как разумный старт.

Для полноценной рабочей VM:

Код:
120-150 GB

Windows, обновления и установленные программы достаточно быстро съедают свободное место, поэтому диск в 50-60 ГБ я бы для постоянной системы уже не делал.

Параметры диска​


Обычно включаю:

Код:
Discard: ON
IO Thread: ON

Если VM расположена на SSD или NVMe:

Код:
SSD Emulation: ON

В итоге диск у меня обычно выглядит примерно так:

Код:
Bus:
SCSI

Controller:
VirtIO SCSI single

Cache:
Default

Discard:
ON

IO Thread:
ON

SSD Emulation:
ON

Discard​


Discard позволяет Windows сообщать хранилищу Proxmox о блоках, которые больше не используются.

Особенно полезно это для:

  • LVM-thin;
  • ZFS;
  • Ceph;
  • SSD;
  • NVMe;
  • thin provisioned storage.

Cache​


Cache без необходимости не меняю:

Код:
Cache: Default

Write Back я включаю только тогда, когда понимаю особенности конкретного хранилища и его защиту от потери питания.

Сетевой адаптер​


Для сети использую:

Код:
Model: VirtIO

Например:

Код:
Bridge: vmbr0
Model: VirtIO

E1000 для современной Windows 11 VM мне обычно не нужен.

Подключаю все ISO​


Перед установкой у меня к виртуальной машине подключено три образа:

Код:
Windows 11.iso

virtio-win-0.1.285.iso

win11-local-account-sysadmin_guru.iso

Скачать VirtIO:

virtio-win-0.1.285.iso

Скачать ISO для локальной учётной записи:

win11-local-account-sysadmin_guru.iso

Важно: ISO локальной учётной записи не является загрузочным​


Этот диск не нужно ставить первым в Boot Order.

Он содержит только:

Код:
Autounattend.xml

Windows Setup автоматически находит файл во время установки.

Boot Order я делаю примерно так:

Код:
1. Windows 11 ISO
2. System Disk

VirtIO ISO и ISO с Autounattend в Boot Order не добавляю.

Отдельный нюанс старых версий Proxmox​


На старых версиях PVE/QEMU при q35 можно столкнуться с ошибкой при подключении нескольких IDE CD-ROM:

Код:
Can't create IDE unit 1, bus supports only 1 units

В таком случае дополнительный ISO с Autounattend я подключаю через SATA.

Например:

Код:
ide2  → Windows 11 ISO
ide0  → virtio-win-0.1.285.iso
sata0 → win11-local-account-sysadmin_guru.iso

Это полностью нормально.

Запускаю установку Windows​


После запуска VM в консоли может появиться:

Код:
Press any key to boot from CD or DVD...

Нужно успеть нажать клавишу.

Я обычно несколько раз нажимаю:

Код:
Space

Если этого не сделать, OVMF пропустит установочный DVD и может перейти к PXE-загрузке.

Windows 11 не видит диск​


При использовании VirtIO SCSI установщик Windows может не увидеть системный накопитель.

На экране выбора диска нажимаю:

Код:
Load driver

Открываю:

Код:
virtio-win-0.1.285.iso

и перехожу:

Код:
vioscsi
→ w11
→ amd64

Полный путь:

Код:
vioscsi\w11\amd64

После загрузки драйвера системный SCSI-диск появляется в установщике.

Локальная учётная запись вместо Microsoft Account​


В новых версиях Windows 11 Microsoft всё настойчивее предлагает войти в Microsoft Account.

Во время OOBE можно увидеть экраны вроде:

Код:
Войдите с помощью учётной записи Майкрософт

или:

Код:
Разблокируйте возможности Майкрософт

Раньше для этого часто использовалась команда:

Код:
OOBE\BYPASSNRO

Но я решил не привязывать установку к наличию этой команды в конкретной сборке Windows.

Вместо этого использую отдельный ISO:

win11-local-account-sysadmin_guru.iso

Он автоматически создаёт локальную учётную запись.

Учётные данные​


В моём готовом образе настроено:

Код:
Пользователь:
sysadmin_guru

Пароль:
sysadmin_guru

Группа:
Administrators

То есть после установки Windows я получаю локального администратора:

Код:
sysadmin_guru

Как работает ISO с локальной учётной записью​


В корне ISO находится:

Код:
Autounattend.xml

В нём используются два этапа установки:

Код:
windowsPE
oobeSystem

Это важный момент.

Мой первый вариант файла содержал только:

Код:
oobeSystem

и Windows Setup находил его:

Код:
Found unattend file at [D:\autounattend.xml]

но затем писал:

Код:
does not meet criteria to be used for this unattend pass

Причина оказалась в том, что на момент первого обнаружения Windows находилась на этапе:

Код:
windowsPE

Поэтому в рабочем варианте я добавил настройки и для windowsPE.

После этого Windows Setup принимает answer-файл уже на первом этапе и использует содержащиеся в нём настройки далее.

Что находится в Autounattend.xml​


Основная логика выглядит так.

Сначала этап:

Код:
windowsPE

где я автоматически принимаю EULA.

Затем:

Код:
oobeSystem

где создаётся пользователь:

Код:
sysadmin_guru

добавляется в:

Код:
Administrators

и используется пароль:

Код:
sysadmin_guru

Дополнительно скрываются онлайн-экраны OOBE.

Полный пример Autounattend.xml​


Файл можно сделать самостоятельно.

Пример моей рабочей конфигурации:

Код:
<?xml version="1.0" encoding="utf-8"?>

<unattend xmlns="urn:schemas-microsoft-com:unattend"
       xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <settings pass="windowsPE">

```
<component name="Microsoft-Windows-Setup"
           processorArchitecture="amd64"
           publicKeyToken="31bf3856ad364e35"
           language="neutral"
           versionScope="nonSxS">

  <UserData>
    <AcceptEula>true</AcceptEula>
  </UserData>

</component>
```

  </settings>

  <settings pass="oobeSystem">

```
<component name="Microsoft-Windows-Shell-Setup"
           processorArchitecture="amd64"
           publicKeyToken="31bf3856ad364e35"
           language="neutral"
           versionScope="nonSxS">

  <OOBE>

    <HideEULAPage>true</HideEULAPage>

    <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>

    <HideOnlineAccountScreens>true</HideOnlineAccountScreens>

    <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>

    <ProtectYourPC>3</ProtectYourPC>

  </OOBE>


  <UserAccounts>

    <LocalAccounts>

      <LocalAccount wcm:action="add">

        <Password>

          <Value>sysadmin_guru</Value>

          <PlainText>true</PlainText>

        </Password>

        <Description>Local administrator</Description>

        <DisplayName>sysadmin_guru</DisplayName>

        <Group>Administrators</Group>

        <Name>sysadmin_guru</Name>

      </LocalAccount>

    </LocalAccounts>

  </UserAccounts>


  <AutoLogon>

    <Password>

      <Value>sysadmin_guru</Value>

      <PlainText>true</PlainText>

    </Password>

    <Enabled>true</Enabled>

    <LogonCount>1</LogonCount>

    <Username>sysadmin_guru</Username>

  </AutoLogon>


  <FirstLogonCommands>

    <SynchronousCommand wcm:action="add">

      <Order>1</Order>

      <Description>Disable automatic logon after the first sign-in</Description>

      <CommandLine>reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f</CommandLine>

    </SynchronousCommand>

  </FirstLogonCommands>


</component>
```

  </settings>

</unattend>

Как собрать ISO самостоятельно​


Сделать такой образ можно прямо на Proxmox или любом Debian/Ubuntu Linux.

Создаю каталог:

Код:
mkdir -p /root/win11-unattend

Создаю файл:

Код:
nano /root/win11-unattend/Autounattend.xml

Вставляю туда XML из примера выше.

Сохраняю файл.

Устанавливаю xorriso​


На Debian/Proxmox:

Код:
apt update
apt install -y xorriso

После этого собираю ISO:

Код:
xorriso -as mkisofs
-o /var/lib/vz/template/iso/win11-local-account-sysadmin_guru.iso
-V WIN11_UNATTEND
-J
-R
/root/win11-unattend/

Готовый файл появится:

Код:
/var/lib/vz/template/iso/win11-local-account-sysadmin_guru.iso

Если используется стандартное хранилище Proxmox:

Код:
local

ISO автоматически появится в списке доступных образов.

Проверяю результат​


Проверяю:

Код:
ls -lh /var/lib/vz/template/iso/win11-local-account-sysadmin_guru.iso

Также можно проверить содержимое ISO:

Код:
xorriso -indev /var/lib/vz/template/iso/win11-local-account-sysadmin_guru.iso -ls /

В корне должен находиться:

Код:
Autounattend.xml

Это принципиально важно.

Не:

Код:
/config/Autounattend.xml

и не:

Код:
/files/Autounattend.xml

а именно:

Код:
/Autounattend.xml

Альтернативный вариант через genisoimage​


Можно использовать:

Код:
apt install -y genisoimage

После этого:

Код:
genisoimage
-o /var/lib/vz/template/iso/win11-local-account-sysadmin_guru.iso
-V WIN11_UNATTEND
-J
-R
/root/win11-unattend/

Результат будет тем же: небольшой ISO с Autounattend.xml в корне.

Как изменить пользователя и пароль​


Имя пользователя задаётся здесь:

Код:
 <Name>sysadmin_guru</Name>

и:

Код:
 <DisplayName>sysadmin_guru</DisplayName>

Пароль:

Код:
 <Value>sysadmin_guru</Value>

Например, если мне нужен пользователь:

Код:
admin

я меняю:

Код:
 <Name>admin</Name> <DisplayName>admin</DisplayName>

и пароль:

Код:
 <Value>MyStrongPassword</Value>

Не выкладываю ISO с реальным рабочим паролем​


Нужно учитывать, что пароль находится внутри:

Код:
Autounattend.xml

в открытом виде:

Код:
 <PlainText>true</PlainText>

Поэтому для публичного ISO я использую только заранее известный временный пароль.

После установки рабочей машины пароль лучше сразу поменять.

Почему я использую AutoLogon​


В моём ISO также настроен:

Код:
AutoLogon

на один вход.

То есть после установки Windows автоматически входит в:

Код:
sysadmin_guru

После первого входа выполняется:

Код:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0 /f

и автоматический вход прекращается.

Для меня это удобнее, потому что Windows сразу попадает на рабочий стол локального пользователя, а не возвращается на дополнительные экраны Microsoft Account.

После установки ставлю VirtIO Guest Tools​


Когда появляется рабочий стол Windows, установка для меня ещё не закончена.

Открываю:

Код:
virtio-win-0.1.285.iso

и запускаю:

Код:
virtio-win-guest-tools.exe

Устанавливаю VirtIO-компоненты.

В том числе:

  • VirtIO SCSI;
  • VirtIO Network;
  • VirtIO Serial;
  • Balloon Driver;
  • QEMU Guest Agent;
  • другие необходимые драйверы.

После установки перезагружаю Windows.

Проверяю Device Manager​


Открываю:

Код:
Device Manager

и проверяю, чтобы там не осталось неизвестных устройств.

При необходимости драйвер можно установить вручную с:

Код:
virtio-win-0.1.285.iso

Включаю QEMU Guest Agent​


После установки VirtIO Guest Tools в Proxmox открываю:

Код:
VM
→ Options
→ QEMU Guest Agent

и включаю:

Код:
Enabled

После этого Proxmox может:

  • определять IP-адрес Windows;
  • получать данные от гостевой системы;
  • корректно завершать её работу;
  • лучше взаимодействовать с Windows во время backup;
  • выполнять служебные операции через Guest Agent.

Shutdown вместо Stop​


Для обычного выключения VM использую:

Код:
Shutdown

А:

Код:
Stop

оставляю только для аварийного выключения зависшей системы.

После установки меняю Boot Order​


После завершения установки ставлю системный диск первым:

Код:
1. System Disk
2. CD/DVD

Установочный ISO Windows можно вообще отключить.

Это избавляет от:

Код:
Press any key to boot from CD or DVD...

при каждой перезагрузке.

Моя итоговая конфигурация​


В результате Windows 11 VM выглядит примерно так:

Код:
OS:
Windows 11 x64

Machine:
q35

BIOS:
OVMF (UEFI)

EFI Disk:
Enabled

Pre-Enroll Keys:
Enabled

TPM:
2.0

CPU:
host

Sockets:
1

Cores:
4-8

RAM:
8-16 GB

Ballooning:
обычно Disabled

SCSI Controller:
VirtIO SCSI single

System Disk:
SCSI
100-150 GB

Discard:
Enabled

IO Thread:
Enabled

SSD Emulation:
Enabled для SSD/NVMe

Network:
VirtIO

Bridge:
vmbr0

QEMU Guest Agent:
Enabled

Дополнительные ISO:

Код:
virtio-win-0.1.285.iso
win11-local-account-sysadmin_guru.iso

Ссылки:

Скачать virtio-win-0.1.285.iso

Скачать win11-local-account-sysadmin_guru.iso

Короткая последовательность установки​


Если нужно быстро вспомнить весь процесс, я делаю так:

  1. Загружаю ISO Windows 11.
  2. Загружаю virtio-win-0.1.285.iso.
  3. Загружаю win11-local-account-sysadmin_guru.iso.
  4. Создаю VM на q35.
  5. Выбираю OVMF / UEFI.
  6. Создаю EFI Disk.
  7. Включаю Pre-Enroll Keys.
  8. Добавляю TPM 2.0.
  9. CPU выставляю host.
  10. Выделяю 8-16 ГБ RAM.
  11. Выбираю VirtIO SCSI single.
  12. Создаю системный SCSI-диск.
  13. Включаю Discard и IO Thread.
  14. Сетевую карту ставлю VirtIO.
  15. Подключаю Windows ISO как загрузочный.
  16. VirtIO ISO подключаю как дополнительный CD-ROM.
  17. ISO с Autounattend подключаю как дополнительный CD-ROM, при необходимости через SATA.
  18. Запускаю установку.
  19. Если Windows не видит диск, загружаю vioscsi\w11\amd64.
  20. Windows автоматически подхватывает Autounattend.xml.
  21. Создаётся локальная учётная запись sysadmin_guru.
  22. После первого запуска ставлю virtio-win-guest-tools.exe.
  23. Перезагружаю Windows.
  24. Проверяю Device Manager.
  25. Включаю QEMU Guest Agent.
  26. Меняю Boot Order и ставлю системный диск первым.

Итог​


В итоге я получаю Windows 11 VM на современной виртуальной платформе:

Код:
q35
OVMF / UEFI
EFI Disk
TPM 2.0
Secure Boot
VirtIO SCSI
VirtIO Network
QEMU Guest Agent

При этом мне не приходится создавать Microsoft Account во время установки.

Для этого я подключаю отдельный:

win11-local-account-sysadmin_guru.iso

с Autounattend.xml, который создаёт локального администратора:

Код:
sysadmin_guru

с паролем:

Код:
sysadmin_guru

А если мне понадобится другой пользователь или пароль, такой ISO можно за несколько минут собрать самостоятельно через xorriso или genisoimage.

Для меня такой вариант оказался гораздо удобнее, чем зависеть от очередного изменения OOBE и проверять, работает ли в конкретной сборке Windows 11 очередной вариант обхода Microsoft Account.
Об авторе
Guru
Василий, cистемный админ /gnu/linux/windows/macos/mikrotik/troubleshooter, создатель сайта
Интересуюсь всем что делает инфраструктуру быстрой и надёжной
Открыт к общению и проектам, написать мне можно через форму или в личном сообщении

❗ Если есть пожелания по обзору какого-либо вопроса не представленного на сайте - пиши в комментариях

Комментарии

Нет комментариев для отображения.

Информация о статье

Автор
Guru
Время чтения статьи
9 мин чтения
Просмотры
20
Посл. обновление

Ещё в Windows

Ещё от Guru

Поделиться этой статьёй

Назад
Верх