KVM下windows虚拟机默认disk使用的是Qemu IDE硬盘,网卡默认是rtl8139网卡。为了使kvm主机在相同的配置下,有更好的效率,可以将网卡和磁盘替换成virtio的驱动。

windows的virtio驱动主要包括网卡以及磁盘的驱动,主要有三种方式,第一种是已有windows的操作系统,需要更新驱动,第二种是是安装时加载virtio驱动,第三种是直接制作virtio驱动的iso系统镜像。

一:更新virtio驱动

1.修改xml文件

原始xml文件

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='writeback'/>
  <source file='/polydata/image/winxp_sp2.qcow2'/>
  <target dev='hda' bus='ide'/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

<interface type='bridge'>
  <mac address='52:54:00:33:a4:19'/>
  <source bridge='br0'/>
  <model type='rtl8139'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

输入命令virsh edit winxp_sp2修改如下

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='writeback'/>
      <source file='/polydata/image/winxp_sp2.qcow2'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/tmp/virtio-win-0.1.96.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <disk type='file' device='disk'> 
    <driver type='qcow2' cache='writeback'/>    
      <source file='/tmp/test.img'/>    
      <target dev='vdc' bus='virtio'/> 
    </disk>
    <interface type='bridge'>
      <mac address='52:54:00:33:a4:19'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

其实原始disk不用修改,只需要添加virtio-win.iso的cdrom、virtio类型的临时disk,以及将网卡修改为virtio类型。

2.创建磁盘:qemu-img create –f qcow2 /tmp/test.img 1G,将驱动复制到/tmp/virtio-win-0.1.96.iso,驱动下载地址 https://fedoraproject.org/wiki/Windows_Virtio_Drivers,可以打开https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/下载不同版本的驱动

3.更新驱动:virsh start winxp_sp2,使用vnc连接,系统会提示找到新硬件,弹窗安装驱动的窗口(SCSI和网卡),安装时尽量不要自动搜索,而是手动搜索,不同的操作系统路径如下:

磁盘 网卡
XP viostor\xp\x86\viostor.inf NetKVM\xp\x86\netkvm.inf
2k3 viostor\2k3\x86\viostor.inf NetKVM\2k3\x86\netkvm.inf
win7 viostor\w7\x86\viostor.inf NetKVM\w7\x86\netkvm.inf

如果是64位的OS,则寻找amd64对应的文件夹,较老的驱动目录结构有点变化,如下所示

其中WLH对应win2008,WNET对应win2003,WXP对应XP,XP文件夹里则只包含XP的网卡驱动

注1:如果打开虚拟机后未弹出自动更新驱动的对话框,则右击我的电脑—>管理—>设备管理器,会看到感叹号的SCSI以及网卡,右击更新驱动,按照上述步骤更新virtio驱动。

注2:对于xp系统来说virtio-win驱动版本很重要,一开始一直安装不成功就是因为驱动版本信息不对,如果安装过程很慢则基本就是驱动版本不对,换个驱动试试,经测试,针对xpsp2/xpsp3的操作系统,virtio-win-0.1.96版本可用,而针对win7sp1的操作系统,稳定版virtio-win-0.1.102可用。

4.关闭虚拟机,virsh edit winxp_sp2修改xml文件,删除cdrom和临时装载的disk内容,原始disk内容修改如下

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='writeback'/>
  <source file='/polydata/image/winxp_sp2.qcow2'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>

5.启动虚拟机可发现磁盘和网卡的驱动都已更新

reference:http://wenku.baidu.com/link?url=g2-ZYBvADYEq1xOrn0B0teST-hSMvvbRHxP4A4aDEjjHoiKvoN0JBI3bpWkj01s_mIXSjVUvzOZScMdLUPwJJM4p0-WWbHj3eBgVMNbpBmy

二:安装时加载virtio驱动

备注:xp/sp3使用virtio-win-0.1.96_x86.vfd的驱动,win7使用virtio-win-0.1.102.iso的驱动

1.xp/2k3

1.1 新建磁盘镜像 qemu-img create -f qcow2 /polydata/image/winxp_sp2_backup.qcow2 10G

1.2 准备驱动软盘(/tmp/virtio-win-0.1.96_x86.vfd)以及系统iso安装文件(/tmp/xpsp2_netkvm.iso,最好是已经集成virtio网卡驱动的镜像)

1.3 安装系统
virt-install --virt-type kvm --name winxp_sp2_backup --ram 512 --os-type=windows --os-variant=winxp --disk path=/polydata/image/winxp_sp2_backup.qcow2,format=qcow2,bus=virtio,cache=writeback --disk path=/tmp/virtio-win-0.1.96_x86.vfd,device=floppy --network bridge=br0,model=virtio --cdrom=/tmp/xpsp2_netkvm.iso --graphics vnc,listen=0.0.0.0 --noautoconsole

