23.19. ストレージプール

すべてのストレージプールのバックエンドは同じパブリック API と XML 形式を共有しますが、それらの機能のレベルはそれぞれ異なります。ボリュームの作成を許可するものもあれば、既存ボリュームの使用のみを許可するものもあります。ボリュームのサイズや位置に制約があるものもあります。
ストレージプールドキュメントの上位要素は <pool> です。これには、以下の値を取る単一属性 type があります。dir, fs, netfs, disk, iscsi, logical, scsi, mpath, rbd, sheepdog、または gluster

23.19.1. ストレージプールのメタデータの提供

以下の XML サンプルは、ストレージプールに追加できるメタデータタグを示しています。この例では、プールは iSCSI ストレージプールになります。
         
     <pool type="iscsi">
        <name>virtimages</name>
        <uuid>3e3fce45-4f53-4fa7-bb32-11f34168b82b</uuid>
        <allocation>10000000</allocation>
        <capacity>50000000</capacity>
        <available>40000000</available>
        ...
     </pool>
         

図23.81 一般的なメタデータのタグ

この例で使用される要素は、表23.27「virt-sysprep コマンド」 で説明されています。

表23.27 virt-sysprep コマンド

要素説明
<name>ホスト物理マシンに固有でなければならないストレージプールの名前を提供します。これは、ストレージプールを定義する際に必須となります。
<uuid>グローバルに一意である必要のあるストレージプールの ID を提供します。UUID を指定することはオプションですが、UUID がストレージプールの作成時に提供されない場合、UUID は自動生成されます。
<allocation>ストレージプールの合計ストレージ割り当てを提供します。これは、メタデータのオーバーヘッドにより、すべてのストレージボリューム間での合計割り当てよりも大きくなります。この値はバイト単位で表わされます。この要素は読み取り専用であり、値を変更することはできません。
<capacity>プールの合計ストレージ容量を提供します。基礎となるデバイスの制約により、ストレージボリュームの完全容量を使用することができない場合があります。この値はバイト単位になります。この要素は読み取り専用であり、値を変更することはできません。
<available>ストレージプールの新規ストレージボリュームを割り当てるために利用可能な空き領域を提供します。基礎となるデバイスの制約により、空き容量すべてを単一ストレージボリュームに割り当てることができない場合があります。この要素は読み取り専用であり、値を変更することはできません。

23.19.2. source 要素

<pool> 要素内に、単一 <source> 要素がある場合があります (1 つのみ)。<source> の子要素はストレージプールタイプに依存します。使用できる XML サンプルには以下が含まれます。
         
           ...
        <source>
          <host name="iscsi.example.com"/>
          <device path="demo-target"/>
          <auth type='chap' username='myname'>
            <secret type='iscsi' usage='mycluster_myname'/>
          </auth>
          <vendor name="Acme"/>
          <product name="model"/>
        </source>
        ...
         

図23.82 source 要素オプション 1

         
         ...
        <source>
          <adapter type='fc_host' parent='scsi_host5' wwnn='20000000c9831b4b' wwpn='10000000c9831b4b'/>
        </source>
        ...
         

図23.83 source 要素オプション 2

<source> で許可される子要素は 表23.28「source 子要素コマンド」 で説明されています。

表23.28 source 子要素コマンド

