ストレージを構成する

このセクションでは、物理ストレージハードウェアを仮想マシン(VM)にマップする方法と、ストレージ関連のタスクを実行するために管理APIで使用されるソフトウェアオブジェクトについて説明します。サポートされている各ストレージタイプの詳細を示すセクションには、次の情報が含まれています:

  • CLIを使用した仮想マシン用ストレージの作成手順(タイプ固有のデバイス構成オプションを使用)
  • バックアップ用のスナップショットの生成
  • ストレージ管理のベストプラクティス
  • 仮想ディスクのQoS(Quality of Service:サービス品質)設定

ストレージリポジトリ(SR)

ストレージリポジトリ(SR)は、仮想マシンの仮想ディスクイメージ(VDI)が格納される特定のストレージターゲットです。仮想ディスクイメージ(VDI)は、仮想ハードディスクドライブ(HDD)を表す、抽象化されたストレージです。

ストレージリポジトリには柔軟性があり、次のドライブのサポートが組み込まれています:

ローカルで接続:

  • IDE
  • SATA
  • SCSI
  • SAS

リモートで接続:

  • iSCSI
  • NFS
  • SAS
  • ファイバチャネル

ストレージリポジトリとVDIの抽象化によって、高度なストレージ機能を、それらをサポートするストレージターゲット上で提供できるようになります。たとえば、シンプロビジョニング、VDIスナップショット、高速クローニングなどの高度な機能があります。高度な操作を直接サポートしていないストレージサブシステムの場合、これらの機能を実装するソフトウェアスタックが提供されます。このソフトウェアスタックは、MicrosoftのVHD(Virtual Hard Disk:仮想ハードディスク)仕様に基づいています。

SRコマンドでは、格納されている個々のVDIの作成、破棄、サイズ変更、複製、接続、および検出を実行できます。

ストレージリポジトリは、永続的なオンディスクデータ構造体です。ブロックデバイスを使用する種類のストレージリポジトリでは、ストレージリポジトリの作成時にそのストレージターゲット上の既存のデータが消去されます。NFSなど、そのほかの種類のストレージリポジトリでは、ストレージアレイ上にコンテナが作成されるため、既存のストレージリポジトリは保持されます。

各XenServerホストでは、複数の異なる種類のストレージリポジトリを同時に使用することができます。これらのストレージリポジトリは、ホスト間で共有したり、特定のホスト専用にしたりできます。共有ストレージは、定義済みのリソースプール内の複数のホスト間でプール(共有)されます。共有されたストレージリポジトリは、各ホストとネットワークで接続されている必要があります。リソースプールでは、すべてのサーバーが少なくとも1つの共有ストレージリポジトリを使用している必要があります。

ストレージリポジトリを管理するCLI操作については、「SR(ストレージリポジトリ)コマンド」で説明します。

仮想ディスクイメージ(VDI)

仮想ディスクイメージ(VDI)は、仮想ハードディスクドライブ(HDD)を表す、抽象化されたストレージです。XenServerにおける仮想化されたストレージの基本単位です。仮想ディスクイメージは、XenServerホストに依存しない永続的なオンディスクオブジェクトです。VDIを管理するCLI操作については、「VDI(仮想ディスクイメージ)コマンド」で説明します。データのディスク上の表現は、ストレージリポジトリの種類によって異なります。ストレージリポジトリごとの別個のストレージプラグインインターフェース(SM APIと呼ばれる)でデータが管理されます。

物理ブロックデバイス(PBD)

物理ブロックデバイスは、物理サーバーとストレージリポジトリの間のインターフェイスで、ストレージリポジトリをホストにマップするためのコネクタオブジェクトです。PBDには、ストレージターゲットとの接続および対話に使用するデバイス設定フィールドが格納されます。たとえば、NFSデバイス設定には、NFSサーバーのIPアドレスや、XenServerホストがマウントするパスの情報が含まれます。PBDオブジェクトにより、ストレージリポジトリとXenServerホストとのランタイム接続が管理されます。PBDに関するCLI操作については、「PBD(物理ブロックデバイス)コマンド」で説明します。

