将 ova/qcow2 导入到 PVE 虚拟机

九月 03, 2024 更新: 九月 06, 2024 [Linux 与系统] #Linux #obsidian #合集 #存储与文件系统 #密码学 #虚拟化

OVF 与 OVA 区别与转换

使用场景

OVF 包包含一系列未压缩的文件,对于需要访问文件中各个磁盘映像的用户而言较为方便,而 OVA 包只是一个大型文件。尽管您可以压缩此文件,但它不像一系列文件(如 OVF)那样灵活。

OVA 更适用于适合只使用一个文件的特定应用场合(例如创建用于 Web 下载的软件包),这种情况下软件包更易于处理。与 OVF 相比,导出和导入 OVA 包所需的时间更长。

转换

OVA 转 OVF 很简单,使用 tar 解包就行

比如任意解包一个 OVA 文件后会出来 ovf vmdk mf 这三个文件,而且解包出来的顺序也是和 OVA 标准定义的那样,第一个必须未 .ovf 文件。这里我讲的是解包而不是解压,是因为 OVA 和 OVF 里包含的文件,最大的就是磁盘文件,而磁盘文件在导出的时候虚拟机已经进行了压缩,你可以使用 df 命令看看磁盘占用的空间,以及导出的磁盘占用的空间,你就会发现导出的磁盘文件大小远小于系统占用的空间。

tar -xvf Ubuntu1804.ova

Ubuntu1804.ovf

Ubuntu1804-disk1.vmdk

Ubuntu1804.mf

OVF 转 OVA

按照 OVA 标准的格式,按顺序打包 OVF 包里的文件就行,注意 .ovf 文件一定要在第一个

tar -cf OP.ova Ubuntu1804.ovf Ubuntu1804-disk1.vmdk Ubuntu1804.mf

ESXi虚拟机导出为OVF模板

主要是为了备份整个虚拟机,通过ESXI图形界面上的导出ovf功能发现不太靠谱,有时能用,有时不能用,能用的时候有时也不太正常;Web Client导出。之前的版本不知道能不能正常导出,ESXI7导出下载会自动中断,只能换下一个方法。

第一步:去vmware官网下载ovf tool工具

最新版本:VMware-ovftool-4.4.1-16812187-win.x86_64

软件下载地址:https://www.aliyundrive.com/s/hYn6SBWtRvp

下载下来之后,一路默认安装,记得把安装路径给记住,一会要用。

第二步:使用ovf tool 工具

通过命令行打开ovf tool的安装路径,然后明确ESXI 主机的IP地址,我这里的环境是192.168.1.254,然后再明确一下VM(就是你将要导出的虚拟机的名字),我这里环境是Debian11,我想要备份到D盘,最后一步就是进行备份了:

  1. cd C:\Program Files\VMware\VMware OVF Tool
  2. ovftool vi://root:@192.168.1.254/Debian11 D:\Debian11.ova

输入ESXI 的root密码就会开始运行了,慢慢等待完成。

也可以带密码输入直接导出ova文件

  1. ovftool vi://root:password@192.168.1.254/Debian11 D:\Debian11.ova

注意:

1.vm虚拟机要关闭电源

2.ESXI 不要打开维护模式,如果打开维护模式也不能通过ovf tool 进行操作的,会报错

3.其实导出成ovf的大小是虚拟机实际的大小,而不是其逻辑大小,这一点需要注意。

格式介绍

随着虚拟化技术的不断成熟,越来越多的厂商加入到了虚拟化产品的大军,各大厂商基于自己的利益诉求,一般都会推出自己定义的虚拟机的格式,使得客户如果使用多厂商的产品时想要在各大厂商虚拟化平台进行无缝切换会比较头疼,此时就需要通用的虚拟机格式来完成这个事情。对于熟悉VMware的人来说,导入和导出虚拟机的时候,会有两种格式可选,分别是OVF和OVA,下面我们就简单的介绍一下什么是OVF和OVA,且这两者有什么联系和区别。

什么是OVF文件

开源虚拟化格式OVF(Open Virtualization Format)文件是一种开源的文件规范,它描述了一个开源、安全、有效、可拓展的便携式虚拟打包以及软件分布格式,它一般有几个部分组成,分别是ovf文件、mf文件、cert文件、vmdk文件和iso文件。

OVF文件工作原理以及各组件的作用

简单来说,OVF文件可以抽象看做一个由规定的几个不同类型的文件所组成的文件包,这个文件包可作为以后不同虚拟机之间一个标准可靠的虚拟文件格式,实现不同虚拟机之间的通用性。每个类型的文件都有各自的作用,相辅相成。

下面我们逐一做个介绍:

1、ovf 文件

a.简介

ovf文件在OVF文件格式中起到了举足轻重的作用,他的存在是保证了镜像文件vmdk,资源文件iso与虚拟机domain配置之间的正确对应,作用就如同vmware中的vmx文件、以及Xen、kvm中的xml 配置文件。

b.内容详细分析

以一个ovftool生成的ovf为例通过对内容的研究可知。

前两行是对ovf文件的一些基本信息作简要说明主要内容包括了xml的版本,编码规范以及创建文件时的一些基本信息:

