[TOC]
0x00 简述
描述:本章记录了在学习与实践VMware下进行基础知识的记录,方便理解以及优化配置VMware虚拟化环境;
0x01 基础知识
虚拟机文件格式介绍:
.vmdk
: VMware虚拟磁盘文件,即虚拟机存放文件的虚拟机磁盘,我们可以采用虚拟机映射或者diskgenius磁盘管理软件
进行打开;
WeiyiGeek.
.vmx
: VMware虚拟机配置,通过打开设置虚拟机文件以启动系统并且可以进行自定义配置修改(用文本文档的方式将其打开)。
#躲避游戏检测时
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虚拟磁盘文件之间的区别? 共同点: 支持动态存储分配
代码语言:javascript复制VDI 是virtual box 的原生格式。
VMDK 是VMware开发的在Sun xVM, QEMU, VirtualBox, SUSE Studio, .NET DiscUtils 也支持,它还能把存储文件拆分成小于2GB,在你的文件系统的文件大小限制比较小的时候有用。
VHD 是Microsoft Virtual PC的原生格式,在微软产品比较流行,可以在虚拟机中使用。
2.vdi格式装换
代码语言:javascript复制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虚拟文件生成
代码语言:javascript复制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说明
代码语言:javascript复制<?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) 从ESXI 7.X 导出的ovf格式中的清单是采用SHA-1摘要;
代码语言:javascript复制SHA1(MsSQL-Server2019.nvram)= f3a081df0bc1d49e97d967335381ee47b390b644
SHA1(MsSQL-Server2019-1.vmdk)= f8bfb4534e94b48db591624890b0ec795dc793be
2) 从VCenter中导出的ovf格式中的清单是采用SHA-256摘要;
代码语言:javascript复制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
摘要;
# 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相关的元素如下所示;
<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 包的文件。
参考地址:
- 1.https://docs.citrix.com/zh-cn/xencenter/7-1/vms-exportimport-ovf.html
0x0n F&Q
Q:OVF与OVA我们应使用哪种格式?
A:OVF 包包含一系列未压缩的文件,对于需要访问文件中各个磁盘映像的用户而言较为方便,而 OVA 包只是一个大型文件尽管您可以压缩
此文件但它(不如 OVF)那样灵活
。OVA 更适用于适合只使用一个文件的特定应用场合(例如创建用于 Web 下载的软件包)更易于处理,但是与 OVF 相比导出和导入 OVA 包所需的时间更长
。