VixDiskLibSample:正确测试虚拟磁盘

当我们面对某种必须与之交互的软件产品时,我们可以自由选择交互的场景。您可以英勇地重新发明轮子,或者希望作者比我们更了解他们的产品,因此他们提供的API(或一组库)是最佳解决方案。不幸的是,实际上,并非所有事情都如此乐观,但今天并非如此。



多年来,VMware提供了VDDK来与其磁盘子系统一起使用,这是一组庞大的库,文档和代码示例,您的应用程序可以使用它们来与虚拟机磁盘一起使用。当然,在Veeam,我们真的不喜欢重新发明不必要的自行车,因此VDDK在我们的产品中非常活跃。



但这仍然不会影响认为使用磁盘可以更快的客户机数量,并且所有建议的性能测试都会先验地显示错误的结果。正是在这样的时刻,最终的武器才对我们有所帮助-VixDiskLibSample。







VixDiskLibSample是VDDK中包含的一个小型C ++程序,它演示了使用vixDiskLib库的原理,也就是说,没有人会比它更好,更快地使用虚拟机磁盘。对于我们来说特别重要的是,它可以用作写作和阅读的基准。一种最后通test测试,其结果很难被认为是无效的。



您可以将它与VDDK一起使用。VMware网站下载它;对于Linux,只需在安装后进行编译



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


默认安装路径。

 

/usr/share/doc/vmware-vix-disklib/samples/disklib


在网络上也有信息,在某些发行版中,需要将以下行添加到vixDiskLibSample.cpp中才能成功编译:



#else
#include <stdio.h>
#include <string.h>


如果仍然在这种情况下,不进行编译,则建议尝试添加环境变量LD_LIBRARY_PATH = / usr / lib目录/ VMWare的VIX-disklib / lib64目录并运行ldconf添加地址后,为根/ usr / lib目录/ VMWare的VIX-disklib / lib64下/etc/ld.so.conf.d/vmware-vix-disklib.conf



但是,在Visual Studio中的Windows下,所有内容都可以毫无问题地进行编译。还有给女主人的注释:Veeam中的VDDK仅在通过Windows代理工作时使用。在Linux上,由于多种原因,它使用vSphere API使用自己的解决方案。  



您问Veeam用户如何?



我们回答:通过连接Veeam Backup&Replication随附的不同版本的VDDK库,您可以在多种模式下检查主机的真实工作速度。



库存储在C:\ Program Files(x86)\ Veeam \ Backup Transport \ x64 \ vddk_X_X中,必须使用它们才能获得正确的结果。



现在,让我们看看启动时对我们来说最重要的命令和选项。与所有测试工具一样,此处的完整列表非常非常小。



-readbench以指定的块大小运行读取基准。大小以扇区表示。 

 -writebench一切都一样,只不过是写作而已。重要:这是破坏性的操作!录音很公平!不要尝试启动生产机器!它将被二进制垃圾覆盖!

-multithread N自6.5版以来,可以并行使用以处理多个磁盘。

-host连接的主机。它可以采用DNS名称或IP的形式。

-user根据域\用户

方案使用的用户-password我认为很清楚 

-vm vmPath = / path /到/ vm这是如果我们知道我们的计算机所在的位置,但是我们不知道它的其他坐标

-vm“ moref = vm-XXX”的路径库存中的汽车。他是moref。找到它的最简单方法是通过以下位置的MOB:https://vcenter.local/mob/ 重要说明:如果您只有一个没有vCenter的寂寞主机,请使用moref = XXX,而不要使用vm

-ssmoref链接到您的计算机快照,因为您知道从磁盘读取数据是一回事,而当快照成为您的方式时则是另一回事。或几个快照。包括的计算机的必需参数(以及快照本身)。

-mode一个参数,指示使用磁盘的模式。引用VixDiskLib_ConnectEx。可用值为nbd,nbdssl,san和hotadd。所有这些都是我们的用户所熟知的。

-libdir库文件夹的路径。默认情况下,它应该是“ C:\ Program Files(x86)\ Veeam \ Backup Transport \ x86 \ vddk_X_X”。如果使用独立主机,则可以将其留空。

-拇指在版本6.0中引入了用于指定SSL证书指纹的必需参数。没有它是行不通的。最简单的方法是在浏览器上进行监视;)-

initex configfile VixDiskLib_InitEx的配置文件的路径



默认情况下,详细的日志会写入 

C:\ Users \当前用户\ AppData \ Local \ Temp \ vmware-current用户\ vixDiskLib-####文件夹。日志

为了让您的生活更轻松,我强烈建议您在以san和hotadd模式运行的每个测试之后清空此文件夹。并使用控制台关闭窗口(我的意思是Windows cmd,而不是Linux)。这是由于VDDKEndAccess函数的特殊性,如果通过Ctrl + C停止测试,并且测试磁盘仍连接到所选计算机,则不会调用该函数。 



现在我们已经完成了一般性理论,请转到本节。



实践



一般的启动语法如下所示 



vixdisklibsample.exe command [options] diskPath


在最简单的情况下,我们可以通过指定主机的名称,登录名,密码和所需计算机的路径来连接到主机。



C:\VDDK\bin>vixDiskLibSample.exe -info -host demo -user root -password secret [datastore1] test/test.vmdk


-info将显示所选驱动器的DiskPath。



如果主机已连接到vCenter,则必须添加-libdir和-vm选项。在VDDK> 6.0的情况下,请不要忘记-thumb



C:\VDDK\bin>vixDiskLibSample.exe -info -host demo -user Administrator -password secret -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00" -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_X_X" -vm vmPath=Datastorage/vm/DemoVM "[datastore1] DemoVM/Demo.vmdk"