安装2k3系统时需要将--os-variant设置为win2k3

1.4 vnc连接,虚拟机起来后按F6,弹出如下界面

输入S,选择合适的scsi设备(virtio)

然后按两下回车就OK。剩下的就是一般的操作系统安装步骤,不再赘述。

安装完成效果如下

2.win7

1.1 新建磁盘镜像 qemu-img create -f qcow2 /polydata/image/win7_sp1_backup.qcow2 20G

1.2 准备驱动光盘(/tmp/virtio-win-0.1.102)以及系统iso安装文件(/tmp/win7sp1.iso)

1.3 安装系统
virt-install --virt-type kvm --name win7_sp1_backup --ram 1024 --os-type=windows --os-variant=win7 --disk path=/polydata/image/win7_sp1_backup.qcow2,bus=virtio,format=qcow2,cache=writeback --network bridge=br0,model=virtio --cdrom=/tmp/win7sp1.iso --disk path=/tmp/virtio-win-0.1-102.iso,device=cdrom --graphics vnc,listen=0.0.0.0 --noautoconsole

1.4 vnc连接,弹出如下安装界面

使用virtio接口的硬盘,我们必须加载virtio硬盘驱动。如果不加载该驱动windows installer会无法找到虚拟磁盘,点击加载驱动程序,浏览,选择virtio驱动光盘,找到viostor下对应的版本驱动,

点击下一步,安装virtio磁盘驱动,随后多出来一块硬盘,同时安装网卡的virtio驱动

剩下的就是一般的操作系统安装步骤,不再赘述。效果如下:

reference:http://www.mamicode.com/info-detail-126255.html

三:制作virtio驱动的iso系统镜像

此方法主要使用nlite(xp/2k3)和dism(win7/20008…)工具,具体参见https://miefen.com/201405/how-to-install-virtio-drivers-for-windows

按照教程使用nlite添加磁盘和网卡的virtio驱动,但是安装的时候始终提示找不到scsi的驱动,驱动版本也是用的virtio-win-0.1.96.iso。但却有人制作成功过(用的是virtio-win-0.1-74.iso),本人尝试未果。

虚拟机其它优化

磁盘cache改为writeback

<driver name='qemu' type='qcow2' cache='writeback'/>

添加qemu支持但是libvirt不支持的优化选项

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

<qemu:commandline>
  <qemu:arg value='-cpu'/>
  <qemu:arg value='host,-hypervisor'/>
</qemu:commandline>

其实virt-install 中有—cpu host选项,只是如果新建虚拟机时加上此选项,生成的xml文件中会带有cpu的model和features

<cpu mode='custom' match='exact'>
  <model fallback='allow'>SandyBridge</model>
  <vendor>Intel</vendor>
  <feature policy='require' name='vme'/>
  <feature policy='require' name='dtes64'/>
  <feature policy='require' name='vmx'/>
  <feature policy='require' name='erms'/>
  <feature policy='require' name='xtpr'/>
  <feature policy='require' name='smep'/>
  <feature policy='require' name='pcid'/>
  <feature policy='require' name='est'/>
  <feature policy='require' name='monitor'/>
  <feature policy='require' name='smx'/>
  <feature policy='require' name='tm'/>
  <feature policy='require' name='acpi'/>
  <feature policy='require' name='osxsave'/>
  <feature policy='require' name='ht'/>
  <feature policy='require' name='dca'/>
  <feature policy='require' name='pdcm'/>
  <feature policy='require' name='pdpe1gb'/>
  <feature policy='require' name='fsgsbase'/>
  <feature policy='require' name='f16c'/>
  <feature policy='require' name='ds'/>
  <feature policy='require' name='tm2'/>
  <feature policy='require' name='ss'/>
  <feature policy='require' name='pbe'/>
  <feature policy='require' name='ds_cpl'/>
  <feature policy='require' name='rdrand'/>
</cpu>

这样移植虚拟机到不同的芯片组的机器时就会有问题,比较好的解决方法就是添加qemu的commandline,具体差别体现在设备管理器中如下:

左图是是qemu模式,右图是host模式,将宿主机的cpu暴露出来

--cpu host
  Expose the host CPUs configuration to the guest. This enables the guest to take advantage of many of the host CPUs
  features (better performance), but may cause issues if migrating the guest to a host without an identical CPU.

 

