VMware Virtual Disk Development Kit (VMware VDDK)について

## VMware Virtual Disk Development Kit (VMware VDDK)とは

VDDKには仮想ディスク(VMDK)の操作 (VixDiskLib) と仮想ディスクパーティションのマウント (VixMntapi) のためのライブラリが含まれており、VMDKに対するのアクセスと転送に必要な機能を提供します。
VMware仮想ディスクストレージの作成やアクセスを可能にするCライブラリやコードサンプル、ユーティリティやドキュメントも含まれており、以下のサイトからダウンロード可能です。

[Broadcom Developer Portal : VMware Virtual Disk Development Kit (VDDK)](https://developer.broadcom.com/sdks/vmware-virtual-disk-development-kit-vddk/latest) (要ユーザー登録)


:::note info
### VADP (vSphere Storage APIs for Data Protection)とは
vSphere Storage APIs for Data Protection (VADP)は、vSphere向けバックアップソリューションが利用するvSphere APIのサブセットのマーケティング用語です。スナップショットを利用したVADPフレームワークにより、仮想ディスクを一元的にバックアップすることが可能になるため、データ保護ソフトウェアはVDDKとVADPの両方を必要とします。

- [FAQ: VMware vSphere Storage APIs – Data Protection (formerly known as VMware vStorage APIs for Data Protection or VADP)](https://knowledge.broadcom.com/external/article/311197/faq-vmware-vsphere-storage-apis-data-pr.html)
:::

### VDDKのコンポーネント

VDDKは以下のものを提供します。

- **Virtual Disk Library(VixDiskLib)** : VMDKファイルを操作するためのC言語関数のセット
- **Disk Mount Library(VixMntapi)**: VMDKファイルシステムをリモートマウントするためのC言語関数のセット
- Visual StudioもしくはGNU Cコンパイラでコンパイル可能なC++コードサンプル
- PDFマニュアルとオンラインHTMLリファレンス

## Virtual Disk Library - VixDiskLib

VixDiskLibはVMwareプラットフォーム製品とのインテグレーションソリューションを開発することを可能にする、独立したラッパーライブラリとして以下の機能を提供します。

- 仮想ディスクファイル操作 : 作成、変換、拡張、デフラグメント、シュリンク、リネーム
- redoログ(子ディスクもしくは差分ディスク)の作成と、VMDKファイルの削除
- VMDKファイルの任意の場所に対するランダムRead/Writeアクセスと、メタデータの読み込み
- Advanced Transport、SANもしくはHotAddによるリモートのvSphereストレージに対する接続

### Advanced Transport - Virtual Diskの転送方法

SANまたはNASストレージを持つESXiホスト上で実行されている仮想マシンのファイルベースまたはイメージレベルのバックアップをサポートします。データストアから直接データを読み取るため効率的なバックアップが可能です。
バックアップソリューションが、ストレージに効率的にアクセスするためのインターフェイスとしてAdvanced Transportを提供し、以下の4種類のアクセス方法をサポートします。

- Local File Access : ESXiホスト上の /vmfs/volumes から仮想ディスクデータを読み取る。このファイルアクセスメソッドは VixDiskLib に組み込まれており、ローカルストレージで常に使用できるが、ネットワーク転送でないため、vSphereバックアップにはほとんど使用されない。
- SAN Transport : VixDiskLibはESXiホストからVMFS LUNレイアウト情報を取得し、この情報を使用して、仮想ディスクが存在するストレージLUNから直接データを読み取る。SAN接続されたESXiホストに展開されたソフトウェアにとって最も高速な転送方法。
- HotAdd Transport : 仮想マシンの実行中にデバイス追加できる、SCSI HotAdd機能を利用する。仮想ディスクをリンククローンとして複製し、仮想マシンとして実行されるバックアップアプライアンスに作成したクローンをHotAddし、バックアップデータを読み込む。
- NBD/NBDSSL : 上記のトランスポートが利用できない場合、NBD/NBDSSLプロトコルを使用してネットワークトランスポートによりデータを転送する。NBD(Network Block Device)はリモートホスト上のストレージをブロックデバイスとして扱うことができ、NBDSSLはVMwareによるNBDに対する拡張。NBD/NBDSSLは常に使用可能であるため、フォールバック先として利用されることが多い。実際のデータ転送には、ESXiホストに対するNFC(Network File Copy)が利用される。

## Virtual Disk Libraryのユースケース

- 仮想マシンに関連付けられた特定のボリュームまたはすべてのボリュームのバックアップ
- バックアッププロキシをvSphereに接続し、ストレージクラスタ上のすべての仮想マシンのバックアップ
- 仮想ディスクを読み取り、仮想マシンのオフラインアンチウイルススキャンまたはパッケージ分析の実行
- 仮想ディスクに書き込み、仮想マシンのオフライン集中パッチ適用
- 仮想ディスクを操作して、ファイルシステムイメージのデフラグ、拡張、変換、名前変更、または縮小
- 破損または感染したオフライン仮想マシンでデータ復旧またはウイルスの駆除

詳細は[こちらの関数一覧](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vddk-programming-guide/GUID-8E6D36C2-7C28-414D-B179-DB04D791124F.html)を参照してください。

## Disk Mount Library - VixMntapi

Disk Mount Library (VixMntapi) は複数のプラットフォーム上のゲストOSをサポートし、プログラムはマウントされたディスクパーティションと同じようにアクセスできます。vixMntapiライブラリは、VixDiskLibとともにVDDK にパッケージ化されています。

詳細は[こちらの関数一覧](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vddk-programming-guide/GUID-5B01EA52-96B1-4788-8C46-0828156A49F6.html)を参照してください。


## 参考情報

- [VMware vSphere Product Documentation - Virtual Disk Development Kit (VDDK) Programing Guide](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vddk-programming-guide/GUID-22A6F9BB-1DE9-49CA-8819-1F176FC6D172.html)
  - [Virtual Disk API Functions](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vddk-programming-guide/GUID-8E6D36C2-7C28-414D-B179-DB04D791124F.html)
  - [Virtual Disk Transport Methods](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vddk-programming-guide/GUID-15395099-5300-4D3F-BCC3-E50DCDC954C2.html)
  - [Virtual Disk Mount API](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vddk-programming-guide/GUID-F03CE502-9CB5-42F3-88CC-D6D9E165B170.html)