KVM虚拟化之磁盘:磁盘驱动

目录

概述

I/O设备半虚拟化驱动(virtio)

Guest of Windows

Guest of Linux

Virtio in Openstack

virtio_blk和virtio-scsi

virtio-blk:

virtio-scsi:


概述

IDE       - Slow Write in the Guest System
SCSI     - Faster Write(as IDE) in Guest System
VIRTIO - Fastest Write (more that SCSI and IDE) in the Guest System, but only with extra Drivers (In Guest)

磁盘驱动

类型

兼容性

性能

磁盘命名

虚拟机支持最大磁盘数量

热插拔

备注

IDE

全虚拟化

最好

/dev/hdX

依赖IDE协议限制(测试值3)

不支持

虚机无需更改,使用方便

SATA

全虚拟化

virtio-blk/

virtio

半虚拟化

较好

/dev/vdX

受限虚机PCI槽数限制

理论:30(测试值14)

支持,可以在线添加硬盘

为了改善全虚拟化性能,部分系统需要安装virtio驱动

virtio-scsi/

scsi

半虚拟化

与virtio-blk持平

/dev/sdX

受限于内核限制:18278

支持

为了解决virtio的诸多限制,用以替代virtio

注释:CentOS6.x只支持IDE、virtio;CentOS7.x增加支持SATA、scsi。

整体上来看这三者的最大不同还是挂载磁盘的数量。
一台win7的虚拟机,最多可以创建3个ide硬盘,当再次创建新的ide硬盘时候,会提示无法创建。
同时,实验中最多创建了14块virtio硬盘,虽然界面允许创建更多virtio硬盘,但是超过14块,虚拟机是无法启动的。
virtio-scsi可以创建足够多的硬盘,以至于协议自身并不是限制因素,而内核的限制反而成了硬盘数目的极限。

KVM是必须使用硬件虚拟化辅助技术(如Intel VT-x、AMD-V)的hypervisor。

在CPU运行效率方面有硬件支持,其效率是比较高的;

在I/O虚拟化方面,传统的方式是使用QEMU纯软件的方式来模拟I/O设备。但可以在客户机中使用半虚拟化驱动(Paravirtualized Drivers,PV Drivers)来提高客户机的性能(特别是I/O性能):

  • 全虚拟化时GuestOS不知道自己是虚拟机,于是像发送普通的IO一样发送数据,被Hypervisor拦截,并经由QEMU转发给真正的硬件。
  • 在半虚拟时GuestOS知道自己是虚拟机(我理解应该驱动是经过修改的),即GuestOS安装的是半虚拟化驱动,所以数据直接发送给半虚拟化设备,经过特殊处理,发送给真正的硬件。因此性能要好于全虚拟化。

I/O设备半虚拟化驱动(virtio)

包括:磁盘I/O、网络I/O

目前,KVM中实现半虚拟化驱动的方式是采用了virtio这个Linux上的设备驱动标准框架。Virtio半虚拟化驱动的方式,可以获得很好的I/O性能,其性能几乎可以达到和native(即:非虚拟化环境中的原生系统)差不多的I/O性能。

所以,在使用KVM之时,如果宿主机内核和客户机都支持virtio的情况下,一般推荐使用virtio达到更好的性能。

当然,virtio也是有缺点的,它必须要客户机安装特定的Virtio驱动使其知道是运行在虚拟化环境中,且按照Virtio的规定格式进行数据传输,不过客户机中可能有一些老的Linux系统不支持virtio主流的Windows系统需要安装特定的驱动才支持Virtio。不过,较新的一些Linux发行版(如RHEL 6.3、Fedora 17等)默认都将virtio相关驱动编译为模块,可直接作为客户机使用virtio,而且对于主流Windows系统都有对应的virtio驱动程序可供下载使用。

Guest of Windows

主流Windows virtio驱动下载地址:

https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html

创建Windows镜像:https://docs.openstack.org/image-guide/windows-image.html 

Guest of Linux

Linux下查看内核是否支持virtio:

# grep "VIRTIO" /boot/config-3.10.0-1062.9.1.el7.x86_64
……
CONFIG_VIRTIO_BLK=m
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
……

Virtio in Openstack

openstack对virtio支持,是通过Image实现的。

首先Image需要像上面Linux一样内核支持,否则需要提前安装virtio驱动。openstack默认使用virtio-blk创建虚机,如果要使用scsi,需要设置Image的property。

https://docs.openstack.org/glance/latest/admin/useful-image-properties.html

$ openstack image set --property hw_disk_bus=scsi centos7-mini
$ openstack image set --property hw_scsi_model=virtio-scsi centos7-mini


$ openstack image show centos7-mini |grep properties
| properties       | hw_disk_bus='scsi', hw_scsi_model='virtio-scsi'      |

$ openstack image show win10-scsi |grep properties
| properties       | hw_disk_bus='scsi', hw_scsi_model='virtio-scsi'      |

如果使用IDE,则会报:INACCESSIBLE BOOT DEVICE蓝屏。

                          

virtio_blk和virtio-scsi