在基本信息之后,会有一个Envelope类型的说明,主要是规定了OVF文件所用规范的一些基本定义位置以及基本变量内容的声明。比如这里xmlns:vmw内容就是对应后面的vmw:

一般来说,以上的内容只跟我们所用ovf格式的具体版本和提供商有关,在版本相同的情况下(也就是使用工具相同的情况下)以上内容并不会有什么区别。真正控制ovf文件工作的内容是后面部分,它和具体虚机配置紧密相关,在vmware中主要是靠vmx文件进行转换。

主要内容包括:

(1)、References类型

以上两句声明了两个镜像分别对应OVF文件包中的vmdk镜像文件以及iso资源文件并用file1,file2予以区别。

(2)、DiskSection类型

在声明了vmdk文件为file1之后通过对DiskSection的配置,确定让vmdk作为虚机的硬盘镜像。

(3)、网络配置模块NetworkSection

(4)、与虚机机内容相关的配置模块

上述文档信息主要是对各种vmx中的信息进行归类,比如说VirtualSystem声明了hypervisor环境为vmware,同时声明的还有虚拟机的domain,系统环境、各种CPU配置等。

2、mf文件

a.简介

mf文件主要是一些文件SHA的集合,他主要起到的作用是防止镜像文件被非法用户篡改,通过对实例的比对我们可以得出,mf文件中各个文件的SHA值是对该文件的整个文件内容进行的内容摘要。

b.实例内容如下:

3、Cert文件

从对mf文件的分析我们知道了,mf文件主要作用是为了验证各种虚机相关配置是否被恶意篡改,但是如何保证mf文件本身的合法性呢?于是我们需要.Cert文件来加以补充。Cert文件主要分为2个部分,一部分是mf文件的摘要,而另一部分是合法证书的证书内容。通过证书的验证来实现验证mf文件合法性的验证,进一步证明整个OVF文件包的合法性。Cert证书的生成主要依赖PKI,可以通过openssl来实现。

4、vmdk文件和iso文件

这两种文件属于同一类,在OVF中都是资源类,主要就是具体的镜像资源。不同的区别是vmdk文件内容主要是用户操作系统OS的内容,而iso是光驱一类的内容。

虚拟机包 OVF和OVA的区别

OVF(Open Virtualization Format:开放虚拟化格式 )和OVA(Open Virtualization Appliance:开放虚拟化设备),两者包含所有用于部署虚拟机的必要信息。这两种包封装格式都是由DMTF(Distributed Management Task Force)所定义的。

两者之间的主要区别是在包的描述和封装。OVF包构造了必要的几个文件(具体见上描述),所有这些在定义和部署的虚拟机必须用到的。相比之下,OVA包是一个单一的文件,所有必要的信息都封装在里面。

OVF文件使用.ovf文件扩展名,同时一个OVF描述符,一个XML文件,用来描述打包的虚拟机。OVF还包含元数据和一个或更多的磁盘映像。或者,它也可能包含证书和其他附文件。

而OVA文件则采用.tar文件扩展名,包含了一个OVF 包中所有文件类型。这样OVA单一的文件格式使得它非常便携。

可以说OVA就是OVF的一种压缩模式,即将OVF的一组文件压缩为单一的文件

使用qemu-nbd挂载qcow2

问题 使用kvm构建虚拟机系统时,会遇到操作qcow2或raw块设备文件的需求。之前我一直是将其挂载到一个现成的linux系统虚拟机上进行操作,有没有直接在宿主机上操作的方法呢?

方法 最近发现qemu提供了一个很有用的工具qemu-nbd,可以将包括qcow2格式及raw格式的文件进行直接挂载。

下面进行一下演示,创建一个1GB的qcow2文件,挂载到块设备,分区并格式化。

首先创建一个空磁盘文件

qemu-img create -f qcow2 test-sda-1G.qcow2 1G

接下来加载nbd的内核扩展

modprobe nbd max_part=8

此时可以观察到,/dev/下生成了十几个nbd开头的设备,这些都是可以用于挂载块设备文件的挂载点。

我们将刚刚生成的test-sda-1G.qcow2挂载到nbd0上

qemu-nbd --connect=/dev/nbd0 test-sda-1G.qcow2

此时qcow2文件已经成为了一个标准的块设备/dev/nbd0,可以通过fdisk -l /dev/nbd0来列出其信息

我们使用fdisk对/dev/nbd0进行分区操作,创建两个分区并保存,结果如下

fdisk -l /dev/nbd0

Disk /dev/nbd0: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8ff00943

Device      Boot  Start     End Sectors  Size Id Type
/dev/nbd0p1 *      2048  411647  409600  200M 83 Linux
/dev/nbd0p2      411648 2097151 1685504  823M 83 Linux

接下来我们可以对分区进行格式化操作

mkfs.ext2 /dev/nbd0p1
mkfs.ext4 /dev/nbd0p2

此时文件系统创建完成,已经可以进行挂载了

此时可以挂载并进行操作,完成后我们可以断开设备连接

qemu-nbd -d /dev/nbd0

此时qcow2文件脱离nbd0块设备,已经就绪可以用于虚拟机内使用了