PyVMomi 克隆虚拟机时将磁盘改为Thin模式

需求介绍:

   之前已经使用pyvmomi库实现了虚拟机的自动备份,不过由于备份的虚拟机都是较为重要的系统,磁盘都是厚置备模式,终于有一天,备份目标的空间不够了,导致几个虚拟机无法备份。在不想增加磁盘的情况下,想着能不能把磁盘的厚置备模式改成thin精简模式,是不是就可以节省空间了呢?

过程介绍:

    pyvmomi的示例程序比较简单,这个看起来不是很高级的需求竟然没有,看了下手动操作克隆时是可以修改的,就想着肯定是可以实现的。

   从网上包括问了ChatGPT4.0 和文心都不太好使,折腾了一天,都有些气馁了。还是去翻官网文档,说实话有些费劲,vsphere的功能确实强,但文档也确实复杂,至少pyvmomi的是这样。

  总结下:

虚拟机克隆时的参数很简单,主要配置参数都在CloenSpec这个对象中指定,包括目标主机、存储、资源池等。在这个对象中,主要有RelocateSpec 和 configSpec两个对象,在这两个对象中都有deviceChange这个子对象,是网上找到的资料主要修改的目标。

1. 首先,官网说clonespec 的config 已经不用了。改用location下的deviechange。

2. RelocateSpec中的devicechange说明只有极少数配置可以改,其他的都会被忽略。网上的大部分文章都是修改这个devicechange的,所以都没有效果。

3. 上图中RelocateSpec中的disk 表明可以指定磁盘参数的。进去看下:

RelocateSpec的disk参数是一个vim.vm.RelocateSpec.DiskLocator的列表,而DiskLocator对象包含有diskID、diskBackingINfo等信息,diskbakcingInfo对象中的VirtualDiskFlatVer2BackingInfo中有thinProvisioned参数来指定磁盘格式。 感觉就像是俄罗斯套娃,一个对象包含着另外的对象,一层层的,你不知道需要的参数在那一层的口袋里。

4. 这里还遇到一个难题,就是DiskLocator对象中的diskId参数怎么指定? 问了ChatGPT4.0 和文心一言,给出的例子是将设备出现的顺序当成diskId,系统一直报错说diskId指定不对。

还是ChatGPT4 好一些:

直接提示了diskId是virtualdisk设备的key属性,不是排序和索引。

把事情搞清楚了,问题就简单了:

1.  通过源VM的设备信息获取到有多少个磁盘,并获取对应的key值作为diskLocator的diskId参数。

   for device in source_vm_inst.config.hardware.device:

         if isinstance(device, vim.vm.device.VirtualDisk):

               diskId = device.key

2. 对每个磁盘,组装一个diskLocator对象:

    disk_locator = vim.vm.RelocateSpec.DiskLocator()

    disk_locator.datastore= datestore  #这个也是必选参数,就是目标VM的存储对象

    disk_locator.diskId = device.key

    disk_locator.diskBackingInfo = vim.vm.device.VirtualDisk.FlatVer2BackingInfo()

    disk_locator.diskBackingInfo.thinProvisioned = True

    disk_change.append(disk_locator)

3. 定义cloneSpec和relocateSPec对象,将参数注入进去

    clone_spec = vim.vm.CloneSpec()

    relocate_spec = vim.vm.RelocateSpec()

    relocate_spec.disk = disk_change # 将磁盘的配置信息注入到relocatespec的disk参数中

    clone_spec.location = relocate_spec # 将relocatespec配置信息注入clonespec中。

4. 剩下的事情就是交给Clone Task去完成克隆任务,然后查看克隆后的虚拟机磁盘是否已经是精简模式。

最后: chatGPT 4.0 真的很强,可以看到给的代码大部分直接可用,下一个10年就是AI的时代,错过了互联网,错过了移动互联网,不要错过AI。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络

🌈个人主页: Aileen_0v0🔥系列专栏: 一见倾心,再见倾城 --- 计算机网络~💫个人格言:"没有罗马,那就自己创造罗马~" 目录 码元 速率和波特 思考1 思考2 思考3 带宽(Bandwidth) 📝总结 码元…

Linux+Docker+Gitee+Jenkins自动化部署.NET Core服务

目录 一、安装Jenkins 1、跟新yum包 2、查询镜像 3、拉取镜像 4、创建Jenkins工作目录,并将容器内目录挂载到此目录上 5、启动Jenkins容器 二、Jenkins配置 1、Jenkins安装gitee码云插件 2、创建私人令牌 3、Jenkins添加全局凭据 4、系统配置 三、构建任…

C++之程序生成

一、C的发展史 截止到2023年12月,C已经更新了很多版本,并在每个版本中修复了bug和添加了新的特性,ISO C委员会每三年会对C进行一次更新: C98:于1998年发布,是最早的国际标准化版本。它包含了面向对象编程…

Typescript中Omit数据类型的理解

在 TypeScript 中&#xff0c;Omit 是一个内置的工具类型&#xff0c;它用于从对象类型中排除指定的属性&#xff0c;并返回剩余的属性。 Omit 的语法如下所示&#xff1a; type Omit<T, K> Pick<T, Exclude<keyof T, K>>;其中&#xff0c;T 表示原始类型…

D3D12可编程渲染流水线

一、初始化D3D库 启用 DirectX数学库 x86需要启用SSE2指令集&#xff0c;所有平台均需将浮点模型设置为fast。默认为&#xff1a; 精度 (/fp:precise)。 #include <DirectXMath.h> #include <DirectXPackedVector.h> 启用调试模式下的内存泄漏检测 // Enabl…

