VixDiskLibSample: teste os discos virtuais corretamente

Quando nos deparamos com um determinado produto de software com o qual temos de interagir, somos livres para escolher nós mesmos o cenário de interação. Você pode reinventar heroicamente a roda, ou pode esperar que os autores conheçam seu produto um pouco melhor do que nós, então a API (ou conjunto de bibliotecas) que eles fornecem é a solução ideal. Na prática, infelizmente, nem tudo é tão bom, mas hoje não é isso.



Por muitos anos, a VMware forneceu o VDDK para trabalhar com seu subsistema de disco, um amplo conjunto de bibliotecas, documentação e exemplos de código que seu aplicativo pode usar para trabalhar com discos de máquina virtual. Claro, na Veeam, realmente não gostamos de reinventar bicicletas desnecessárias, então o VDDK é usado muito ativamente em nossos produtos.



Mas isso ainda não afeta o número de clientes que acreditam que trabalhar com discos pode ser ainda mais rápido, e todos os testes de desempenho propostos mostram resultados incorretos a priori. É nesses momentos que a arma definitiva vem em nosso auxílio - VixDiskLibSample.







VixDiskLibSample é um pequeno programa C ++ incluído no VDDK e demonstra os princípios de se trabalhar com a biblioteca vixDiskLib, ou seja, ninguém trabalhará com discos de máquina virtual melhor e mais rápido que ela. E o que é especialmente importante para nós, pode ser usado como referência para escrever e ler. Uma espécie de teste de ultimato, cujos resultados dificilmente podem ser considerados inválidos.



Você pode obtê-lo junto com o próprio VDDK. Baixe- o do site da VMware e, no caso do Linux, basta compilar após a instalação



[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


O caminho de instalação padrão.

 

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


Também há informações na rede de que em algumas distribuições você precisa adicionar as seguintes linhas a vixDiskLibSample.cpp para uma compilação bem-sucedida:



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


Se ainda não compilar neste caso, é recomendado tentar adicionar a variável de ambiente LD_LIBRARY_PATH = / usr / lib / vmware-vix-disklib / lib64 e executar ldconf como root após adicionar o endereço / usr / lib / vmware-vix-disklib / lib64 para /etc/ld.so.conf.d/vmware-vix-disklib.conf



Mas no Windows no Visual Studio tudo é compilado sem problemas. E uma nota para a dona de casa: o VDDK no Veeam é usado apenas ao trabalhar através de um proxy Windows. No Linux, por vários motivos, ele usa sua própria solução usando a API vSphere.  



E quanto aos usuários do Veeam, você pergunta?



Nós respondemos: conectando as bibliotecas VDDK de diferentes versões que vêm com o Veeam Backup & Replication, você pode verificar a verdadeira velocidade de trabalho com o host em uma ampla variedade de modos.



As bibliotecas são armazenadas em C: \ Arquivos de programas (x86) \ Veeam \ Backup Transport \ x64 \ vddk_X_X e seu uso é obrigatório para resultados corretos.



Agora vamos dar uma olhada nos comandos e opções mais importantes para nós na inicialização. Pois, como acontece com todas as ferramentas de teste, a lista completa aqui é muito, muito pequena.



-readbench Executa o benchmark de leitura com o tamanho de bloco especificado. O tamanho é indicado em setores. 

 -writebench Tudo é igual, apenas a escrita. Importante:Esta é uma operação destrutiva! A gravação é justa! Não tente lançar uma máquina de produção! Ele será sobrescrito com lixo binário!

-multithread N Desde a versão 6.5, pode ser usado em paralelo para trabalhar com vários discos.

-host Host para se conectar. Pode ser na forma de um nome DNS ou IP.

-user Usuário de acordo com o domínio \

esquema do usuário -password Acho que está claro 

-vm vmPath = / path / to / vm Isso se sabemos onde nossa máquina está localizada, mas não sabemos suas outras coordenadas

-vm "moref = vm-XXX" Caminho para carros em estoque. Ele é mais. A maneira mais fácil de encontrá-lo é por meio do MOB em https: //vcenter.local/mob/ Importante:se você tiver apenas um host solitário sem vCenter, use moref = XXX, sem vm

-ssmoref Link para um instantâneo de sua máquina, porque, como você sabe, ler dados de discos é uma coisa e outra quando um instantâneo está em seu caminho. Ou alguns instantâneos. Parâmetro necessário (bem como o próprio instantâneo) para as máquinas incluídas.

-mode Um parâmetro que indica o modo de trabalhar com o disco. Refere-se a VixDiskLib_ConnectEx. Os valores disponíveis são nbd, nbdssl, san e hotadd. Todos eles são bem conhecidos de nossos usuários.

-libdir Caminho para a pasta da biblioteca. O padrão deve ser "C: \ Arquivos de programas (x86) \ Veeam \ Backup Transport \ x86 \ vddk_X_X" Se você trabalhar com um host independente, pode deixá-lo em branco.

-polegarIntroduzido na versão 6.0, um parâmetro obrigatório para especificar uma impressão digital de certificado SSL. Não funcionará sem ele. A maneira mais fácil é espiar o navegador;)

