virshコマンドとlibvirt apiの呼び出しの違い

回答:virshはlibvirt APIのパッケージです

libvirtとは

libvirtは仮想マシンまたは仮想化機能の管理に使用されるソフトウェアのコレクションであり、主に次のものが含まれます。

   1. libvirt API

   2. libvirtdプロセス

   3. virshツールセットの3つの部分。元々の目的は、さまざまなハイパーバイザーに統合管理インターフェースを提供することでした。

詳細は次のとおりです。

1. Libvirt API

APIの詳細は、異なるバージョン参照:http://libvirt.org/hvsupport.html異なる仮想化技術のために主にlibvirtのAPIを外部の統一されたインタフェースを提供し、その設計がある:
HV APIの変更(1)から分離-分離上位層の基盤となるハードウェア仮想化インターフェースの影響
(2)HV間での移植性-Linux、Windows、SolarisなどのさまざまなOSをサポートします
(3)迅速なアプリケーション開発-パッケージ化されたAPIを提供して、ソフトウェア開発プロセスをスピードアップします
(4)TLS、 SASL、SSH、PolicyKitは、さまざまな暗号化プロトコルを提供して、上位層アプリケーションから下位層リソースへの安全なアクセスを保証します。
最も原始的なCライブラリをカプセル化することにより、Perl、Python、OCaml、Java、Ruby、C#の複数のプログラミング言語のインターフェイスが実現されます。 、Php、およびアプリケーション層プログラミングで一般的に使用されるプロトコルをカプセル化して、さまざまなプロトコルライブラリを形成します。これらは、アプリケーション層プログラミングで簡単に呼び出すことができます。現在、主に次のものをサポートしています。

1. CIM / DMTFへのマッピング:libvirt-cim
  公開情報モデルCIMは、特定の実装とは何の関係もない管理情報を記述するための概念モデルです。
2. AMQP / QMFへのマッピング:libvirt-qmf
  AMQPは、ユニファイドメッセージングサービスを提供するアプリケーションレイヤーの標準プロトコルであり、クライアントアプリケーションとメッセージミドルウェア間の非同期で安全かつ効率的な対話を提供するバイナリプロトコルです
  このプロトコルに基づくクライアントとメッセージミドルウェアは、クライアント/ミドルウェアやさまざまな開発言語などのさまざまな製品に制限されることなく、メッセージを配信できます。
3. SNMPへのマッピング:libvirt-snmp
  このライブラリはlibvirtにSNMP機能を持たせます。開発者はSNMPを介して各ノードの異なる
ドメインの情報を監視および設定できます。4. GObjectへのマッピング:libvirt-glib

2.デーモンプロセス(libvirtd)

バックグラウンドプロセスは主に次の機能を実装します。

(1)リモートエージェント
  リモートクライアントから送信されたすべてのコマンドはプロセスによって監視および実行されます
(2)ローカル環境の初期化
  libvirtサービスの開始と停止、ユーザー接続応答など
(3)さまざまなドライバー(qemu、xen、環境に応じたストレージ)を登録します…)実装
  さまざまな仮想化テクノロジーがドライバーの形で実装されています。libvirtによって提供されるe799bee5baa6e59b9ee7ad9431333337376364は統合されたインターフェイスであるため、各ドライバーはこれらのインターフェイスを実装する、つまりlibvirtにドライバーを登録します

3. virshツールセット  

  これは、libvirt APIと、コマンドラインインターフェースによって提供される外部インターフェースのカプセル化です

4. virshコマンドまたはインターフェースを使用して、仮想マシンインスタンスのコード実行パスを作成します。

1)virshコマンドまたはAPIインターフェースcで仮想マシンインターフェースレイヤーを
     作成するvirsh create vm.xmlまたはvirDomainPtr virDomainCreateXML(virConnectPtr conn、const char * xmlDesc、unsigned int flags)
(2)libvirt-abstractドライバーによって提供される統合インターフェースを呼び出すレイヤー
  conn->ドライバー-> domainCreateXML(conn、xmlDesc、flags); //ここのDomainCreateXMLは抽象的な統一インターフェースであり、基盤となるドライバーがkvmまたはxenであるかどうかを気にする必要はありません
(3)基盤となる対応する仮想化を呼び出しますテクニカルインターフェイス固有のドライバーレイヤー
  domainCreateXML = qemuDomainCreateXML; //ドライバー= qemuの場合、ここで呼び出されたqemuは、抽象ドライバーレイヤーの関数qemuDomainCreateXMLに登録されます
(4)シェルコマンドをアセンブル
  し、例としてqemuDomainCreateXML を実行しますqemuDomainCreateXML最初に、qemu -hda disk.imgなどの仮想マシンを作成するコマンドをアセンブルし、次に新しいスレッドを作成して実行
  します。Libvirtは4つのステップを使用して、シェルの下部に直接コマンドを入力し、操作を完了します。抽象カプセル化は、アプリケーション開発者に統合された使いやすいものを提供するために提供されています 口。

5.抽象ドライバー層

    現在、libvirtには以下のタイプの抽象ドライバーがあり、各タイプのドライバーは機能モジュールの抽象パッケージを表します。

(1)仮想化ドライバー(virDriverPtr)
(2)仮想ネットワークドライバー(virNetworkDriverPtr)
(3)物理ネットワークカードドライバー(virInterfaceDriverPtr)
(4)ストレージドライバー(virStorageDriverPtr)
(5)モニタードライバー(virDeviceMonitorPtr)
(6)セキュリティドライバー(virSecretDriverPtr) )
(7)フィルタードライバー(virNWFilterDriverPtr)
(8)状態ドライバー(virStateDriverPtr)

おすすめ

転載: www.cnblogs.com/dingyunfeng/p/12735554.html