仮想ブロックデバイス(VBD)

仮想ブロックデバイス(VBD:Virtual Block Device)は、上記の物理ブロックデバイス(PBD)に似たコネクタオブジェクトで、VDIと仮想マシンをマップします。VBDは、VDIを仮想マシンに接続するメカニズムを提供するほか、特定のVDIのQoS(サービス品質)と統計情報、およびそのVDIを起動できるかどうかに関するパラメータの微調整が可能です。VBDに関するCLI操作については、「VBD(仮想ブロックデバイス)コマンド」で説明します。

ストレージオブジェクトの相関

次の図は、ここで説明したストレージオブジェクトの相関を示しています。

ストレージリポジトリと関連オブジェクトの概略図

仮想ディスクのデータ形式

一般に、物理ストレージとVDIのマップ形式には、次の種類があります:

  1. LUN上の論理ボリュームベースのVHD: XenServerのデフォルトのブロックベースストレージは、ディスク上に論理ボリュームマネージャーを挿入します。このディスクは、ローカル接続されたデバイス(LVM)か、ファイバチャネル、iSCSI、またはSAS経由のSAN接続LUNです。VDIは、このボリュームマネージャ内のボリュームとして表示され、スナップショットおよび複製の参照ノードのシンプロビジョニングが可能なVHD形式で格納されます。

  2. LUN上のファイルベースのQCOW2: 仮想マシンイメージは、iSCSIソフトウェアイニシエータまたはハードウェアHBAを介して接続されたLUN上のGFS2共有ディスクファイルシステム上の、シンプロビジョニングされたQCOW2形式のファイルとして格納されます。

  3. ファイルシステム上のファイルベースのVHD: 仮想マシンイメージは、ローカルの共有されていないファイルシステム(EXTストレージリポジトリ)または共有されたNFSターゲット(NFSストレージリポジトリ)上の、シンプロビジョニングされたVHD形式のファイルとして格納されます。

VDIの種類

ほとんどの種類のストレージリポジトリでは、VHD形式のVDIが作成されます。必要に応じて、Raw形式のVDIを作成できます。このオプションは、xe CLIを使用する場合のみ指定できます。GFS2ストレージリポジトリの場合は、QCOW2 VDIが作成されます。

VDIがtype=rawで作成されたかどうかは、sm-configマップで確認できます。これらのキーやマップの値は、それぞれxeコマンドのsr-param-listvdi-param-listを実行して確認できます。

xe CLIを使用してRaw形式の仮想ディスクを作成する

  1. 次のコマンドを実行して、格納先のストレージリポジトリのUUIDを指定してVDIを作成します。

    xe vdi-create sr-uuid=sr-uuid type=user virtual-size=virtual-size \
        name-label=VDI name sm-config:type=raw
    
  2. 新しい仮想ディスクを仮想マシンに接続します。仮想マシン内でディスクツールを使用してパーティション作成およびフォーマットを行うか、新しいディスクを作成します。仮想ディスクを仮想マシンにマップするVBDを作成するには、vbd-createコマンドを使用します。

VDIの形式を変換する

VDIのRaw形式とVHD形式を直接変換することはできません。その代わり、VDI(上記のRaw形式、またはVHD)を作成して、既存のボリュームからデータをコピーします。xe CLIを使用して、新しいVDIの仮想サイズがコピー元のVDI以上であることを確認します。これを行うには、vdi-param-listコマンドの使用などにより、virtual-sizeフィールドを確認します。次に、この新しいVDIを仮想マシンに接続して、その仮想マシン内で適切なツールを使用してデータの直接ブロックコピーを行います。たとえば、Windowsの標準ディスク管理ツールやLinuxのddコマンドです。新しいボリュームがVHDボリュームの場合は、ディスクへの空セクタの書き込みを防ぐことができるツールを使用します。この操作により、基礎となるストレージリポジトリで領域が最適に使用されるようになります。ファイルベースのコピーを使用するほうが適切な場合があります。

