Linux · 2022-09-08

kvm里的虚拟机硬盘和网卡使用virtio驱动

1.首先从虚拟机的xml文件中找到已经使用virtio驱动的硬件,复制里面的address这行参数出来

<address <span class="hljs-built_in">type</span>=<span class="hljs-string">'pci'</span> domain=<span class="hljs-string">'0x0000'</span> bus=<span class="hljs-string">'0x00'</span> slot=<span class="hljs-string">'0x07'</span> <span class="hljs-keyword">function</span>=<span class="hljs-string">'0x0'</span>/>

说明:这里面的slot参数是需要修改的,不能重复

因此硬盘slot使用0x08,网卡使用0x09

2.找到硬盘的配置内容所在

    <span class="hljs-tag"><<span class="hljs-title">disk</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'file'</span> <span class="hljs-attribute">device</span>=<span class="hljs-value">'disk'</span>></span>
      <span class="hljs-tag"><<span class="hljs-title">driver</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">'qemu'</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'qcow2'</span>/></span>
      <span class="hljs-tag"><<span class="hljs-title">source</span> <span class="hljs-attribute">file</span>=<span class="hljs-value">'/home/kvm/generic.qcow2'</span>/></span>
      <span class="hljs-tag"><<span class="hljs-title">target</span> <span class="hljs-attribute">dev</span>=<span class="hljs-value">'hda'</span> <span class="hljs-attribute">bus</span>=<span class="hljs-value">'ide'</span>/></span> # 换成virtio 
      <span class="hljs-tag"><<span class="hljs-title">address</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'drive'</span> <span class="hljs-attribute">controller</span>=<span class="hljs-value">'0'</span> <span class="hljs-attribute">bus</span>=<span class="hljs-value">'0'</span> <span class="hljs-attribute">target</span>=<span class="hljs-value">'0'</span> <span class="hljs-attribute">unit</span>=<span class="hljs-value">'0'</span>/></span> # 这行换成这个:<span class="hljs-tag"><<span class="hljs-title">address</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'pci'</span> <span class="hljs-attribute">domain</span>=<span class="hljs-value">'0x0000'</span> <span class="hljs-attribute">bus</span>=<span class="hljs-value">'0x00'</span> <span class="hljs-attribute">slot</span>=<span class="hljs-value">'0x08'</span> <span class="hljs-attribute">function</span>=<span class="hljs-value">'0x0'</span>/></span>
    <span class="hljs-tag"></<span class="hljs-title">disk</span>></span>

3.找到网卡的配置内容所在

没有切换使用桥接网络的配置,默认的NAT配置

    <span class="hljs-tag"><<span class="hljs-title">interface</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'network'</span>></span>
      <span class="hljs-tag"><<span class="hljs-title">mac</span> <span class="hljs-attribute">address</span>=<span class="hljs-value">'52:54:00:30:06:32'</span>/></span>
      <span class="hljs-tag"><<span class="hljs-title">source</span> <span class="hljs-attribute">network</span>=<span class="hljs-value">'default'</span>/></span>
      <span class="hljs-tag"><<span class="hljs-title">model</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'rtl8139'</span>/></span> # 需要修改这个rtl8139为virtio
      <span class="hljs-tag"><<span class="hljs-title">address</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'pci'</span> <span class="hljs-attribute">domain</span>=<span class="hljs-value">'0x0000'</span> <span class="hljs-attribute">bus</span>=<span class="hljs-value">'0x00'</span> <span class="hljs-attribute">slot</span>=<span class="hljs-value">'0x03'</span> <span class="hljs-attribute">function</span>=<span class="hljs-value">'0x0'</span>/></span> # 这行修改成 <span class="hljs-tag"><<span class="hljs-title">address</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'pci'</span> <span class="hljs-attribute">domain</span>=<span class="hljs-value">'0x0000'</span> <span class="hljs-attribute">bus</span>=<span class="hljs-value">'0x00'</span> <span class="hljs-attribute">slot</span>=<span class="hljs-value">'0x09'</span> <span class="hljs-attribute">function</span>=<span class="hljs-value">'0x0'</span>/></span>
    <span class="hljs-tag"></<span class="hljs-title">interface</span>></span>

