Difference between revisions of "Paravirtualized Block Drivers for Windows"

From Proxmox VE
Jump to navigation Jump to search
(→‎Adding a temporary drive: Update VirtIO/SCSI driver installation part)
(Update detatch/reatach instructions)
Line 40: Line 40:
 
* Prerequisite: An installed running Windows OS and the VirtIO driver ISO
 
* Prerequisite: An installed running Windows OS and the VirtIO driver ISO
 
* insert the VirtIO ISO into the VMs CDROM Drive.
 
* insert the VirtIO ISO into the VMs CDROM Drive.
* add a small SCSI or VirtIO disk to the VM through PVE web interface (e.g., 1GB) it should get hot plugged. If not you have to reboot the VM.
+
* add a small (1GB) SCSI (with Options -> Controller Typ: VirtIO) or VirtIO Block disk to the VM, you can use the PVE WebUI.
* Window should detect the new disk has a new unknown device and ask you for its drivers. If it does not open the Device Manager, there should be a unknown device, right-click on it and select
+
* The disk should get hot plugged. If not you have to reboot the VM.
** Select No when the wizard asks you to search for the driver software
+
* Window should detect the new disk has a new unknown device and ask you for its drivers. If it doesn't, open the Device Manager, there should be an unknown device, right-click on it and select
 +
** Select No when the wizard asks you to search for the driver software (online)
 
** Select "Install from a list of specific location"
 
** Select "Install from a list of specific location"
** Use the Browse button and navigate to the driver CD
+
** Use the Browse button and navigate to the driver CDROM
 
** Normally selecting the CDROMs top directory (e.g. d:) is enough on newer Windows versions.
 
** Normally selecting the CDROMs top directory (e.g. d:) is enough on newer Windows versions.
 
** If that does not work select the appropriate folder for your guest version/architecture manually (use vioscsi for SCSI and vioblk for VirtIO)
 
** If that does not work select the appropriate folder for your guest version/architecture manually (use vioscsi for SCSI and vioblk for VirtIO)
* Click Next to begin the install.You may get a prompt warning about the driver not being signed. Go ahead and select “Continue Anyway”.
+
* Click Next to begin the install.You may get a warning about the driver not being signed, select “Continue Anyway”.
 
* Finish then driver installation
 
* Finish then driver installation
  
Line 54: Line 55:
 
