VMware 虚拟化编程(12) — VixDiskLib Sample 程序使用

简介: 目录目录前文列表vixDiskLibSample安装 Sample 程序Sample 程序使用方法前文列表VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编程(2...

目录

前文列表

VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析
VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解
VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析
VMware 虚拟化编程(4) — VDDK 安装
VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一
VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二
VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三
VMware 虚拟化编程(8) — 多线程中的 VixDiskLib
VMware 虚拟化编程(9) — VMware 虚拟机的快照
VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT
VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案

vixDiskLibSample

在介绍 VDDK 时也提到过,VDDK 实际上是一系列的 C/C++ lib 库及其相关的 Docs 和 Sample 的开发工具集合。本篇主要记录 VDDK 提供的 Sample 程序的使用方法,它对于刚刚接触 VDDK 的开发者而言是非常有用的。

这些 Sample 程序代码是使用 C++ 编写的,要成功编译 Sample 程序,必须确保加载了正确的动态链接库和共享对象。在 Linux 系统,VixDiskLib 与动态链接库或者共享对象是组织在一起的,这样简化了第三方以及开源组件的打包发行。如果你按照《VMware 虚拟化编程(4) — VDDK 安装》中提供的方式进行安装,那么应该可以编译成功。当然了,每个人的环境不一样,你也可能需要进行调整。

官方给出了下列保证正确加载动态链接库的建议:

  • Linux 默认的安装路径为 /usr/share/doc/vmware-vix-disklib/sample
  • 在 VDDK 程序中设置路径
  • 将 VDDK lib 库的路径加入到环境变量

NOTE:需要注意的是,VDDK 使用相对路径来加载动态链接库文件,而非绝对路径,应该要注意避免不同版本动态链接库的冲突。

安装 Sample 程序

在安装好 VDDK 之后,直接编译 Sample 程序

[root@mickeyfan-dev diskLib]# cd /usr/lib/vmware-vix-disklib/doc/samples/diskLib
[root@mickeyfan-dev diskLib]# ls
Makefile  vixDiskLibSample.cpp
[root@mickeyfan-dev disklib]# make
[root@mickeyfan-dev diskLib]# ls
Makefile  vix-disklib-sample  vixDiskLibSample.cpp

NOTE 1:官方建议的 Sample 安装路径为 /usr/share/doc/vmware-vix-disklib/samples/disklib

NOTE 2:某些特定的 Linux 还需要在 vixDiskLibSample.cpp 的 15 行后添加两行 include

15 #else
16 #include <stdio.h>
17 #include <string.h>

NOTE 3:如果编译失败建议进行以下尝试

  • /usr/lib/vmware-vix-disklib/lib64 添加到 /etc/ld.so.conf.d/vmware-vix-disklib.conf 文件中,然后使用 root 权限运行 ldconfig 指令
  • 添加或编辑环境变量 LD_LIBRARY_PATH=/usr/lib/vmware-vix-disklib/lib64

Sample 程序使用方法

使用方法vixdisklibsample command [options] diskPath

指令
- -create:创建由 -cap 选项指定容量大小的稀疏类型虚拟磁盘「diskPath」
- -redo parentPath:为父虚拟磁盘「parentPath」创建一个子(重写日志)虚拟磁盘「diskPath」
- -info:显示指定虚拟磁盘「diskPath」的信息
- -dump:以十六进制的方式显示指定范围内的扇区内容
- -fill:使用 -val 选项指定的值来填充指定范围内的虚拟磁盘扇区
- -wmeta key value:将键值对(key, value)写入指定虚拟磁盘「diskPath」的元数据表中
- - rmeta key:显示元数据表中指定 key 对应的 value
- -meta:显示虚拟磁盘元数据表中所有的项
- -clone sourcePath:将源 VMDK 克隆到指定的远程站点
- -readbench blocksize:使用指定的 I/O blocksize (以扇区为单位),在虚拟磁盘上读取标签。
- -writebench blocksize:使用指定的 I/O blocksize (以扇区为单位),在虚拟磁盘上写入标签。警告:这可能会覆盖磁盘上原有的数据

选项
- -adapter [ide|scsi]:在「-create」指令时,指定总线 bus 的类型,默认为 scsi 类型
- -start n:在「dump | fill」指令时,指定开始扇区,默认为 0
- -count n:在「dump | fill」指令时,指定扇区数量,默认为 1
- -val byte:在「fill」指令时,指定用于填充的字节,默认为 255
- -cap megabytes:在「-create」指令时,指定容量的大小(MB),默认为 100
- -single:打开虚拟机的单个磁盘链接而非全部磁盘链接(不指定该选项默认打开全部磁盘链接),仅支持本地磁盘,不支持远程托管磁盘。
- -multithread n:开启 n 个线程,并将指定文件拷贝到 n 个新文件中
- -host hostname:VC/vSphere 的 hostname/IP (强制项)
- -user userid:host 的 username (强制项)
- -password password:host 的 password (强制项)
- -port port:用于连接 VC/ESXi host 的端口,默认是 443
- nfchostport port:使用 NFC 连接到 ESXi host 的端口,默认 902
- -vm moref=id:虚拟机的托管对应引用
- -libdir dir:VDDK lib 库的安装路径
- -initex configfile:配置文件的路径或文件名
- -ssmoref moref:虚拟机快照的托管对象引用
- -mode mode:传递给 VixDiskLib_ConnectEx 函数的传输模式字符串,有效的模式为:nbd, nbdssl, san, hotadd
- -thumb stirng:SSL 指纹验证字符串,格式为:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

NOTE 1:要连接到 ESXi Host,则必须指定 -host,-user,-password 等强制选项,并提供 Datastore 中的 diskPath。EXAMPLE:

./vix-disklib-sample –host <esxi_ip> –user <esxi_username> –password <esxi_password> "[<datastore_name>] <vm_name>/<vm_vdisk_name>.vmdk"

NOTE 2:如果要连接到 vCenter Server,还需要指定 -libdir 和 -vm 选项,DiskLibPlugin 需要通过这两个选项来连接到 vCenter Server 并定位到指定 VM。EXAMPLE:

./vix-disklib-sample –host <vc_ip> –user <vc_username> –password <vc_password> –libdir <pluginDir> -vm <vm_mor> "[<datastore_name>] <vm_name>/<vm_vdisk_name>.vmdk"

NOTE 3:如果希望使用高级传输进行连接,就必须指定 -mode 和 -ssmoref 选项。这两个选择的值会被传递到 VixDiskLib_ConnectEx。注意,虚拟机的快照必须存在,因为打开正在运行的虚拟机的 bask disk 是非常危险的。EXAMPLE:

./vix-disklib-sample –host <vc_ip> –user <vc_username> –password <vc_password> –libdir <pluginDir> -vm <vm_mof> -mode san -ssmoref <snap_mor> "[<datastore_name>] <vm_name>/<vm_vdisk_name>.vmdk"

NOTE 4:VixDiskLib_Create 不支持直接创建远程的托管磁盘,而是首先需要在创建一个本地磁盘,然后使用 VixDiskLib_Clone 将本地磁盘克隆并转换为托管磁盘。EXAPMLE:

./vix-disklib-sample -create -cap 1024 virtdisk.vmdk
./vix-disklib-sample -clone virtdisk.vmdk –host <vc_ip> –user <vc_username> –password <vc_password> vmfsdisk.vmdk
相关文章
|
2月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
66 5
|
22天前
|
存储 SQL 数据挖掘
虚拟化数据恢复—VMware虚拟机vmdk文件被误删除的数据恢复案例
虚拟化数据恢复环境: 某品牌服务器(部署VMware EXSI虚拟机)+同品牌存储(存放虚拟机文件)。 虚拟化故障: 意外断电导致服务器上某台虚拟机无法正常启动。查看虚拟机配置文件发现这台故障虚拟机除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还在。管理员联系VMware工程师寻求帮助。VMware工程师尝试新建一个虚拟机来解决故障,但发现ESXi存储空间不足。于是将故障虚拟机下的xxx-flat.vmdk磁盘文件删除,然后重建一个虚拟机并且分配固定大小的虚拟磁盘。
|
2月前
|
存储 安全 Linux
在Linux中,如何使用VMware和VirtualBox进行虚拟化?
在Linux中,如何使用VMware和VirtualBox进行虚拟化?
|
4月前
|
存储 IDE 开发工具
【读书笔记】 玩转虚拟机基于Vmware+Windows 虚拟化技术
【读书笔记】 玩转虚拟机基于Vmware+Windows 虚拟化技术
|
4月前
|
Linux 网络安全 虚拟化
Linux操作系统第一章(Linux操作系统的带入,vmware-17虚拟化软件运用,FinalShell远程连接Linux )
Linux操作系统第一章(Linux操作系统的带入,vmware-17虚拟化软件运用,FinalShell远程连接Linux )
|
5月前
|
程序员 Linux KVM
【qemu虚拟化】将img镜像文件转换为VMware虚拟机
QEMU是一个开源的硬件虚拟化器,能在多种平台如x86、ARM、PowerPC上运行,支持虚拟化不同体系结构的操作系统。它具有硬件仿真、虚拟化支持、磁盘和网络仿真、快照回滚及可扩展性等特点。要使用QEMU,首先从[官网](https://www.qemu.org/download/)下载,然后通过命令行运行进行转换。转换后的vMDK文件可在VMware中导入,创建新的虚拟机进行使用。
1667 1
【qemu虚拟化】将img镜像文件转换为VMware虚拟机
|
2月前
|
存储 Linux 调度
OpenStack如何支持虚拟化技术?
【8月更文挑战第21天】
116 0
|
3天前
|
存储 分布式计算 分布式数据库
云计算和虚拟化技术
云计算是指把计算资源、存储资源、网络资源、应用软件等集合起来,采用虚拟化技术,将这些资源池化,组成资源共享池,共享池即是“云”。
108 64
|
1月前
|
KVM 虚拟化
虚拟化技术概述及KVM环境安装
关于虚拟化技术概述及KVM环境安装的教程,涵盖了虚拟化的定义、分类、管理工具,以及KVM的系统需求、安装步骤和使用指南。
57 11
虚拟化技术概述及KVM环境安装
|
2月前
|
存储 运维 虚拟化
Docker技术概论(1):Docker与虚拟化技术比较
Docker技术概论(1):Docker与虚拟化技术比较
90 17
Docker技术概论(1):Docker与虚拟化技术比较
下一篇
无影云桌面