-initex configfile Caminho para o arquivo de configuração para VixDiskLib_InitEx



Os logs detalhados são gravados por padrão na 

pasta C: \ Usuários \ usuário atual \ AppData \ Local \ Temp \ vmware-current user \ vixDiskLib - #### pasta. log

Para uma vida livre de problemas, recomendo fortemente que você esvazie esta pasta após cada teste executado nos modos san e hotadd. E feche a janela com o console (ou seja, o cmd do Windows, não o do Linux). Isso se deve à peculiaridade da função VDDKEndAccess, que não é chamada se o teste for encerrado por Ctrl + C e os discos de teste permanecerem conectados à máquina selecionada. 



Agora que terminamos com a teoria geral, vá para a seção



Prática



A sintaxe geral de inicialização parece 



vixdisklibsample.exe command [options] diskPath


No caso mais simples, podemos nos conectar ao host especificando seu nome, login, senha e caminho para a máquina desejada.



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


-info mostrará o DiskPath da unidade selecionada.



Se o host estiver conectado ao vCenter, as opções -libdir e -vm devem ser incluídas. No caso de VDDK> 6.0, não se esqueça de -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"




E então a diversão começa: especificamos -mode e -ssmoref. Eu recomendo fortemente fazer todos os testes com um instantâneo, para não estragar acidentalmente o disco original. E lembre-se: o teste de gravação é uma operação destrutiva! Na verdade, ele grava dados, não simula o processo!



Por outro lado, também não posso proibir nada.



Então, executamos o teste de gravação no modo 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


Para o modo SAN, tudo é igual, mas lembre-se que para este teste o cmd deve ser executado com direitos de administrador, caso contrário você receberá os erros "Você não tem direitos de acesso a este arquivo" e "Nenhum caminho para o dispositivo LVID".



E se você deseja testar a opção de recuperação no modo Direct SAN, então você precisa especificar o UUID falso no HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ VMware, Inc. \ volatile \ UUIDHost branch.



Agora vamos tentar executar o teste de velocidade de leitura no modo 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)


Se você quiser dar uma carga real, sinta-se à vontade para executar -readbench ou -writebench para vários discos de uma vez. Mas para isso você precisa do VDDK 6.5 ou 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


Finalmente, vamos ver quais informações sobre discos virtuais podemos obter usando -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


A propósito, se de repente você não quer arriscar discos reais de máquinas reais, você pode criá-los aqui. É verdade, através de -create você não pode criar um disco imediatamente no host, mas aqui a opção -clone vem em nosso socorro. O parâmetro -cap define o tamanho em megabytes, e isso é mais conveniente de fazer em uma máquina 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


Isso conclui minha rápida excursão ao mundo de amplas possibilidades de VixDiskLibSample. Sim, em alguns lugares o utilitário é um tanto estúpido e sua saída não é muito conveniente. No entanto, você sempre pode fazer algo próprio com base nele, o que permitirá que você resolva seus problemas com elegância, sem a invenção de bicicletas e o uso de camadas indistintas.



E alguns links úteis no final:



  • Qualquer versão do VDDK pode ser baixada deste link . Por padrão, será oferecido 7.0, mas a partir de cima você pode mudar pelo menos para 5.1
  • VDDK.



All Articles