VHDベースおよびQCOW2ベースのVDI

VHDおよびQCOW2イメージをチェーン化して、2つのVDIで共通のデータを共有できます。VHDまたはQCOW2ベースの仮想マシンを複製する場合、複製時にディスク上に存在したデータを複製元と複製先の仮想マシンが共有します。その後、各仮想マシンは異なるコピーオンライトバージョンのVDIで個別の変更を行います。この機能により、そのような仮想マシンをテンプレートからすぐに複製できるようになり、新しい仮想マシンのプロビジョニングと展開が容易になります。

仮想マシンやそのVDIの複製を繰り返すと、チェーン化されたVDIがツリー状になります。XenServerでは、チェーン内のVDIの1つを削除すると、それによって不要になるVDIが削除されます。この結合プロセスは、非同期的に実行されます。解放されるディスク容量や処理に必要な時間は、VDIのサイズと共有データの量によって異なります。

VHD形式とQCOW2形式の両方で、シンプロビジョニングがサポートされています。仮想マシンがデータをディスクに書き込むときに、イメージファイルが自動的に細かいチャンクに拡張されます。ファイルベースのVHDとGFS2ベースのQCOW2の場合、この手法では、実際に仮想マシンイメージファイルに書き込まれているデータ分の領域しか物理ストレージ上で消費されないという大きな利点があります。LVMベースのVHDでは、基礎となる論理ボリュームコンテナのサイズをVDIの仮想サイズに合わせる必要があります。ただし、スナップショットまたはクローンが発生すると、基になるコピーオンライトインスタンスディスク上の未使用領域が再利用されます。これら2つの動作の違いを次に説明します:

  • LVMベースのVHDイメージの場合、チェーン内の差分ディスクノードは、ディスクに書き込まれた分だけデータを使用します。ただし、リーフノード(VDIクローン)は、ディスクの仮想サイズまで完全に拡張されたままとなります。スナップショットリーフノード(VDIスナップショット)は、不使用時は縮小されたままで、その割り当てが保持されるように読み取り専用で接続できます。読み取り/書き込み形式で接続されたスナップショットノードは、接続時に完全に拡張され、接続解除時に縮小されます。

  • ファイルベースのVHDおよびGFS2ベースのQCOW2イメージの場合、すべてのノードが、書き込まれた分だけデータを使用します。リーフノードファイルは、アクティブに書き込まれるにつれて、データを格納するために拡張されます。つまり、100GBのVDIを仮想マシンに割り当てて、そこにオペレーティングシステムをインストールする場合、そのVDIファイルの物理サイズは、ディスク上のオペレーティングシステムデータといくらかのメタデータのサイズを加算したものであり、100GBではありません。

単一のVHDまたはQCOW2テンプレートから複数の仮想マシンを複製する場合、複製先の各仮想マシン(子VM)によりチェーンが形成され、新しい変更のみが子VMに書き込まれます。古いブロックは複製元のテンプレート(親)から直接読み取られます。その子VMをテンプレートに変換して、さらにその複製を作成すると、親、子、孫のチェーンが形成されることになり、パフォーマンスが低下します。XenServerでは、最大チェーン長であるMAXIMUM_SUPPORTED_VHD_CHAIN_LENGTHがサポートされています。正当な理由なくこの上限に近づかないようにしてください。パフォーマンスを低下させずに仮想マシンの複製を作成するには、XenCenterまたはvm-copyコマンドを使用して仮想マシンをコピーします。これにより、チェーンは0にリセットされます。

結合に関するVHD特有の注意事項

ストレージリポジトリに対して同時に実行される結合プロセスは、1つのみです。また、このプロセススレッドはストレージリポジトリのマスタホスト上で実行されます。

プール内のマスタサーバー上で重要な仮想マシンを実行している場合は、以下の手順で、入出力が低速になる可能性を軽減できます:

  • ストレージリポジトリマスタでないホストに仮想マシンを移行します。

  • ディスク入出力の優先度を高くして、スケジューラを設定します。詳しくは、「仮想ディスクのQoS設定」を参照してください。