Windows guests - build ISOs including VirtIO drivers

From Proxmox VE
Revision as of 22:24, 22 March 2013 by Di Pe (talk | contribs)
Jump to navigation Jump to search

Build ISOs including VirtIO drivers

Using Paravirtualized Block Drivers for Windows can dramatically improve Windows guest performance but installing them can be a bit of a fuss.

Prep Machine


Prep and extract isos

  • copy all your Windows ISOs to folders c:\tmp\win7, c:\tmp\win2008, c:\tmp\win8, c:\tmp\win2012, etc
  • extract sources\boot.wim and sources\install.wim from each iso and put them in the same folder as the iso
  • get the latest virtio-win-x.x-xx.iso and extract the drivers into the VirtIO folder for each OS (e.g. WIN8\AMD64\*.* from the iso goes into c:\tmp\win8\VirtIO\ and into c:\tmp\win2012\VirtIO\)


use AIK

  • Start All Programs -> Microsoft Windows AIK -> Deployment Tools Command Prompt (Run as Administrator)
  • check how many indexes your install.wim has (e.g. dism /get-wiminfo /wimfile:c:\tmp\win2008\install.wim). Windows 2008 has up to 8 indexes
  • Set the variable IDX in each winxxxx-inject.bat to the number of indices you found in each install.wim (e.g. IDX=8)
  • For each OS there is a SetupComplete.cmd. This script is always executed by the Windows installation as a final step. Make sure it contains the ballon service installer. You may add other commands to it.

inject drivers and write wim files back to isos

  • launch multiple winxxxx-inject.bat sequentially and uninterrupted, e.g.: winpe-inject.bat && win7-inject.bat && win2008-inject.bat && win8-inject.bat && win2012-inject.bat
  • alternatively you can run multiple batch commands in parallel by launching multiple instances of "Deployment Tools Command Prompt" as Administrator
  • for each iso use UltraISO to copy boot.wim and install.wim back to the sources folder of the ISO file

example batch file win2012-inject.bat

@echo off

set MyOS=win2012
set IDX=4

if not exist c:\tmp\%MyOS%\virtio\blnsvr.exe (echo Please copy the VirtIO drivers to c:\tmp\%MyOS%\VirtIO\ first && goto :eof)

rem **********(1,1,2) means 2 loops *************************
FOR /L %%i IN (1,1,2) DO (
  ECHO Prepping %MyOS% boot.wim - Index %%i
  if not exist c:\tmp\%MyOS%\bootwim\%%i mkdir c:\tmp\%MyOS%\bootwim\%%i
  imagex /mountrw c:\tmp\%MyOS%\boot.wim %%i c:\tmp\%MyOS%\bootwim\%%i
  dism /image:c:\tmp\%MyOS%\bootwim\%%i /add-driver /driver:c:\tmp\%MyOS%\virtio /Recurse /ForceUnsigned
  imagex /unmount /commit c:\tmp\%MyOS%\bootwim\%%i
)


FOR /L %%i IN (1,1,%IDX%) DO (
  ECHO Prepping %MyOS% install.wim - Index %%i
  if not exist c:\tmp\%MyOS%\installwim\%%i mkdir c:\tmp\%MyOS%\installwim\%%i
  imagex /mountrw c:\tmp\%MyOS%\install.wim %%i c:\tmp\%MyOS%\installwim\%%i
  dism /image:c:\tmp\%MyOS%\installwim\%%i /add-driver /driver:c:\tmp\%MyOS%\virtio /Recurse /ForceUnsigned
  xcopy /Y c:\tmp\%MyOS%\VirtIO "C:\tmp\%MyOS%\installwim\%%i\Program Files\VirtIO\"
  xcopy /Y c:\tmp\%MyOS%\SetupComplete.cmd "C:\tmp\%MyOS%\installwim\%%i\Windows\Setup\Scripts\"
  imagex /unmount /commit c:\tmp\%MyOS%\installwim\%%i
)

:eof


Additional Options

change the Proxmox UI default settings to VirtIO

Now that you have changed all your ISO files to include Paravirtualized drivers you no longer need IDE drives or a E1000 network adapter. Wouldn't it be best to change the defaults to the settings that use our resources most efficiently. Please follow these instructions to patch the PVE UI. Defaults - change PVE UI defaults to VirtIO

virtio drivers

Use virtio dirvers for best performance. More info: Paravirtualized Block Drivers for Windows

latest iso with virtio drivers : http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/


Windows 2012 guest best practices

Windows 2008 guest best practices