KVM下windows虚拟机使用virtio驱动的更多相关文章

  1. Centos7利用kvm搭建Windows虚拟机

    这几天玩了一下kvm虚拟化,真的很有意思,我把这几天踩的坑,还有收获,都记录下来,作为以后的复习和检查. 首先说一下我的基本逻辑,我有一台win7的笔记本,我的底层虚拟化是使用VMWare构建的Cen ...

  2. kvm 安装 windows 虚拟机

    作者:SRE运维博客 博客地址: https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/211108848062/ 相关话题:https://ww ...

  3. kvm下Windows激活方式小计

    使用kvm创建widnwos镜像模板,镜像模板默认是已经激活的正版系统,但是使用程序拷贝部署到不同的机器后发现已经激活的系统变成未激活状态,我们需求就是需要拷贝到不同的机器也能显示是正版系统 网上找了 ...

  4. Linux环境:VMware下windows虚拟机与linux主机进行文件共享的方法

    操作主要分两大步骤: 一.是对主机进行配置: 二.是在虚拟机上直接连接共享目录. 一.主机配置 1.打开VMware虚拟机,双击需要进行文件共享的虚拟机.如下图,双击CentOS 64位(以linux ...

  5. Centos7 搭建KVM并创建Linux Windows虚拟机

    一.安装KVM   查看系统版本 cat /etc/redhat-release     关闭防火墙及selinux   systemctl disable firewalld.service 查看防 ...

  6. [转] 如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘

    在使用kvm给windows虚拟机动态挂载virtio类型的硬盘时候遇到问题,通过下面的文章知道需要安装virtio驱动,从而解决问题使挂在正常,在此处mark一下 问题产生背景: 使用CloudSt ...

  7. KVM下virtio驱动虚拟机XML配置文件分析

    [root@opennebula qemu]# pwd /etc/libvirt/qemu [root@opennebula qemu]# ls networks one-12.xml one-12. ...

  8. KVM: 安装Windows virtio半虚拟化驱动

    Install KVM Windows virtio para-virtualized dirver If you can't read Chinese, there's an English ver ...

  9. kvm安装windows使用virtio驱动

    Windows安装VirtIO驱动的两种方法 已经使用IDE方式来安装好系统 (1)安装完Windows后,创建一块临时的硬盘和网卡,将其驱动都设置为virtio模式添加到Windows中 (2) 添 ...

随机推荐

  1. 类classthe Meta-Object Compiler (moc)

    本文是一篇关于类class的帖子 the Meta-Object Compiler (moc) 元对象编译器是处理Qt的C++扩展的程序. moc工具读取C++头文件,如果它找到一个或者多个类声明包含 ...

  2. Tomcat启动时卡在“INFO: Deploying web application directory ”

    今天在linux上的tomcat部署一个网站时,在刚启动tomcat的时候提示启动成功,然后也能访问成功. 可是第二次启动时虽然没有报错,但无法访问tomcat,查看了catalina.out日志,发 ...

  3. (二)Python是一门什么样的语言?

    在学习python是一门什么样的语言之前首先需要知道什么是编译和解释? 编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而 ...

  4. 第一百二十八节,JavaScript,Ajax

    JavaScript,Ajax 学习要点: 1.XMLHttpRequest 2.GET与POST 3.封装Ajax 2005年Jesse James Garrett发表了一篇文章,标题为:" ...

  5. CentOS7配置OpenCV2.4.13

    以管理员身份运行su root输入密码 安装依赖包 yum install gcc gcc-c++ gtk2-devel gimp-devel gimp-devel-tools gimp-help-b ...

  6. C# 中 重载,重写,隐藏的区别

    重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同 重写:子类中实现的方法必须加override关键词   普通非抽象父类需要virtual 抽象类里面抽象方法abstract 接口的实现 ...

  7. MIT线性代数课程 总结与理解-第一部分

    概述 个人认为线性代数从三个角度,或者说三个工具来阐述了线性关系,分别是: 向量 矩阵 空间 这三个工具有各自的一套方法,而彼此之间又存在这密切的联系,通过这些抽象出来的工具可以用来干一些实际的活,最 ...

  8. C++类继承中,基类/当前对象属性/当前对象的构造顺序

    [1]中提到,规范的派生类构造函数三个要点: 首先创建基类对象 应通过成员初始化列表,创建基类对象 应该初始化本派生类新增的成员变量 那在构造派生类实例的过程中,其基类(以及多继承的时候多个基类)/当 ...

  9. idea中建立maven web项卡在Generating Project in Batch mode

    Maven命令执行到Generating Project in Batch mode 卡住,原因是网络带宽不足问题!需要下载一个约5.1M的xml文件. Maven一般命令:mvn archetype ...

  10. java操作mongodb——查询数据

    通过find方法查询集合中的文档信息 -------------------------------------------------------- find() 查询所有文档信息,返回FindIt ...