VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解
2017-09-05 18:59 云物互联 阅读(694) 评论(0) 编辑 收藏 举报目录
前文列表
VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析
虚拟磁盘文件 VMDK
虚拟磁盘文件(VMDK File) 后缀为 .vmdk,是虚拟机的存储卷,Guest OS File System 储存在 VMDK File,而 VMDK File 又会以文件的形式储存在物理磁盘设备上。VMDK File 支持两种物理磁盘类型:
托管磁盘(Managed Disk):托管磁盘通常指的是 File System Format 为 VMFS 的物理存储设备,能够支持使用光纤、iSCSI 或 SAS 来连接到 ESX/ESXi Host 的存储网络(SAN),也能够支持网络挂载存储(NAS),甚至能够直接挂载到 ESX/ESXi Host 上。在 vCenter 体系中,VMDK File 会被储存于共享的 Datastore 之上,再由 vCenter 管理着这些存储簇(Storage Clusters),这令 vCenter 能够支持在 ESX/ESXi Host 之间迁移虚拟机而不需要移动 VMDK 文件;在 ESX/ESXi Host 体系中,VMDK File 通常存放在物理存储设备的某个 /vmfs/volumes 目录中。
寄宿磁盘(Hosted Disk):寄宿磁盘没有特定的 File System Format 要求,所谓寄宿,即适应 Host 原生的磁盘类型。在 Worksation 体系中,寄宿磁盘会适应 Host File System,而将 VMDK File 储存于本地磁盘之上。
NOTE:需要注意的是 VDDK 对两种不同类型的磁盘设备的操作函数也是有所区别的,对于托管磁盘,VDDK 应用程序可以利用高级传输接口函数通过 SAN 而不是 LAN 来执行大多数 I/O 操作,以此来提高程序性能,并保护网络带宽。
用户可以创建的虚拟磁盘类型
在创建一个虚拟磁盘时,会进行两个操作:分配空间、置零。
厚置备延迟置零(Lazy Zeroed Thick):默认的磁盘创建格式,创建磁盘时会直接从磁盘分配所需空间,但不会即时擦除磁盘上保留的数据,而是在虚拟机执行 I/O 操作时按需要将其置零。简单来说,就是立即完全分配指定的磁盘空间给虚拟机,但延迟对该磁盘空间进行清零操作.
- 特性:磁盘性能较好,创建时间短,适合于做池模式的虚拟桌面。
厚置备置零(Eager Zeroed Thick):创建支持群集功能(E.G. FaultTolerance)的厚磁盘格式,创建磁盘时,直接从磁盘分配空间并立即对物理设备上保留的数据置零。所以当虚拟机有 I/O 操作时,就能够直接执行。简单来说,就是立即完全分配指定的磁盘空间给虚拟机, 并立即清零磁盘空间, 所需时间较长。
- 特性:磁盘性能最好,创建时间长,适合于做跑运行繁重应用业务的虚拟机。
精简置备(Thin):创建磁盘时,占用磁盘的空间大小根据实际使用量计算,即用多少分多少,提前不分配空间,对磁盘保留数据不置零,且最大不超过划分磁盘的大小。简单来说,就是按实际磁盘使用量动态增长分配磁盘空间,但最大不能超过指定的最大磁盘分配空间。
- 特性:当有 I/O 操作时,需要先分配空间,再将空间置零,最后才能执行 I/O 操作。当有频繁 I/O 操作时,磁盘性能会有所下降,I/O 不频繁时,磁盘性能较好;创建时间短,适合于对磁盘 I/O 不频繁的业务应用虚拟机。
VixDiskLib 中支持的虚拟磁盘类型
注:VixDiskLib,即虚拟磁盘库,提供了管理虚拟磁盘的系统调用接口。
虽然用户能够创建的虚拟磁盘类型只有 3 种,但在底层程序接口中会根据不同的应用场景(E.G. vCenter、ESX/ESXi) 提供多种磁盘类型参数,开发者可能按照实际情况选择相应的虚拟磁盘类型参数。
寄宿磁盘(Hosted Disk)
单片稀疏型
VIXDISKLIB_DISK_MONOLITHIC_SPARSE
:只包含一个虚拟磁盘文件并能够动态扩展的虚拟磁盘。单片平面型
VIXDISKLIB_DISK_MONOLITHIC_FLAT
:只包含一个虚拟磁盘文件,提前分配存储空间的虚拟磁盘。创建这种磁盘需要较多的时间,并占用大量空间,但是可能会提供比稀疏型磁盘更好的性能。分片稀疏型
VIXDISKLIB_DISK_SPLIT_SPARSE
:可扩展的虚拟磁盘,整个磁盘被分为多个2GB大小的关联文件。这些文件可以增大到2GB,然后在新的文件中继续扩展。这种类型可以在较老的文件系统上使用。分片平面型
VIXDISKLIB_DISK_SPLIT_FLAT
:提前分配空间的虚拟磁盘,并被分为多个大小为 2GB 的虚拟磁盘文件。这些从 2GB 开始,所以创建它们需要较长的时间,但是能够以 2GB 持续增长。
托管磁盘(Managed Disk)
VMFS 平面型
VIXDISKLIB_DISK_VMFS_FLAT
:提前分配空间的虚拟磁盘,在 ESX3 或更新的平台上可用,也叫做厚置备磁盘(Thick Disk)。VMFS 稀疏型
VIXDISKLIB_DISK_VMFS_SPARSE
:使用一种写时复制(Copy-on-Write, COW)机制来节省存储空间,这是虚拟机常用的快照磁盘类型。VMFS 精简型
VIXDISKLIB_DISK_VMFS_THIN
:这种类型假设需要尽可能多的空间,然后以此来扩展虚拟磁盘的大小。能够在 ESX3 以及更新的平台上使用,也叫做精简置备磁盘(Thin Disk)。。单片流优化
VIXDISKLIB_DISK_STREAM_OPTIMIZED
:单片、稀疏格式对数据流进行压缩。这种格式不支持随机读写。
虚拟机文件类型
一台 VMware 虚拟机除了包含上述提到的 VMDK File 之外,还包含了各式各样、针对各种场景的配置文件或描述文件,以及特殊文件在 API 中的参数项。
后缀 | 描述 | API 参数 |
---|---|---|
[vmname].vmx | 虚拟机配置文件 | |
[vmname].vmdk | 如果选择「动态分配磁盘」设置,会创建一个可根据需要空间大小动态增长的 VMDK File。此时该文件是实际的磁盘数据文件。[vmname] 表示虚拟机的名称。在 VMFS 分区上,这是磁盘描述文件的名称。除此之外,该文件还可能保存的是该虚拟机磁盘文件的元数据。 | MONOLITHIC_SPARSE |
[vmname]-flat.vmdk | Extent description 文件,如果勾选了「立即分配磁盘空间」,虚拟磁盘文件将会提前分配所有空间,不会动态增长。第一个 VMDK File 很小(即上述的元数据文件),并指向一个大的 -flat.vmdk VMDK 文件,此时该文件保存的是虚拟机实际的虚拟磁盘数据。 | MONOLITHIC_FLAT、VMFS_FLAT、VMFS_THIN |
[vmname]-ctk.vmdk | Change Tracking File 改变追踪文件,保存自上次快照以来的所发生改变的虚拟机数据块的信息。 | |
[vmname].vmem | 虚拟机的内存页面文件,存放虚拟机运行时的内存数据,在虚拟机运行或者崩溃时被创建 | |
.vmss | 虚拟机挂起时的状态信息文件 | |
.vmsd | 虚拟机快照的元数据文件,保存了如快照名、UID(Unique Identifier)、磁盘文件名等信息。在创建快照前,其 size 为 0byte | |
.vmtx | 虚拟机模板文件 | |
.nvram | 虚拟机 bios 文件 | |
.vswp | 虚拟机交换文件 | |
.log | 虚拟机日志文件 | |
[vmname]-s<###>.vmdk | 如果只勾选「分割成 2GB 大小的文件」,虚拟磁盘文件将会在需要更多空间时才被扩展。第一个 VMDK File 很小,为元数据文件,并指向一系列的其他 VMDK 文件,它们在序号数字前都有一个 S 标志,表明是稀疏类型的(sparse)。VMDK 文件的数字依赖于所需要的磁盘大小。随着数据增长,将会在这个序列中新增更多的 VMDK File。 | SPLIT_SPARSE |
[vmname]-f<###>.vmdk | 如果勾选「立即分配磁盘空间」和「将磁盘分成 2GB 大小的文件」两个选项,那么虚拟磁盘空间将会提前分配,不会动态扩展。第一个 VMDK File 是一个元数据文件,指向一系列的其他文件,这些文件在数字序号之前都有一个 f(flat) 前缀。数字由磁盘大小决定。 | SPLIT_FLAT |
[diskname]-<###>.vmdk | 当给虚拟机创建快照时,会生成 redo-log 文件,也叫做子磁盘(child disk)或者差异链接(delta link)。快照文件中有序号数字,但是没有 f/s 前缀。针对原来的父磁盘或者更早的回写日志(即更早的快照)的数据修改,将会写进这些带编号的的 VMDK File 中。 | MONOLITHIC_SPARSE、SPLIT_SPARSE |
[vnname]Snapshot.vmsn | 虚拟机快照的状态信息文件,用于保存创建快照时虚拟机的状态,包含了指向所有 VMDK File 的信息。这个文件的大小取决于创建快照时是否选择保存内存的状态。如果保存的话,那么这个文件会比分配给这个虚拟机的内存大小还要大几兆 | n/a |