[TOC]

0x00 简述

描述:本章记录了在学习与实践VMware下进行基础知识的记录,方便理解以及优化配置VMware虚拟化环境;


0x01 基础知识

虚拟机文件格式介绍:

  • .vmdk : VMware虚拟磁盘文件,即虚拟机存放文件的虚拟机磁盘,我们可以采用虚拟机映射或者diskgenius磁盘管理软件进行打开;
    WeiyiGeek.

    WeiyiGeek.

  • .vmx : VMware虚拟机配置,通过打开设置虚拟机文件以启动系统并且可以进行自定义配置修改(用文本文档的方式将其打开)。
    1
    2
    #躲避游戏检测时
    monitor_control.restrict_backdoor = "TRUE"
  • .vmxf: (VMware team member) VMware组成员,即该文件为虚拟机组team中的虚拟机的辅助配置文件。
  • .vmsd : VMware快照元素,即VM快照和相关联的vmdk的字典文件;
  • .nvram : VMware虚拟机非易变RAM(二进制格式),即存放虚拟机的BIOS信息;
  • .vmx.lck : VMware虚拟机磁盘锁文件,防止多台虚拟机同时访问一个.vmdk虚拟磁盘文件带来的数据丢失和性能下降;
  • .log : Vmware工作日志;
  • .ovf : (Open Virtualization Format) 开放虚拟化格式 ,即它描述了一个开源、安全、有效、可拓展的便携式虚拟打包以及软件分布格式,组成部分分别是ovf文件、mf文件、cert文件、vmdk文件和iso文件;
  • .ova : (Open Virtualization Appliance) 开放虚拟化设备(现在基本采用ovf格式)
  • .mf : 记录 .nvram 以及 vmdk 文件的SHA1、SHA256值,以便校验使用;

补充说明:

  • 1.VDI, VHD, VMDK虚拟磁盘文件之间的区别?
    共同点: 支持动态存储分配
    1
    2
    3
    VDI 是virtual box 的原生格式。
    VMDK 是VMware开发的在Sun xVM, QEMU, VirtualBox, SUSE Studio, .NET DiscUtils 也支持,它还能把存储文件拆分成小于2GB,在你的文件系统的文件大小限制比较小的时候有用。
    VHD 是Microsoft Virtual PC的原生格式,在微软产品比较流行,可以在虚拟机中使用。
  • 2.vdi格式装换
    1
    2
    3
    4
    5
    6
    7
    VBoxManager二进制文件存在于VirtualBox的安装目录下。
    vmdk转换成vdi
    VBoxManage.exe clonehd source.vmdk target.vdi --format VDI
    vdi转换成vmdk
    VBoxManage.exe clonehd source.vdi target.vmdk --format VMDK
    vdi转换成vhd
    VBoxManage.exe clonehd source.vdi target.vhd --format VHD
  • 3.VHD虚拟文件生成
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    DISKPART> create vdisk file=F:\synoboot.vhd maximum=60 type=expandable
    100 百分比已完成
    DiskPart 已成功创建虚拟磁盘文件。

    DISKPART> attach vdisk
    100 百分比已完成
    DiskPart 已成功连接虚拟磁盘文件。

    DISKPART> create partition primary
    DiskPart 成功地创建了指定分区。

    DISKPART> ASSIGN LETTER=L
    DiskPart 成功地分配了驱动器号或装载点。

    DISKPART> FORMAT LABEL=L
    100 百分比已完成
    DiskPart 成功格式化该卷。

注意事项:

  • 1.如果拟机非正常关闭.vmx.lck磁盘锁文件可能就没能来得及删除,会导致虚拟机内系统显示崩溃以及虚拟机提示锁定文件失败,解决办法删除.vmx.lck磁盘锁文件即可;

0x02 虚拟机文件格式详解

(1) 开放虚拟化格式

描述:通过上面的名称解释我们知道OVF与OVA是开放虚拟化格式,下面我们对其详细解释

1.1 OVF

描述:OVF 是由分布式管理任务组 (DMTF) 指定的开放标准,用于打包和分发由一个或多个虚拟机 (VM) 组成的虚拟设备。
其文件扩展名为.ovf采用XML形式存储并描述了虚拟机的元数据和文件元素、以及对于 OVF 包中应用程序的部署和操作至关重要的其他信息。

OVF包中的内容:
|文件类型|说明
|—|—|
描述符 | 描述符用于指定服务对虚拟硬件的要求,并且还包括其他信息,例如虚拟磁盘的说明、服务本身、来宾操作系统、许可协议 (EULA)、在设备中启动和停止 VM 的说明以及服务安装说明。描述符文件的扩展名为.ovf |
清单|清单文件是软件包中每个文件的 SHA-1 / SHA-256摘要,可以用来检测任何损坏,以验证软件包的内容。清单文件的扩展名为 .mf 。|
签名|签名是用软件包所含 X.509 证书中的公钥进行签名的清单文件摘要,用于对软件包作者进行验证。签名文件的扩展名为 .cert 。|
虚拟磁盘|OVF 不指定磁盘映像格式,OVF 包中包含组成虚拟磁盘的文件(格式由导出虚拟磁盘所用的虚拟化产品定义)。XenServer 生成的 OVF 包具有动态 VHD 格式的磁盘映像;VMware 产品和 Virtual Box 生成的 OVF 包具有流技术优化 VMDK 格式的虚拟磁盘|