然后有趣的事情开始了:我们指定-mode和-ssmoref。我强烈建议使用快照进行所有测试,以免意外损坏原始磁盘。请记住:写测试是一种破坏性的操作!它实际上是在写数据,而不是在模拟过程!



另一方面,我也不能禁止任何事情。



因此,我们在Hotadd模式下运行写测试



C:\VDDK\bin>vixDiskLibSample.exe -writebench 1024 -host demo.local -user "demo\adm" -password "%TOPSECRET%" -vm "moref=vm-80380" -ssmoref "snapshot-82782" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"
-mode hotadd -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_6_0" "[datastore1] test/test.vmdk"

appGlobals.port902VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
Disk "[datastore1] test/test-000001.vmdk" is open using transport mode "hotadd".
ReadFlag  : 0
Processing 10240 buffers of 1048576 bytes.
Wrote 64 MBytes in 2699 msec (23 MBytes/sec)
Wrote 64 MBytes in 2667 msec (23 MBytes/sec)
Wrote 64 MBytes in 687 msec (93 MBytes/sec)
Wrote 64 MBytes in 608 msec (105 MBytes/sec)
Wrote 64 MBytes in 687 msec (93 MBytes/sec)
...
Wrote 64 MBytes in 795 msec (80 MBytes/sec)
Wrote 64 MBytes in 749 msec (85 MBytes/sec)
Wrote 64 MBytes in 1326 msec (48 MBytes/sec)
Wrote 64 MBytes in 2465 msec (25 MBytes/sec)
Wrote 64 MBytes in 2449 msec (26 MBytes/sec)
Wrote 10240 MBytes in 141040 msec (72 MBytes/sec)
Deleted directory C:\Users\ADMINI~1\AppData\Local\Temp\2\vmware-Administrator\4206be79-cfef-4175-51a5-6e7c0900591b-vm-80380\hotadd


对于SAN模式,所有内容都是相同的,但是请记住,对于此测试,cmd必须以管理员权限运行,否则您将收到错误消息“您没有对此文件的访问权限”和“没有设备LVID的路径”。



如果要在Direct SAN模式下测试恢复选项,则需要在HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ VMware,Inc. \ volatile \ UUIDHost分支中指定伪造的UUID。



现在,让我们尝试在nbd模式下运行读取速度测试。



C:\VDDK\bin>vixDiskLibSample.exe -readbench 1024 -host demo.local -user "demo\adm" -password "%TOPSECRET%" -vm "moref=vm-80380" -ssmoref "snapshot-82782" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"  -ssmoref "snapshot-82782"
-mode nbd -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_6_0" "[datastore1] test/test.vmdk"

appGlobals.port902VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
Disk "[datastore1] test/test.vmdk" is open using transportmode "nbd".
ReadFlag  : 4
Processing 20480 buffers of 524288 bytes.
Read 64 MBytes in 2293 msec (27 MBytes/sec)
Read 64 MBytes in 2153 msec (29 MBytes/sec)
Read 64 MBytes in 1747 msec (36 MBytes/sec)
Read 64 MBytes in 2013 msec (31 MBytes/sec)
Read 64 MBytes in 2823 msec (22 MBytes/sec)


如果要提供实际负载,请随时为多个磁盘运行-readbench或-writebench。但是为此,您需要VDDK 6.5或7.0



C:\VDDK\bin\vixDiskLibSample.exe" -readbench 1024 -host "10.0.0.1" -user "AD\user" -password "****" -vm "moref=vm-1" -ssmoref "snapshot-100" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00" -mode san -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x64\vddk_6_5" -initex "C:\VDDK60\initex.txt" "[Datastore01] VM/VM.vmdk" "[Datastore01] VM/VM_1.vmdk" "[Datastore01] VM/VM_2.vmdk" "[Datastore01] VM/VM_3.vmdk


最后,让我们看看使用-info可以获取有关虚拟磁盘的哪些信息



C:\VDDK\bin>vixDiskLibSample.exe -info -host demo.local -user "demo\adm" -password "%TOPSECRET%" -vm "moref=vm-80380"
-ssmoref "snapshot-82787" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00" -mode nbd -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_6_0" "[datastore1] test/test.vmdk"

appGlobals.port902VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
Disk "[datastore1] test/test.vmdk" is open using transport mode "nbd".
capacity          = 20971520 sectors
number of links   = 1
adapter type      = LsiLogic SCSI
BIOS geometry     = 0/0/0
physical geometry = 1305/255/63
Transport modes supported by vixDiskLib: file:san:hotadd:nbdssl:nbd


顺便说一句,如果您突然不想冒险使用真实计算机上的真实磁盘,则可以在此处创建它们。的确,通过-create不能立即在主机上创建磁盘,但是-clone选项可以帮助我们。-cap参数设置大小(以兆字节为单位),这在Linux机器上更方便。



./vix-disklib-sample -create -cap 1024 newdisk.vmdk
./vix-disklib-sample -clone virtdisk.vmdk –host demo.local –user root –password TOP_SECRET newdisk.vmdk


这结束了我快速浏览VixDiskLibSample的广泛可能性的世界。是的,在某些地方该实用程序有点笨拙,其输出也不是很方便。但是,您始终可以根据自己的需要制作自己的东西,这将使您能够优雅地解决自己的问题,而无需发明自行车和使用不明显的层。



最后还有一些有用的链接:



  • 可以从此链接下载VDDK的任何版本默认情况下,系统会为您提供7.0,但是从上方您可以至少切换到5.1
  • VDDK.



All Articles