概要
VDDK (Virtual Disk Development Kit ) API は VMware さんが提供する VMDK を直接編集できる C のライブラリです
大きく 2 つの機能があります
- The virtual disk library, a set of C function calls to manipulate VMDK files
- The disk mount library, a set of C function calls to remote mount VMDK file systems
VMDK ファイルを操作する API と VMDK をマウントする API があります
今回はインストール方法と簡単な使い方を紹介します
先に紹介しておきますが参考サイトにある Programming Guide が一番参考になり本記事もそれを元に作成しています
環境
- CentOS 7
- VCSA 6.5.0 9451637
- VDDK API 6.7.1
ライブラリダウンロード
MyVMware にログインしここからダウロードしましょう
執筆時点では VMware-vix-disklib-6.7.1-10362358.x86_64.tar.gz
というファイルがダウンロードできました
zip ファイルは Windows 用になっているので注意してください
解凍するとライブラリやドキュメントなどがあります
tar zvxf VMware-vix-disklib-6.7.1-10362358.x86_64.tar.gz
ls -1 vmware-vix-disklib-distrib/
bin64
doc
FILES
include
lib32
lib64
コンパイラインストール
apt -y install gcc-c++
とりあえずサンプルを動かしてみる
コンパイル
cd vmware-vix-disklib-distrib/doc/samples/diskLib
- make
で vix-disklib-sample
と vix-mntapi-sample
というコマンドが作成されます
コマンドを実行するとオプションが表示されるので確認してみてください
ちなみに大本は vixDiskLibSample.cpp
というコードになっているのでコマンドを動かしつつコードを確認すると実際にコーディングするときに役に立つと思います
ライブラリ配置
必要なライブラリを配置します
cd vmware-vix-disklib-distrib
mkdir /usr/lib/vmware-vix-disklib
cp -ipr lib64 /usr/lib/vmware-vix-disklib/
touch /etc/ld.so.conf.d/vmware-vix-disklib.conf
vim /etc/ld.so.conf.d/vmware-vix-disklib.conf
/usr/lib/vmware-vix-disklib/lib64
- ldconfig
ディスクの情報を取得する
ではコマンドを実行してみましょう
./vix-disklib-sample -create sample.vmdk
./vix-disklib-sample -info sample.vmdk
Disk[0] "sample.vmdk" is opened using transport mode "file".
capacity = 204800 sectors
number of links = 1
adapter type = BusLogic SCSI
BIOS geometry = 0/0/0
physical geometry = 100/64/32
Transport modes supported by vixDiskLib: file:nbdssl:nbd
Disk[0] is closed.
こんな感じです
vCenter 配下のディスクの情報を取得する
-host
, -user
, -password
, -vm
を付与することで vCenter 配下に対して実行することができます
SSL 証明書がない (IP アドレス直の場合) は -thumb
コマンドも付与しましょう
./vix-disklib-sample -info -host 192.168.100.20 -user "administrator@vsphere.local" -password 'xxxxxxx' -vm "moref=vm-10" -thumb "96:09:d6:5b:e0:83:58:1b:ba:2b:cc:78:22:88:33:36:64:50:32:eb" "[datastore1] vm01/vm01.vmdk"
こんな感じです
vm-10
は vCenter から見たときの MoRef になります
ESXi から見た場合 vm-
がなくかつ数字の部分も異なるので注意してください
vm-10
が持つ vmdk を指定しないとエラーになります
ESXi 配下のディスクの情報は取得できない?
vCenter 同様にやってみたのですが Error: [vixDiskLibSample.cpp:1564] 14 The command is not supported on remote objects
となり取得できませんでした
やり方が悪いだけのような気もしますが、、
Tips: ハマりポイント
自分はコンパイル時に以下のエラーで半日くらいハマりました、、
vixDiskLibSample.cpp:(.text+0x564): undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)'
原因は Ubuntu18 で作業していたためでした
Ubuntu16 でも同じエラーになったので素直に CentOS7 を使ってコンパイルするようにしてください
あと以下のエラーが出て ESXi に接続されているデータストア上にある vmdk の情報は取得できません
./vix-disklib-sample -info -host 192.168.100.10 -user root -password secret "[datastore1] vm01/vm01.vmdk"
`Error: [vixDiskLibSample.cpp:1572] 3 One of the parameters was invalid`
公式のドキュメントに記載の通りに実行してコマンドがエラーになると本当に勘弁してほしいです、、
解決方法-vm moref=vm-10
のように MoRef オプションを付与することで解決できます
最後に
VDDK API を使ってみました
とりあえずサンプルの C++ コードをコンパイルして動かしてみました
が、一部ドキュメント通りに実行しても動作しなかったのはさすがに萎えました、、
VMware さんのプロダクトはドキュメントの質が悪いのが多くせっかくのプロダクトも残念な感じに思えてしまうものが多い気がします
自分の実力がないだけかもしれませんが、、
0 件のコメント:
コメントを投稿