.ovf说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?xml version='1.0' encoding='UTF-8'?>
<Envelope xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData">
<!-- 文件源说明 -->
<References>
<File ovf:id="file1" ovf:href="CentOS7-194-1.vmdk"/>
</References>

<!-- 绑定的虚拟磁盘 -->
<DiskSection>
<Info>List of the virtual disks</Info>
<Disk ovf:capacityAllocationUnits="byte" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:diskId="vmdisk1" ovf:capacity="53687091200" ovf:fileRef="file1"/>
</DiskSection>

<!-- 绑定的虚拟网络 -->
<NetworkSection>
<Info>The list of logical networks</Info>
<Network ovf:name="VM Network">
<Description>The VM Network network</Description>
</Network>
</NetworkSection>

<!-- 虚拟系统说明 -->
<VirtualSystem ovf:id="CentOS7-194">
<Info>A Virtual system</Info>
<Name>CentOS7-194</Name>

<!-- 操作系统说明 -->
<OperatingSystemSection ovf:id="80" ovf:version="7" vmw:osType="rhel7_64Guest">
<Info>The operating system installed</Info>
<Description>Red Hat Enterprise Linux 7 (64 位)</Description>
</OperatingSystemSection>

<!--
虚拟硬件部分
- CPU
- Memory
- 磁盘控制器
- 虚拟磁盘
- 网卡信息
- 视频卡信息
-->
<VirtualHardwareSection>
<Info>Virtual hardware requirements</Info>
<System>
<vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
<vssd:InstanceID>0</vssd:InstanceID>
<vssd:VirtualSystemType>vmx-11</vssd:VirtualSystemType>
</System>
<Item>
<rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
<rasd:Description>Number of Virtual CPUs</rasd:Description>
<rasd:ElementName>2 virtual CPU(s)</rasd:ElementName>
<rasd:InstanceID>1</rasd:InstanceID>
<rasd:ResourceType>3</rasd:ResourceType>
<rasd:VirtualQuantity>2</rasd:VirtualQuantity>
<vmw:CoresPerSocket ovf:required="false">1</vmw:CoresPerSocket>
</Item>
<Item>
<rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
<rasd:Description>Memory Size</rasd:Description>
<rasd:ElementName>2048MB of memory</rasd:ElementName>
<rasd:InstanceID>2</rasd:InstanceID>
<rasd:ResourceType>4</rasd:ResourceType>
<rasd:VirtualQuantity>2048</rasd:VirtualQuantity>
</Item>
<Item>
<rasd:Address>0</rasd:Address>
<rasd:Description>SCSI Controller</rasd:Description>
<rasd:ElementName>SCSI Controller 1</rasd:ElementName>
<rasd:InstanceID>3</rasd:InstanceID>
<rasd:ResourceSubType>VirtualSCSI</rasd:ResourceSubType>
<rasd:ResourceType>6</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="slotInfo.pciSlotNumber" vmw:value="160"/>
</Item>
<Item>
<rasd:Address>0</rasd:Address>
<rasd:Description>SATA Controller</rasd:Description>
<rasd:ElementName>SATA Controller 1</rasd:ElementName>
<rasd:InstanceID>4</rasd:InstanceID>
<rasd:ResourceSubType>vmware.sata.ahci</rasd:ResourceSubType>
<rasd:ResourceType>20</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="slotInfo.pciSlotNumber" vmw:value="33"/>
</Item>
<Item>
<rasd:AddressOnParent>0</rasd:AddressOnParent>
<rasd:ElementName>Hard Disk 1</rasd:ElementName>
<rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource>
<rasd:InstanceID>5</rasd:InstanceID>
<rasd:Parent>3</rasd:Parent>
<rasd:ResourceType>17</rasd:ResourceType>
</Item>

<Item>
<rasd:AddressOnParent>0</rasd:AddressOnParent>
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
<rasd:Connection>VM Network</rasd:Connection>
<rasd:ElementName>Network adapter 1</rasd:ElementName>
<rasd:InstanceID>7</rasd:InstanceID>
<rasd:ResourceSubType>VmxNet3</rasd:ResourceSubType>
<rasd:ResourceType>10</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="connectable.allowGuestControl" vmw:value="true"/>
<vmw:Config ovf:required="false" vmw:key="slotInfo.pciSlotNumber" vmw:value="192"/>
<vmw:Config ovf:required="false" vmw:key="wakeOnLanEnabled" vmw:value="true"/>
</Item>