CCF-CSP真题《202309-5 阻击》思路+ c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202309-5试题名称&#xff1a;阻击时间限制&#xff1a;2.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 上回提到&#xff0c;西西艾弗岛下方有一个庞大的遗…

【面试】广告优化

a1&#xff1a;点击率公式是什么&#xff1f;点击率低的原因是什么&#xff1f; 点击率点击/曝光&#xff0c;点击率低的原因主要有两点&#xff1a;一是创意不吸引人&#xff1b;二是目标受众不准确/定向过宽不精确&#xff0c;广告曝光给了对产品不感兴趣用户 a2&#xff1a;…

mysql学习记录

insert into table_nameA(字段名) select 字段名 from table_nameA&#xff08;按照一般的select语句格式进行&#xff09; 通过此语句&#xff0c;可以根据需要抓取数据组成新记录落表 存储过程&#xff1a; 创建&#xff1a; CREATE PROCEDURE pro_name&#xff08; IN o…

mysql !=索引为什么失效

可以先看这个&#xff1a;Mysql查询条件为大于时&#xff0c;不走索引失效场景-CSDN博客 如下建立了联合索引&#xff0c; 注意查询phone是用不对劲了索引&#xff0c;key_len82 改为 !时&#xff0c; key key_len没内容&#xff0c;说明没有走索引&#xff0c;为什么没有走&…

DOS 系统(命令行)

文章目录 DOS 系统DOS 常用命令DOS 高级命令DOS 批处理命令DOS 应用场景 DOS 系统 操作系统的发展史&#xff08;DOS/Windows篇&#xff09; DOS操作系统的历史 DOS&#xff08;Disk Operating System&#xff09; 是 磁盘操作系统 的缩写&#xff0c;是一种早期的个人计算机操…

HashMap构造函数解析与应用场景

目录 1. HashMap简介 2. HashMap的构造函数 2.1 默认构造函数 2.2 指定初始容量和加载因子的构造函数 3. 构造函数参数的影响 3.1 初始容量的选择 3.2 加载因子的选择 4. 构造函数的应用场景 4.1 默认构造函数的应用场景 4.2 指定初始容量和加载因子的构造函数的应用…

10天玩转Python第8天:python 文件和异常 全面详解与代码示例

今日内容 文件操作 普通文件的操作json 文件的操作[重点] 异常处理(程序代码运行时的报错) 文件介绍 计算机的 文件&#xff0c;就是存储在某种 长期储存设备 上的一段 数据 作用: 将数据长期保存下来&#xff0c;在需要的时候使用 ​ 1.计算机只认识 二进制(0 1) 2.文件中…

myBatis-plus自动填充插件

在 MyBatis-Plus 3.x 中&#xff0c;自动填充的插件方式发生了变化。现在推荐使用 MetaObjectHandler 接口的实现类来定义字段的填充逻辑。以下是使用 MyBatis-Plus 3.x 自动填充的基本步骤&#xff1a; 1.基本配置 1.1添加 Maven 依赖&#xff1a; 确保你的 Maven 依赖中使…

10天玩转Python第9天:python 面向对象 全面详解与代码示例

今日内容 异常 模块和包 导入模块(导包)if __name__ "__main__": Unitest 框架的学习 了解, 基本组成 异常 异常传递[了解] 异常传递是 Python 中已经实现好了,我们不需要操作, 我们知道异常会进行传递. ​ 异常传递: 在函数嵌套调用的过程中, 被调用的函数 ,发…

Grafana Loki 快速尝鲜

Grafana Loki 是一个支持水平扩展、高可用的聚合日志系统&#xff0c;跟其他的聚合日志系统不同&#xff0c;Loki只对日志的元数据-标签进行索引&#xff0c;日志数据会被压缩并存储在对象存储中&#xff0c;甚至可以存储在本地文件系统中&#xff0c;能够有效降低成本&#xf…

下午好~ 我的论文【遥感】(第一期)

写在前面&#xff1a;下午浑浑噩噩&#xff0c;泡杯茶&#xff0c;读篇论文吧 首先说明&#xff0c;时间有限没有那么精力一一回复了&#xff0c;对不起各位了TAT 文章目录 遥感Bi-Dilation-formerCNN-GNN-FusionMulti-hierarchical cross transformerCoupled CNNs 遥感 Bi-D…

电路中的屏蔽罩作用及设计

1.1 屏蔽罩作用 1.1.1 屏蔽电子信号,防止外界的干扰或内部向外的辐射&#xff1a; 一般见于通信类电路PCB&#xff0c;主要一个无线通信产品上有的敏感器件、模拟、数字电路、DCDC电源电路&#xff0c;都需屏蔽隔离&#xff0c;是为了不影响其它电路&#xff0c;也有防止其它电…

国际刑警组织推出新的生物识别系统

2023 年 11 月 29 日&#xff0c;国际刑警组织发布了一份有关创建生物识别工具的新闻稿&#xff0c;至少在意大利&#xff0c;该工具似乎已经陷入沉默&#xff0c;但让我们看看为什么我们会对这个东西感兴趣。 国际刑警组织的新闻稿用了整整一段时间来讨论与隐私相关的问题&am…

0x31 质数

0x31 质数 定义&#xff1a; 若一个正整数无法被除了1和它自身之外的任何自然数整除&#xff0c;则称该数为质数&#xff08;或素数&#xff09;&#xff0c;否则则称该正整数为合数。 在整个自然数集合中&#xff0c;质数的数量不多&#xff0c;分布比较稀疏&#xff0c;对…

动态规划——OJ题(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、第N个泰波那契数1、题目讲解2、思路讲解3、代码实现 二、三步问题1、题目讲解2、思路讲解…