要素説明
<device>ホスト物理マシンデバイスをベースとするストレージプールのソース (<pool type=> に基づく (「ストレージプール」 に記載) を提供します。バックエンドドライバーによって複数回繰り返される可能性があります。ブロックデバイスノードへの完全修飾パスである単一属性 path が含まれます。
<dir>ディレクトリーをベースとするストレージプールのソース (<pool type='dir'>) を提供します。またはオプションでファイルシステムに基づくストレージプール内のサブディレクトリー (<pool type='gluster'>) を選択します。この要素は (<pool>) ごとに 1 回のみ出現する可能性があります。この要素は、バッキングディレクトリーへの完全パスである単一属性 (<path>) を受け入れます。
<adapter>SCSI アダプターをベースとするストレージのソース (<pool type='scsi'>) を提供します。この要素は (<pool>) ごとに 1 回のみ出現する可能性があります。属性名は SCSI アダプター名です (例: "scsi_host1")。"host1" の後方互換性はサポートされますが、推奨はされていません。属性 type はアダプタータイプを指定します。有効な値は 'fc_host'| 'scsi_host' です。これが省略され、name 属性が指定される場合、デフォルトは type='scsi_host' になります。後方互換性を維持するため、type='scsi_host' では属性 type は任意になりますが、type='fc_host' アダプターでは必須になります。属性 wwnn (Word Wide Node Name) および wwpn (Word Wide Port Name) は、ファイバーチャネルストレージファブリックのデバイスを一意に識別するために type='fc_host' アダプターによって使用されます (デバイスは HBA または vHBA のいずれか)。HBA または vHBA の wwnn および wwpn の取得方法は、「デバイス設定の収集」 を参照してください。任意の属性 parenttype='fc_host' アダプターの親デバイスを指定します。
<host>リモートサーバーからストレージをベースとするストレージプールのソースを提供します (type='netfs'|'iscsi'|'rbd'|'sheepdog'|'gluster')。この要素は、<directory> または <device> 要素と併用する必要があります。サーバーのホスト名または IP アドレスである属性 name が含まれます。オプションで、プロトコル固有のポート番号の port 属性が含まれる場合があります。
<auth><auth> 要素は、type 属性 (pool type='iscsi'|'rbd') の設定によりソースへのアクセスに必要な認証資格情報を提供します。typetype='chap' または type='ceph' のいずれかにする必要があります。Ceph RBD (Rados Block Device) ネットワークソースには "ceph" を使用し、CHAP (Challenge-Handshake Authentication Protocol) iSCSI ターゲットには「iscsi」を使用します。さらに必須の属性 usernameは、認証時に使用するユーザー名や、実際のパスワードまたは他の資格情報を保持する libvirt 秘密オブジェクトに関連付けるために必須の属性タイプの secret サブ要素を指定します。secret 要素には秘密オブジェクトの UUID を指定した uuid 属性か、または秘密オブジェクトに指定されたキーに一致する usage 属性のいずれかが必要になります。
<name>名前付き要素 <type> からストレージデバイスをベースとするストレージプールを提供します: (type='logical'|'rbd'|'sheepdog','gluster')。
<format>type='logical'|'disk'|'fs'|'netfs'の値を取ることが可能なストレージプール <type> の形式に関する情報を提供します。この値はバックエンド固有の値であることに注意してください。通常これは、ファイルシステムタイプ、ネットワークファイルシステムのタイプ、パーティションテーブルのタイプ、または LVM メタデータタイプを示すために使用されます。すべてのドライバーがこれについてのデフォルト値を持つ必要があるため、この要素はオプションになります。
<vendor>ストレージデバイスのベンダーについてのオプション情報を提供します。これには、値がバックエンド固有である単一属性の <name> が含まれます。
<product>ストレージデバイスの製品名についてのオプション情報を提供します。これには、値がバックエンド固有である単一属性の <name> が含まれます。

23.19.3. target 要素の作成

単一 <target> 要素は、以下のタイプの上位 <pool> 要素内に含まれます: (type='dir'|'fs'|'netfs'|'logical'|'disk'|'iscsi'|'scsi'|'mpath') このタグは、ストレージプールのホストファイルシステムへのマッピングを記述するために使用されます。これには、以下の子要素が含まれる可能性があります。
         
     <pool>
        ...
        <target>
          <path>/dev/disk/by-path</path>
          <permissions>
            <owner>107</owner>
            <group>107</group>
            <mode>0744</mode>
            <label>virt_image_t</label>
          </permissions>
          <timestamps>
            <atime>1341933637.273190990</atime>
            <mtime>1341930622.047245868</mtime>
            <ctime>1341930622.047245868</ctime>
          </timestamps>
          <encryption type='...'>
            ...
          </encryption>
        </target>
      </pool>
         

図23.84 target 要素 XML の例

表 (表23.29「ターゲット子要素」) は、親 <target> 属性に有効な子要素について説明します。

表23.29 ターゲット子要素

要素説明
<path>ストレージプールがローカルファイルシステムの名前空間にマップされるロケーションを提供します。ファイルシステム/ディレクトリーベースのストレージプールの場合、これはストレージボリュームが作成されるディレクトリーの名前になります。デバイスベースのストレージプールの場合、これはデバイスのノードが存在するディレクトリーの名前になります。後者の場合、/dev/ が論理的なオプションのようになりますが、デバイスのノードの場合オンデマンドで割り当てられるため、それらが再起動時に常に安定しているとは限りません。そのため、/dev/disk/by-{path,id,uuid,label} のいずれかのように安定した場所を使用する方が好ましいと言えます。
<permissions>現在のところ、これはローカルファイルシステムの名前空間にディレクトリーとしてマップされるディレクトリーまたはファイルシステムベースのストレージプールの場合にのみ有効です。これは、ストレージプールが構築される最終ディレクトリーに使用する権限についての情報を提供します。<mode> 要素には、8 進数の権限セットについての情報が含まれます。<owner> 要素には、数値のユーザー ID が含まれます。<group> 要素には、数値のグループ ID が含まれます。<label> 要素には、MAC (例: SELinux) ラベル文字列が含まれます。
<timestamps>ストレージプールについてのタイミング情報を提供します。最大 4 つのサブ要素が表示されます。ここで、timestamps='atime'|'btime|'ctime'|'mtime' は、既知の場合はストレージボリュームの access、birth、change、および modification time を保持します。使用される時間形式は <seconds> です。<nanoseconds>: エポックの開始 (1970 年 1 月 1 日) 以降。nanosecond 解決が 0 またはホストオペレーティングシステムまたはファイルシステムによってその他の方法でサポートされない場合、nanoseconds の部分は省略されます。これは読み取り専用の属性であり、ストレージボリュームの作成時は無視されます。
<encryption>存在する場合、ストレージボリュームが暗号化される方法を指定します。詳細については、libvirt アップストリームのページ を参照してください。

23.19.4. デバイスエクステントの設定

ストレージプールがその基礎となる位置または割り当てスキームについての情報を公開する場合、 <device> 要素内の <source> 要素には、その利用可能なエクステントについての情報が含まれる場合があります。一部のストレージプールには、ストレージボリュームが (ディスクパーティションプールなどのように) 完全な単一制約内で割り当てられる必要があるという制約があります。したがって、エクステント情報により、アプリケーションは新規ストレージボリュームに可能な最大サイズを判別することができます。
それぞれの <device> 要素内で、エクステントをサポートするストレージプールの場合、ゼロまたは 1 つ以上の <freeExtent> 要素があります。これらの要素にはそれぞれ、<start> および <end> の 2 つの属性が含まれます。これらの属性は、バイト単位で測定されるデバイス上のエクステントの範囲を提供します。