几种虚拟机镜像格式
几种虚拟机镜像格式 从用户角度看,虚拟机镜像文件是一个安装有操作系统 的磁盘分区,客户操作系统需要经过一个驱动层才能访问到 .目前,有多种虚拟机镜像格式可供选择,包括raw,qcow2、vmdk、vdi、vhd、qed以及fvd等。表1列出了常 用的虚拟机及其支持的镜像格式。 虚拟机镜像文件及其访问方式虚拟机镜像文件保存了虚拟机硬盘的全部信息,按照数据存储方式的不同,可以分为两种模式:全镜像模式(Flat Mode)和稀疏模式(SparseMode)。
在整个虚拟机的体系中,I/O请求的处理过程大致如下: 当VM的客户操作系统中的用户有磁盘I/O请求的时候,VMM(VMMonitor或者称为hypervisor)会捕获其I/O指令,根 据虚拟机实现策略的不同进行必要的转换,最终通过宿主机 操作系统内核的系统调用来完成客户操作系统的I/O请求。 在Xen中,有一个tapdisk进程运行在Dom0中,来负责处理来 自其他DomU的I/O请求,完成地址转换过程。例如,虚拟机客户操作系统需要读或写一个磁盘块,VMM会调用宿主机内核的系统调用,定位到在镜像文件中的相应的文件块。在这 个过程中,由于虚拟化的原因,客户虚拟机的块地址需要经过 若干次的转换才能找到它在物理磁盘上的准确位置。在客户操作系统中,使用的是VBA(VirtualBlockAddress),在VMM 中使用的是IBA(ImageBlockAddress),就是镜像文件内的一 个偏移量,在宿主机内核的系统调用中使用的是PBA (PhysicalBlockAddress)。在定位到这些块的物理地址后,才 能进行客户操作系统所需要的各种操作。在全镜像模式中, 这种地址转换的过程相对简单,只需要一个线性的变换;而在 稀疏模式中,往往需要经过两次以上的地址变换,才能完成 VBA到PBA的转换过程。 几种虚拟机镜像格式的原理rawraw就是原始的,它直接将文件系统的存储单元分配给 虚拟机使用,采取直读直写的策略。在raw格式的文件中,虚 拟出来的磁盘数据块号的大小决定了该数据块在raw文件中 的偏移量,也就是说虚拟磁盘存放数据的顺序和raw文件中 存放数据的顺序是一致的,由于这个特性,VBA到IBA的转 换比较简单,而IBA实际上就是PBA。在很多的实际应用中, 模板镜像采用raw格式,以提高模板镜像的读性能,而增量镜 像则使用其他格式,方便支持其他辅助特性。 raw格式的优点有:一是寻址简单,访问效率较高;二是 可以通过格式转换工具方便地转换为其他格式;三是可以方 便地被宿主机挂载,可以在不启动虚拟机的情况下和宿主机 进行数据传输。但是,由于raw格式实现简单,不支持诸如压 缩、快照、加密和CoW等特性,另外,raw格式文件在创建时指 定大小之后,就占用了宿主机指定大小的空间,而不像qcow2 等稀疏模式的镜像格式可以从很小的文件按需地增长。 qcow2和qedqcow2是qcow的一种改进,是Qemu实现的一种虚拟 机镜像格式。qcow2文件存储数据的基本单元是cluster,每一 个cluster由若干个数据扇区组成,每个数据扇区的大小是 512字节。在qcow2中,要定位镜像文件的cluster,需要经过两 次地址查询操作,类似于主存二级页表转换机制,如图2 客户操作系统的VBA,可以记为d,d=(d1,d2,d3),通过 d1所指示的L1表项的内容,找到L2表的位置A,再由d2指 示的L2表项的内容找到数据块的地址B,d3则指示数据块B 内的偏移量。在qcow2文件创建初始的时候,文件只有L1表 和文件头,L1表初始为空,当VM提供一个VBA需要写操作 的时候,qcow2的底层驱动会检查d1所指示的L1表项是否 为空,如果为空,就会在文件尾部新建一个L2表,并且把d1 所指示的L1表项赋值为L2表的地址,同理,也可以定位第一 次写数据块的地址和d2所指示的L2表项的值。当VM有读 数据操作的时候,qcow2驱动会首先确定该数据块是否在镜 像文件中,如果不在镜像文件中,则会从模板镜像中读取。在 qcow2中,数据块的IBA取决于第一次写操作,文件大小也会 随着写操作的增加而不断增长,基本上做到了用多少空间分 配多少空间,而不像raw格式一样,文件创建初始就是占用了 比较大的磁盘空间。qcow2格式不仅支持CoW,还支持快照、 压缩和加密等特性。 vmdkvmdk是VMware实现的虚拟机镜像格式,与qcow2类似, vmdk也可以支持CoW快照、压缩等特性,镜像文件的大小也 是随着数据写入操作的增长而增长,数据块的寻址也需要通 过两次查询。在vmdk镜像文件的头部,会有一个文本描述 符(TextDescriptor),该文本描述了数据在虚拟镜像文件中数 据的布局方式。文本描述符在vmdk镜像文件中可以以单独 的文件形式存在,也可以作为文件头包含在镜像文件中。 vmdk通常会由一个basedisk,若干个link和extent组成,link 指示的是basedisk和extent的关系,extent是一个物理上的存 储区域,通常是一个文件。vmdk数据存储的单位被叫作 grain,每个grain也由若干个512字节大小的sector组成。在 支持稀疏存储的vmdk中,通过二级的元数据查询机制进行 数据块的定位。0级元数据称为grain目录(GrainDirectory, GD),1级元数据称为grain表(GrainTable,GT),GD和GT的 关系如图3所示。在实现上,基本上和qcow2类似。 fvdvd不仅支持上述qcow2和vmdk除了压缩以外的其他特 1)使用位图(Bitmap)来实现CoW。位图里的一位表示 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |