Сборка образа Windows Server с драйвером SCSI

В результате тестирования работы ВМ под управлением ОС Windows Server 2012 выяснилось, что жесткий диск работает существенно быстрее (в 2-3 раза), если он подключен через контроллер шины SCSI, а не SATA. В данном руководстве описан процесс создания образа (glance image) для Openstack, который позволяет использовать загрузочный диск в режиме SCSI.

Подготовка образа на KVM

Создаем новую ВМ с параметрами:

Machine - q35-5.2; ОЗУ 4G; CPU - 4x 1 core; BIOS - SeaBIOS; SCSI Controller; Hard Disk virtio qcow2 11Gb; Net virtio mtu=1450

Добавляем к ней 3 CDROM типа SATA:

  1. загрузочный инсталлятор Windows Server 2022 STD
  2. драйверы virtio-win-0.1.229.iso (или новее)
  3. cloudbase-init_114_x64 (или новее)

Далее штатно ставим Windows, предварительно загрузив драйвер viostor.inf

После установки Windows, ставим все драйверы virtio и CDROM и агента KVM, копируем cloudbase-init.msi в папку C:\Windows\System32\Sysprep и выключаем ВМ.

Добавляем жесткий диск типа SCSI размером 1Gb, убираем все три CDROM и запускаем ВМ.

Запускаем Disk Management , переводим 1Gb диск в статус online и инициализируем его. После этого переводим этот диск в статус offline

Выключаем ВМ, отсоединяем и удаляем диск 1Gb и вновь включаем ВМ.

Cloudbase-init

Ставим пакет C:\Windows\System32\Sysprep\cloudbase-init.msi . Выбираем все по-умолчанию, кроме Username: Administator Галочку Run Cloudbase-init service as LocalSystem включать не надо.

После того, как пакет установится - не нажимаем Finish, а переключаемся на окно проводника и готовим скрипт для авторасширения диска.

Скрипт для авторасширения диска

Создаем файл с именем C:\Program Files (x86)\Cloudbase Solutions\Cloudbase-Init\LocalScripts\VolumeExtend.ps1 следующего содержания:

$drive_letter = "C"
$size = (Get-PartitionSupportedSize -DriveLetter $drive_letter)
Resize-Partition -DriveLetter $drive_letter -Size $size.SizeMax

Чтобы это работало, надо еще удалить раздел номер 3 (recovery partition).

Для этого запускаем командный интерпретатор cmd и выполняем команду diskpart

list disk
select disk 0
list partition
select partition 3
delete partition override
extend size=633
exit

Вместо 633 надо ввести размер в мегабайтах, который занимал ваш раздел Recovery partition

Выключаем виртуалку и запускаем вновь.

Sysprep

Теперь нужно выполнить sysprep OOBE с генерализацией и завершением работы:

C:\Windows\System32\Sysprep\sysprep.exe

Выбираем: OOBE + Generalize + Shutdown

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

Дополнения

Как поставить драйвер SCSI virtio

Другой вариант подгогтовки образа - если мы имеем рабочий образ, который не содержит нужного драйвера Controller SCSI. Грузимся в свежеустановленную сиcтему с жесткого диска (SCSI) и ставим все virtio-драйверы и guest-агента с подключенного CDROM:

D:\virtio-win-gt-x64.msi
D:\virtio-win-guest-tools.exe

Выключаем, включаем загрузку с установочного CDROM, загружаемся с установочного CDROM, выбираем режим восстановления (Repair your computer) и открываем командную строку (Throubleshoot -> Command Prompt).

Смотрим, какие диски есть в системе:

wmic logicaldisk get caption

Далее добавляем букву раздела, на котором установлен EFI (100M раздел) с помощью программы diskpart

e:
diskpart
list disk
select disk 0
list partition
select partition 1
assign letter=h
exit

После этого мы увидим на EFI-диск в проводнике под буквой “H”.

Прописываем наш SCSI-драйвер в загрузочный образ Windows:

wmic logicaldisk get caption
drvload d:\vioscsi\2k22\amd64\vioscsi.inf
dism /image:e:\ /add-driver /driver:vioscsi.inf

Как сделать, чтобы пароль менялся при входе?

Для этого нужно выполнить sysprep OOBE с обобщением и завершением работы. Он сбросит пароль перед выключением Windows.

C:\Windows\System32\Sysprep\sysprep.exe
Выбираем OOBE + Generalize + Shutdown.

Если не запускается - надо удалить ненужные приложения - в моем случае это MicrosoftEdge.

В PowerShell наберите:

Get-AppxPackage *MicrosoftEdge* | Remove-AppxPackage
Бывает нужно выполнить команду под разными пользователями (Administrator, Admin). Увидеть “мешаюшие” приложения можно в логе C:\Windows\System32\Sysprep\Panther\setupact.log

Для затирания пустого места можно применить утилиту cipher:

cipher /w:C: 
Прервать после заполнения нулями (0x00)

git clone https://github.com/cloudbase/windows-openstack-imaging-tools

Ссылки

  1. https://cloudbase.it/openstack-windows-admin-password/
  2. https://cloudbase-init.readthedocs.io/en/latest/plugins.html
  3. https://portal.nutanix.com/page/documents/kbs/details?targetId=kA00e000000kAWeCAM
  4. https://www.penguinsolutions.com/documentation/scyld-cloud-manager/admin-guide/admin/openstack/windows.html#post-installation

Опубликовано: 19.07.2024