<Item ovf:required="false">
<rasd:ElementName>Video card</rasd:ElementName>
<rasd:InstanceID>8</rasd:InstanceID>
<rasd:ResourceType>24</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="useAutoDetect" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="use3dRenderer" vmw:value="automatic"/>
<vmw:Config ovf:required="false" vmw:key="graphicsMemorySizeInKB" vmw:value="262144"/>
<vmw:Config ovf:required="false" vmw:key="enable3DSupport" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="numDisplays" vmw:value="1"/>
<vmw:Config ovf:required="false" vmw:key="videoRamSizeInKB" vmw:value="8192"/>
</Item>
<vmw:Config ovf:required="false" vmw:key="cpuHotAddEnabled" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="nestedHVEnabled" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="virtualSMCPresent" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="cpuHotRemoveEnabled" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="memoryHotAddEnabled" vmw:value="false"/>
<vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="bios"/>
<vmw:Config ovf:required="false" vmw:key="virtualICH7MPresent" vmw:value="false"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="nvram" vmw:value="CentOS7-194.nvram"/>
<vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/>
</VirtualHardwareSection>
</VirtualSystem>
</Envelope>

.mf说明

  • 1) 从EXSI 7.X 导出的ovf格式中的清单是采用SHA-1摘要;
    1
    2
    SHA1(MsSQL-Server2019.nvram)= f3a081df0bc1d49e97d967335381ee47b390b644
    SHA1(MsSQL-Server2019-1.vmdk)= f8bfb4534e94b48db591624890b0ec795dc793be
  • 2) 从VCenter中导出的ovf格式中的清单是采用SHA-256摘要;
    1
    2
    3
    SHA256(CentOS7-194.ovf)= 4525a25050315a21866e4d87f9c6d4ae7f65b41a83134391138f74dd0e363bc4
    SHA256(CentOS7-194-1.vmdk)= f250cfa7d18e0e4c690515a2450f39b95be5d8bdaccc870b7c7186b4e678a61f
    SHA256(CentOS7-194-2.iso)= 659691c28a0e672558b003d223f83938f254b39875ee7559d1a4a14c79173193

注意事项:

  • 0.导入OVF模块需要将.ovf / .mf / .vmdk等文件一起导入;
  • 1.当我们对ovf文件进行更改后需要在.mf清单中重新生成文件的 SHA-256 或者 SHA-1摘要;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Windows 
    # Certuntil | 哈希算法: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512
    $certutil -HashFile CentOS7-194.ovf SHA256
    SHA256 的 CentOS7-194.ovf 哈希:
    4525a25050315a21866e4d87f9c6d4ae7f65b41a83134391138f74dd0e363bc4
    CertUtil: -hashfile 命令成功完成。

    # Linux
    $sha256sum /opt/application/CentOS7-194.ovf
    4525a25050315a21866e4d87f9c6d4ae7f65b41a83134391138f74dd0e363bc4 /opt/application/CentOS7-194.ovf
  • 2.使用 OVF 作为打包方法时不能保证软件包中所包含的虚拟机能够跨虚拟机管理程序实现兼容。在一个虚拟机管理程序上创建的 OVF 包可能无法自动在其他虚拟机管理程序上工作,出现这种情况的原因有多种,其中包括:不同虚拟机管理程序对于 OVF 规范、来宾操作系统设备、驱动程序及实施有不同的解释。
  • 3.当导出OVF的时候未将CD/DVD 驱动器勾选掉,它会将系统原始的安装镜像进行一起导出,此时候您可以编辑OVF文件去掉cd-dvd与iso相关的元素如下所示;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <References>
    ...
    <File ovf:id="file2" ovf:href="CentOS7-194-2.iso" ovf:size="1085276160"/>
    </References>

    <Item>
    <rasd:AddressOnParent>0</rasd:AddressOnParent>
    <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
    <rasd:ElementName>CD/DVD Drive 1</rasd:ElementName>
    <rasd:HostResource>ovf:/file/file2</rasd:HostResource>
    <rasd:InstanceID>6</rasd:InstanceID>
    <rasd:Parent>4</rasd:Parent>
    <rasd:ResourceSubType>vmware.cdrom.iso</rasd:ResourceSubType>
    <rasd:ResourceType>15</rasd:ResourceType>
    </Item>


1.2 OVA

描述:开放式虚拟设备 (OVA) 是一个 OVF 包,采用单个文件存档形式,其文件扩展名为 .ova 。
它是一个磁带存档 (tar) 格式的单个存档文件,包含组成 OVF 包的文件。

参考地址:


0x0n F&Q

Q:OVF与OVA我们应使用哪种格式?
A:OVF 包包含一系列未压缩的文件,对于需要访问文件中各个磁盘映像的用户而言较为方便,而 OVA 包只是一个大型文件尽管您可以压缩此文件但它(不如 OVF)那样灵活。OVA 更适用于适合只使用一个文件的特定应用场合(例如创建用于 Web 下载的软件包)更易于处理,但是与 OVF 相比导出和导入 OVA 包所需的时间更长