('''Note''': doing this on windows 2000 could show a strange, but apparently safe, behaviour: in the "disk management" control panel, you may see something like 8 times the drives you actually have!!! In fact, if you add 1 virtio drive, it shows 8 drives, but it's actually the same, repeated. You can in fact "sign" just the first, and then see that all "duplicated" drives are signed as well. However, the drives seems to behave and perform very well indeed. I signed, created partition, formatted, just  on the first one, with no side effects, up to now. In "My computer" you will see just 1 disk, anyway.)
 
('''Note''': doing this on windows 2000 could show a strange, but apparently safe, behaviour: in the "disk management" control panel, you may see something like 8 times the drives you actually have!!! In fact, if you add 1 virtio drive, it shows 8 drives, but it's actually the same, repeated. You can in fact "sign" just the first, and then see that all "duplicated" drives are signed as well. However, the drives seems to behave and perform very well indeed. I signed, created partition, formatted, just  on the first one, with no side effects, up to now. In "My computer" you will see just 1 disk, anyway.)
  
Now, Windows system has the virtio driver installed, and we need to convert all of its previous (IDE) system disks to virtio.
+
Windows has now the VirtIO SCSI/Block driver installed, and we need to re attach the VM disks as SCSI or virtio.
* Shut down the VM and, from PVE and:
+
* Shut down the VM and remove the temporary Disk (Remove it once to mark it unused and remove the unused to delete it entirely)
** remove (from the vm, not from disk) all the (IDE) disk it had previously (as desired, these "removed" drives will still be listed as "unused disks" under the "Hardware" tab), and
+
* Detach all the disks you want to use as Virtio SCSI/Block, do this by "Removing" the disk. This will '''not''' delete the disk but mark them as "unused disks"
** re-add them, in the same order, as virtio disks (do this by clicking the "Edit" button for each of the "unused" disks that were previously "IDE" disks)
+
* reattach them by double-clicking the unused disk entries (or use the Edit button) here select SCSI for VirtIO SCSI or VirtIO (SCSI virtio disks (do this by clicking the "Edit" button for each of the "unused" disks that were previously "IDE" disks)
** Make shure that the primary boot device is still the old (IDE) boot disk, through PVE web interface.
+
* Fix up the ''Boot Order'' under the VMs ''Option'' tab. Make sure that the primary boot device is still the old boot disk.
* Boot again the VM and log in as a local administrator
+
* Now you can start the VM again, it should use the new better disk controllers now.
* Window should detect it has new unknown devices and ask you for the drivers
+
* If the VM does not boots you can detach and re attach the Disks as IDE, ensure that you do not missed a step here and eventually ask the Proxmox VE community for help.
** You should have the option to use again the ISO mounted in the CD drive
 
** You should also be able to tell windows to use "current" drivers, it now already has.
 
** You don't need to initialize/format these drives, of course :-)
 
  
 
After finishing, through PVE web interface, you can:
 
After finishing, through PVE web interface, you can:
* remove the first, temporary, virtio disk (if you don't need that more space on Windows)
+
* remove the temporary VirtIO disk if you haven't already done this and don't need it anymore
 
* remove the ISO mounted as CD device
 
* remove the ISO mounted as CD device
  

Revision as of 11:06, 10 February 2017

Introduction

In order to improve disk performance, special paravirtualized block drivers can be installed in Windows guests: to use them, you have to obtain those drivers and then install them on the VM guest os.

See Windows_VirtIO_Drivers to get info about

  • downloading VirtIO drivers
  • changelog and guest OS compatibility
  • other kind of guest devices supported

Download

Download the latest drivers (ISO) as suggested by the page Windows_VirtIO_Drivers to your desktop.

Then upload the ISO to your Proxmox VE server:

  • logon to the Proxmox VE web interface
  • select a ISO-enabled storage (see Storage_Model#Storage_type_Content)
  • switch to "content" tab
  • just use the "upload" button on the menu bar.

Installation

Choose the right driver

Installation strategies

The target is to make Windows install virtio drivers for all of its disks. There could be more strategies to accomplish this task:

Adding a temporary drive

see (http://www.linux-kvm.com/content/redhat-54-windows-virtio-drivers-part-2-block-drivers)

Tested guest OS:

  • Windows 2003 r2 32 bit guest
  • Windows 2000 server sp4
  • Windows 2012R2

The base Windows OS in your guest VM knows nothing about VirtIO drivers, so you can't simply stop the VM, change the disk to Vrtio-SCSI or VirtIO and reboot. You have to force Windows to install VirtIO drivers during it runs. To do this we add a small temporary SCSI-VirtIO or VirtIO disk to the VM and install its drivers explicitly.

Note: Proxmox recommends the use of SCSI with "SCSI Controller Type" for VM disks, those have the most features and best performance. VirtIO block may get deprecated in the future.

  • Prerequisite: An installed running Windows OS and the VirtIO driver ISO
  • insert the VirtIO ISO into the VMs CDROM Drive.
  • add a small (1GB) SCSI (with Options -> Controller Typ: VirtIO) or VirtIO Block disk to the VM, you can use the PVE WebUI.
  • The disk should get hot plugged. If not you have to reboot the VM.
  • Window should detect the new disk has a new unknown device and ask you for its drivers. If it doesn't, open the Device Manager, there should be an unknown device, right-click on it and select
    • Select No when the wizard asks you to search for the driver software (online)
    • Select "Install from a list of specific location"
    • Use the Browse button and navigate to the driver CDROM
    • Normally selecting the CDROMs top directory (e.g. d:) is enough on newer Windows versions.
    • If that does not work select the appropriate folder for your guest version/architecture manually (use vioscsi for SCSI and vioblk for VirtIO)
  • Click Next to begin the install.You may get a warning about the driver not being signed, select “Continue Anyway”.
  • Finish then driver installation

You should now be able to enter Windows "Disk Management" and format the temporary SCSI/VirtIO disk (this is not necessary, it just proves that the driver is installed and working)

(Note: doing this on windows 2000 could show a strange, but apparently safe, behaviour: in the "disk management" control panel, you may see something like 8 times the drives you actually have!!! In fact, if you add 1 virtio drive, it shows 8 drives, but it's actually the same, repeated. You can in fact "sign" just the first, and then see that all "duplicated" drives are signed as well. However, the drives seems to behave and perform very well indeed. I signed, created partition, formatted, just on the first one, with no side effects, up to now. In "My computer" you will see just 1 disk, anyway.)

Windows has now the VirtIO SCSI/Block driver installed, and we need to re attach the VM disks as SCSI or virtio.

  • Shut down the VM and remove the temporary Disk (Remove it once to mark it unused and remove the unused to delete it entirely)
  • Detach all the disks you want to use as Virtio SCSI/Block, do this by "Removing" the disk. This will not delete the disk but mark them as "unused disks"
  • reattach them by double-clicking the unused disk entries (or use the Edit button) here select SCSI for VirtIO SCSI or VirtIO (SCSI virtio disks (do this by clicking the "Edit" button for each of the "unused" disks that were previously "IDE" disks)
  • Fix up the Boot Order under the VMs Option tab. Make sure that the primary boot device is still the old boot disk.
  • Now you can start the VM again, it should use the new better disk controllers now.
  • If the VM does not boots you can detach and re attach the Disks as IDE, ensure that you do not missed a step here and eventually ask the Proxmox VE community for help.

After finishing, through PVE web interface, you can:

  • remove the temporary VirtIO disk if you haven't already done this and don't need it anymore
  • remove the ISO mounted as CD device

During windows installation

You can add the block drivers during install by manually adding a virtual floppy drive (vfd) to the system for the initial install as follows (thanks to meto & user100 in the forum).

First you need the virtio drivers from the Fedora Project that can be found here: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/ If you are doing VIRTIO for network (recommended), grab the ISO file as well as the vfd file.

Copy the vfd file onto the PM Host server or somewhere where it can be access from the PM Host server.

When you create the VM, set the drive type to virtio and complete the rest of the settings.

Start the system from the PROXMOX interface, but don't bother with the VNC console at this stage.

In an ssh session to the PM Host server (for your Win KVM), find the KVM process you just started by filtering on your VMID

 # ps ax | grep kvm | grep <VMID>

You need to copy the line from the output for your VM beginning from "/usr/bin/kvm". Make sure you grab the whole line except the process ID, etc.

Stop your VM from the PROXMOX interface

In your ssh session paste the copied line then add the floppy drive option : -fda /where/you/put/the/file/virtio-win-<version>.vfd

As an example this restarts a created KVM on my system with the floppy installed

 # /usr/bin/kvm -monitor unix:/var/run/qemu-server/1086.mon,server,nowait -vnc unix:/var/run/qemu-server/1086.vnc,password -pidfile /var/run/qemu-server/1086.pid
    -daemonize -usbdevice tablet -name Win2K3_Base -smp sockets=1,cores=1 -nodefaults -boot menu=on -vga cirrus -tdf -localtime -rtc-td-hack -k en-us
    -drive file=/mnt/pve/ISO/WIN_2K3_SP2.iso,if=ide,index=2,media=cdrom -drive file=/var/lib/vz/images/1086/vm-1086-disk-1.qcow2,if=virtio,index=0,boot=on 
    -m 512 -netdev type=tap,id=vlan0d0,ifname=vmtab1086i0d0,script=/var/lib/qemu-server/bridge-vlan -device virtio-net-pci,mac=2A:D2:74:78:2E:E1,netdev=vlan0d0
     -fda /mnt/pve/ISO/virtio-win-1.1.16.vfd

Once you enter your command the KVM will start & you will see the system "running" in the PROXMOX interface. Now open the console. The standard boot sequence for a new KVM seems to be HDD - Floppy - CD, you can change this but it's just as easy to reboot using the Ctrl-Alt-Del button in the console, use F12 to bring up a boot selection window & boot from CD.

Once windows starts to load, press F6 to get it to look for extra drivers to load. It will automatically load the floppy & away you go.

Note that the virtio drivers aren't windows logo signed so you need to tell the system to continue to load the drivers.

More information on floppy drives can be found here : http://www.linux-kvm.com/content/block-driver-updates-install-drivers-during-windows-installation

And in the forum here : http://forum.proxmox.com/threads/3711-Floppy-support-hack

See also