前面介绍了存储的配置和qemu-img工具来管理镜像,在QEMU/KVM中,客户机镜像文件可以由很多种方式来构建,其中几种如下:
1) 本地存储的客户机镜像文件。
2) 物理磁盘或磁盘分区。
3) LVM(Logical Volume Management ), 逻辑分区。
4 ) NFS(Network File System), 网络文件系统。
5) iSCSI(Internet Small Computer System Interface ), 基于Internet的小型计算机系统接口。
6) 本地或光纤通道连接的LUN(Logical Unit Number)。
7) GFS2(Global File System 2)。
本地存储的客户机镜像文件是最常用的一种方式:
它有预分配空间的raw文件、稀疏文件类型的raw文件、qcow2等多种格式。
预分配空间的raw文件不随镜像的使用而增长,而是在创建之初即完全占用磁盘空间,其消耗较多磁盘空间,不过运行效率较高。
稀疏文件(包括raw和qcow2格式)在一开始时并不占用多的磁盘空间,而是随实际写入数据才占用物理磁盘,比较灵活且节省磁盘空间,不过其在第一次写入数据时需要额外在宿主机中分配空间,因此其效率较低一些。
而qcow2具有加密的安全性,所以在对磁盘IO性能要求不是很高时建议选择qcow2类型的镜像文件。
不仅一个文件可以分配给客户机作为镜像文件系统,且一个完整的磁盘或LVM分区也可以作为镜像分配给客户机使用。不过,磁盘分区、LVM分区由于没有磁盘的MBR引导记录,不能作为客户机的启动镜像,只能作为客户机附属的非启动块设备。
一般来说,磁盘或LVM分区会有较好的性能,读写的延迟较低、吞吐量较高。
不过为了防止客户机破坏物理磁盘分区,一般不将整个磁盘作为镜像由客户机使用。使用磁盘或LVM分区的劣势在于管理和移动性方面都不如镜像文件方便,而且不方便通过网络远程使用。
NFS作为使用非常广泛的分布式文件系统,可以使客户端挂载远程NFS服务器中的共享目录,然后像使用本地文件系统一样使用NFS远程文件系统。
如果NFS服务器端向客户端开放了读写的权限,那么可以直接挂载NFS,然后使用其中的镜像文件作为客户启动磁盘。
如果NFS服务器端没有向客户端开放写权限,也可以在NFS客户端系统将远程NFS系统上的镜像文件作为后端镜像(backing file),以建立qcow2格式Copy-On-Write的本地镜像文件供客户机使用。这样做还有一个好处是保持NFS服务器上的镜像一致性、完整性,从而可以供给多个客户端同时使用。而且由于NFS的共享特性,因此NFS方式为客户机的动态迁移提供了非常方便的共享存储系统。
下面的命令行演示了NFS作为后端镜像的应用,在本地用qcow2格式镜像文件启动一个客户机。
在宿主机中,挂载NFS文件系统、建立qcow2镜像,然后启动客户机,如下所示:
在客户机中,查看磁盘文件系统,指令如下:
fdisk -1
iSCSl是一套基于IP协议的网络存储标准,真正的物理存储放在初始端(initiator),而使用iSCSI磁盘的是目标端(target),它们之间实现了SCSI标准的命令,让目标端使用起来就和使用本地的SCSI硬盘一样,只是数据是在网络上进行读写操作的。
光纤通道(Fibre Channel)也可以实现与iSCSI类似的存储区域网络(storage area network,SAN),不过它需要光纤作为特殊的网络媒介。
GFS2是由Redhat公司主导开发的主要给Linux计算机集群使用的共享磁盘文件系统,一般在Redhat的RHEL系列系统中有较多使用,它也可被用做QEMU/KVM的磁盘存储系统。
如果需要获得更高性能的磁盘IO,可以使用半虚拟化的virtio作为磁盘驱动程序