切换使用桥接网络的配置

    <span class="hljs-tag"><<span class="hljs-title">interface</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'bridge'</span>></span>
      <span class="hljs-tag"><<span class="hljs-title">mac</span> <span class="hljs-attribute">address</span>=<span class="hljs-value">'52:54:00:30:06:32'</span>/></span>
      <span class="hljs-tag"><<span class="hljs-title">source</span> <span class="hljs-attribute">network</span>=<span class="hljs-value">'br0'</span>/></span>
      <span class="hljs-tag"><<span class="hljs-title">model</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'rtl8139'</span>/></span>
      <span class="hljs-tag"><<span class="hljs-title">address</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'pci'</span> <span class="hljs-attribute">domain</span>=<span class="hljs-value">'0x0000'</span> <span class="hljs-attribute">bus</span>=<span class="hljs-value">'0x00'</span> <span class="hljs-attribute">slot</span>=<span class="hljs-value">'0x03'</span> <span class="hljs-attribute">function</span>=<span class="hljs-value">'0x0'</span>/></span>
    <span class="hljs-tag"></<span class="hljs-title">interface</span>></span>

切换使用virtio驱动的配置

    <interface <span class="hljs-built_in">type</span>=<span class="hljs-string">'bridge'</span>>
      <mac address=<span class="hljs-string">'52:54:00:30:06:32'</span>/>
      <<span class="hljs-built_in">source</span> bridge=<span class="hljs-string">'br0'</span>/>
      <model <span class="hljs-built_in">type</span>=<span class="hljs-string">'virtio'</span>/>  <span class="hljs-comment"># 修改后的效果</span>
      <address <span class="hljs-built_in">type</span>=<span class="hljs-string">'pci'</span> domain=<span class="hljs-string">'0x0000'</span> bus=<span class="hljs-string">'0x00'</span> slot=<span class="hljs-string">'0x09'</span> <span class="hljs-keyword">function</span>=<span class="hljs-string">'0x0'</span>/>  <span class="hljs-comment"># 修改后的效果</span>
    </interface>

 

创建临时的virtio驱动的磁盘文件 qemu-img create -f qcow2 /opt/kvm-img/re-fastdfs.img 1G

attach-disk win10 /data2/virtio-win-0.1.221.iso hda –type cdrom –mode readonly

 

 

默认情况下,创建的vm的视频RAM限制为 16MB 。在win操作系统中分辨率最高就只能调到 1024x768 。


   type
=
'cirrus' vram
=
'16384' heads
=
'1' primary
=
'yes'
/>
   type
=
'pci' domain
=
'0x0000' bus
=
'0x00' slot
=
'0x02' function
=
'0x0'
/>

单单修改ram大小并不管用,在vm中最高分辨率还是1024。

也就是说可能还需要其他的设置。

增加必要的视频RAM

默认的具有 16MB 的视频RAM,4k分辨率(3840 x 2160)来计算。

3840
 x 
2160 = 8294400     # 总共像素点
8294400
 x 
32 = 265420800  # 每个像素点占 4 个字节
265420800
/
8 = 33177600    # 转为 Byte 单位
33177600 /(
1024 * 1024
)= 31.640625
 MB

所以32 MB视频RAM足以达到4k分辨率,考虑到一些开销,我们将视频RAM增加到64 MB。

视频类型设置为 qxl ,如下更新配置文件中的设置:


   type
=
'qxl' ram
=
'65536' vram
=
'65536' vgamem
=
'65536' heads
=
'1' primary
=
'yes'
/>
   type
=
'pci' domain
=
'0x0000' bus
=
'0x00' slot
=
'0x02' function
=
'0x0'
/>

重新启动vm就能看到支持的分辨率了。