确认硬盘是否为半虚拟化设备(Linux$ lsblk

使用virtio_blk驱动的硬盘显示为/dev/vda
使用IDE硬盘显示为/dev/hda
使用SATA硬盘显示/dev/sda。

确认网络设备是否为半虚拟化设备

使用ethtool -i 设备名 查看,当driver为virtio_net时说明为半虚拟化的。

virtio-blk

虚拟机启动参数:

-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1
-drive file=/home/images/win10-virtio.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 

对应Libvirt XML描述文件:

<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/var/lib/libvirt/images/win10-virtio.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>

虚拟机内部:

$ lspci
……
00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device

$ lsblk
vda
……

virtio-scsi

虚拟机启动参数:

-device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6
-drive file=/home/images/win10-scsi.qcow2,format=qcow2,if=none,id=drive-scsi0-0-0-0
-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=1

对应的Libvirt XML描述如下:

 <controller type='scsi' index='0' model='virtio-scsi'/>
 <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/home/images/win10-scsi.qcow2'/>
      <target dev='sda' bus='scsi'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
 </disk>

虚拟机内部:

$ lspci
……
00:04.0 SCSI storage controller: Red Hat, Inc Virtio SCSI

或

$ lsscsi
[2:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sda

$ lsblk
sda
……
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用和运维CentOS中的KVM虚拟化需要以下步骤: 1. 安装KVM虚拟化软件包:在CentOS中,可以使用yum命令安装KVM虚拟化软件包,例如:yum install qemu-kvm libvirt virt-install bridge-utils。 2. 配置网络桥接:为了让虚拟机能够访问外部网络,需要配置网络桥接。可以使用bridge-utils工具创建一个桥接设备,然后将物理网卡和虚拟网卡连接到桥接设备上。 3. 创建虚拟机:可以使用virt-install命令创建虚拟机。在创建虚拟机时,需要指定虚拟机的名称、磁盘大小、内存大小、CPU数量等参数。 4. 安装操作系统:创建虚拟机后,需要安装操作系统。可以使用virt-install命令安装操作系统镜像文件,也可以使用virt-manager图形界面工具进行安装。 5. 管理虚拟机:可以使用virsh命令管理虚拟机,例如启动、停止、暂停、恢复等操作。也可以使用virt-manager图形界面工具进行管理。 以上就是使用和运维CentOS中的KVM虚拟化的基本步骤。 ### 回答2: 使用和运维CentOS中的KVM虚拟化可以使企业或个人在物理服务器上创建多个虚拟机,提高了服务器的利用率,也方便了运维管理。 KVM虚拟化是一种基于硬件虚拟化技术的虚拟化方案,它利用虚拟机监控器(VMM)将物理机的资源分配给多个虚拟机,每个虚拟机独立运行,可以安装不同的操作系统,并且相互之间隔离,不影响彼此的工作。 在CentOS服务器上使用KVM虚拟化需要满足以下条件:服务器的CPU需要支持硬件虚拟化技术,如Intel VT或AMD-V;安装KVM软件包和相关的工具。 安装KVM软件包和工具可以通过以下方式: 先安装必要的组件: sudo yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libguestfs-tools virt-install 然后,启动Libvirtd服务: sudo systemctl start libvirtd 启动后可以通过以下命令查看服务状态: sudo systemctl status libvirtd 下一步就是启动虚拟机,可以通过virt-manager进行图形化管理,也可以通过命令行的virt-install和virsh进行管理。 使用KVM虚拟化还可以通过创建虚拟网络,实现虚拟机之间和虚拟机与物理机之间的通信,也可以使用存储池(pool)将虚拟机的磁盘文件存放在同一位置,方便管理和备份。 在运维管理上,KVM虚拟化提供了多种运维管理工具,如virtualization-manager、virsh等,可以实现虚拟机的创建、删除、启动、停止等操作,也可以监控虚拟机的性能和管理虚拟机的配置等。 总的来说,使用和运维CentOS中的KVM虚拟化是非常方便和灵活的,可以实现资源的最大化利用,也可以为企业提供高效且安全的应用部署方案。 ### 回答3: KVM是一款基于Linux内核的开源虚拟化技术,可以在单个Linux主机上运行多个虚拟机。CentOS作为一种稳定可靠的Linux发行版,广泛应用于企业级应用,其内置的KVM虚拟化技术也得到了广泛的应用和支持。 在使用和运维CentOS中的KVM虚拟化时,我们需要遵循以下步骤: 1. 安装KVM:在CentOS上安装KVM非常容易,只需要安装几个软件包即可。我们可以使用yum install来安装相关软件包:yum install qemu-kvm libvirt virt-install bridge-utils 2. 配置网络:在KVM中,每个虚拟机都有自己的IP地址,并且可以访问外部网络。为了实现这一功能,我们需要为KVM配置一个网桥,并将虚拟机接入到此网桥上。这样,虚拟机就可以获得与物理主机相同的网络访问权限。我们可以在/etc/sysconfig/network-scripts/目录下创建一个ifcfg-br0文件,该文件定义了我们的网桥参数,如以下示例: DEVICE=br0 TYPE=Bridge BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 3. 创建虚拟机:在KVM中创建虚拟机的过程非常简单,只需要通过virt-install命令即可。我们可以为每个虚拟机创建一个XML文件,其中包含虚拟机的定义。例如,我们可以在/usr/share/doc/virt-install/examples/目录下找到一个完整的XML定义文件,然后稍作修改以适应我们的环境。 4. 管理虚拟机:管理虚拟机时,我们可以使用virsh命令。使用virsh命令可以启动、关闭、暂停、恢复虚拟机;管理虚拟机中的存储和网络;查看虚拟机资源使用统计信息等。例如,以下命令用于启动一个虚拟机: virsh start myvm 5. 备份虚拟机:备份虚拟机时,我们可以简单地使用cp命令,将虚拟机镜像文件复制到备份目录中即可。另外,我们还可以使用其他工具如rsync、tar等对虚拟机进行备份和还原。 总而言之,使用和运维CentOS中的KVM虚拟化可以为我们提供一种简单而强大的虚拟化解决方案,能够快捷地创建虚拟机、管理虚拟机、备份虚拟机,并提供与物理主机相同的网络访问权限,非常适合中小企业和个人用户使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值