(KVM连载) 5.1.5 使用virtio_blk (半虚拟化磁盘)

5.1.5 使用virtio_blk

virtio_blk驱动使用Virtio API为客户机的提供了一个高效访问块设备I/O的方法。在QEMU/KVM对块设备使用virtio,需要两方面的配置:客户机中的前端驱动模块virtio_blk和宿主机中的QEMU提供后端处理程序。目前比较流行的Linux发行版一般都将virtio_blk编译为内核模块了,可以作为客户机直接使用virtio_blk,而windows中virtio驱动的安装方法已在5.1.2节中做了介绍。并且较新的qemu-kvm都是支持virtio block设备的后端处理程序的。

启动一个使用virtio_blk作为磁盘驱动的客户机,其qemu-kvm命令行如下。

[root@jay-linux kvm_demo]# qemu-system-x86_64 -smp 2 -m 1024 -net nic -net tap –drive file=rhel6u3.img,if=virtio

VNC server running on `::1:5900'

在客户机中,查看virtio_blk生效的情况如下所示。

[root@kvm-guest ~]# grep VIRTIO_BLK \ /boot/config-2.6.32-279.el6.x86_64

CONFIG_VIRTIO_BLK=m

[root@kvm-guest ~]# lsmod | grep virtio

virtio_blk              7292  3

virtio_pci              7113  0

virtio_ring             7729  2 virtio_blk,virtio_pci

virtio                  4890  2 virtio_blk,virtio_pci

[root@kvm-guest ~]# lspci | grep -i block

00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device

[root@kvm-guest ~]# lspci -vv -s 00:04.0

00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device

Subsystem: Red Hat, Inc Device 0002

Physical Slot: 4

Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+

Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-

Interrupt: pin A routed to IRQ 11

Region 0: I/O ports at c100 [size=64]

Region 1: Memory at febf2000 (32-bit, non-prefetchable) [size=4K]

Capabilities: [40] MSI-X: Enable+ Count=2 Masked-

Vector table: BAR=1 offset=00000000

PBA: BAR=1 offset=00000800

Kernel driver in use: virtio-pci

Kernel modules: virtio_pci

 

[root@kvm-guest ~]# fdisk -l

 

Disk /dev/vda: 8589 MB, 8589934592 bytes

16 heads, 63 sectors/track, 16644 cylinders

Units = cylinders of 1008 * 512 = 516096 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000726b0

 

Device Boot      Start         End      Blocks   Id  System

/dev/vda1   *           3       14826     7471104   83  Linux

/dev/vda2           14826       16645      916480   82  Linux swap / Solaris

可知客户机中已经加载virtio_blk等驱动,SCSI磁盘设备是使用virtio_blk驱动(上面查询结果中显示为virtio_pci,因为它是作为任意virtio的PCI设备的一个基础、必备的驱动)。使用virtio_blk驱动的磁盘显示为“/dev/vda”,这不同于IDE硬盘的“/dev/hda”或者SATA硬盘的“/dev/sda”这样的显示标识。

而“/dev/vd*”这样的磁盘设备名称可能会导致从前分配在磁盘上的swap分区失效,因为有些客户机系统中记录文件系统信息的“/etc/fstab”文件中有类似如下的对swap分区的写法。

/dev/sda2  swap swap defaults 0 0

或  /dev/hda2  swap swap defaults 0 0

原因就是换为“/dev/vda2”这样的磁盘分区名称未被正确识别,解决这个问题的方法就很简单了,只需要修改它为如下的形式并保存“/etc/fstab”文件,然后重启客户机系统即可。

/dev/vda2  swap swap defaults 0 0

如果启动的是已安装virtio驱动的Windows客户机,则在客户机的“设备管理器”中的“存储控制器”中看到的是正在使用“Red Hat VirtIO SCSI Controller”设备作为磁盘。

master

Stay hungry, stay foolish.

发表评论

邮箱地址不会被公开。 必填项已用*标注

*