13.2. ストレージプールの使用

ここでは、仮想マシンでのストレージプールの使用に関する情報を提供します。概念と、virsh コマンドと 仮想管理マネージャー を使用してストレージプールを作成設定、および削除 する方法の詳細を説明します。

13.2.1. ストレージプールの概念

ストレージプールは libvirt によって管理されるファイル、ディレクトリー、またはストレージデバイスで、仮想マシンにストレージを提供します。ストレージプールは仮想マシンのイメージを格納するストレージボリュームに分割されるか、追加のストレージとして仮想マシンに接続されます。複数のゲストは同じストレージプールを共有できるため、ストレージリソースの割り当てが向上されます。
ストレージプールはローカルまたはネットワークベース (共有) のいずれかになります。
ローカルストレージプール
ローカルストレージプールは、ホストサーバーに直接アタッチされています。これに含まれるのは、ローカルディレクトリー、直接アタッチされたディスク、物理パーティション、ローカルデバイス上の論理ボリューム管理 (LVM) のボリュームグループです。ローカルストレージプールは開発、テスト、移行や多数の仮想マシンを必要としない小規模開発などに役立ちます。ローカルストレージプールは、ライブマイグレーションに使用できないため、多くの本番環境に適切でない可能性があります。
ネットワーク (共有) ストレージプール
ネットワークストレージプールは、標準のプロトコルを使用したネットワーク上の共有ストレージデバイスを含みます。ネットワークストレージは、virt-manager を使ってホスト間で仮想マシンを移行するときに必要になりますが、virsh を使って移行する場合は任意になります。
仮想マシンの移行の詳細は 15章KVM の移行 を参照してください。
Red Hat Enterprise Linux でサポートされるストレージプールは次のとおりです。
  • ディレクトリベースのストレージプール
  • ディスクベースのストレージプール
  • パーティションベースのストレージプール
  • GlusterFS ストレージプール
  • iSCSI ベースのストレージプール
  • LVM ベースのストレージプール
  • NFS ベースのストレージプール
  • SCSI デバイスとの vHBA ベースのストレージプール
Red Hat Enterprise Linux でサポートサポートされない libvirt ストレージプールタイプは次のとおりです。
  • マルチパスベースのストレージプール
  • RBD ベースのストレージプール
  • Sheepdog ベースのストレージプール
  • Vstorage ベースのストレージプール
  • ZFS ベースのストレージプール

注記

サポートされないストレージプールタイプの一部は 仮想管理マネージャー に表示されますが、使用しないでください。

13.2.2. ストレージプールの作成

ここでは、virsh および 仮想マシンマネージャー を使用した、一般的なストレージプールの作成手順を説明します。virsh を使用するとすべてのパラメーターを指定でき、仮想マシンマネージャー では GUI で簡単なストレージプールを作成できます。

13.2.2.1. virsh を使用したストレージプールの作成

注記

ここでは、例としてパーティションベースのストレージプールを作成します。

手順13.2 virsh を使用したストレージプールの作成

  1. 推奨事項を読み、前提条件をすべて満たしているようにしてください。

    一部のストレージプールでは、特定の慣例に従うことが推奨されます。さらに、ストレージプールのタイプによっては特定の前提条件があります。推奨事項と前提条件を確認するには、「ストレージプール固有の情報」 を参照してください。
  2. ストレージプールを定義します。

    ストレージプールは永続または一時になります。永続ストレージプールは、ホストマシンのシステムの再起動後も保持されます。一時ストレージプールは、ホストが再起動されるまで存在します。
    次のいずれかを行います。
    • XML ファイルを使用してストレージプールを定義します。
      a. 新規デバイスに必要となるストレージプール情報が含まれる一時 XML ファイルを作成します。
      XML ファイルには、ストレージプールタイプに応じた特定のフィールドが含まれる必要があります。詳細は 「ストレージプール固有の情報」 を参照してください。
      以下はストレージプール定義の XML ファイルの例になります。この例では、ファイルは ~/guest_images.xml に保存されます。
      <pool type='fs'>
        <name>guest_images_fs</name>
        <source>
          <device path='/dev/sdc1'/>
        </source>
        <target>
          <path>/guest_images</path>
        </target>
      </pool> 
      b. virsh pool-defineコマンドを使用して永続ストレージプールを作成するか、virsh pool-create コマンドを使用して一時ストレージプールを作成および開始します。
      # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
      または
      # virsh pool-create ~/guest_images.xml
      Pool created from guest_images_fs
      c. a. で作成した XML ファイルを削除します。
    • virsh pool-define-asコマンドを使用して永続ストレージプールを作成するか、virsh pool-create-as コマンドを使用して一時ストレージプールを作成します。
      以下の最初の例は、/guest_images ディレクトリーから /dev/sdc1 にマップされる、ファイルシステムベースの永続ストレージプールを作成し、2 つ目の例は同様にマップされるファイルシステムベースの一時ストレージプールを作成します。
      # virsh pool-define-as guest_images_fs fs - - /dev/sdc1 - "/guest_images"
      Pool guest_images_fs defined
      または
      # virsh pool-create-as guest_images_fs fs - - /dev/sdc1 - "/guest_images"
      Pool guest_images_fs created

      注記

      virsh インターフェースを使用する場合、コマンドのオプション名は任意です。オプション名を使用しない場合は、指定する必要のないフィールドにダッシュを使用します。
  3. プールが作成されたことを確認します。

    virsh pool-list --all を使用して、既存のストレージプールをすべてリストします。
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      inactive   no
  4. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して事前にフォーマットされたファイルシステムストレージプールのターゲットパスを作成します。ストレージソースデバイスを初期化し、データ形式を定義します。その後、virsh pool-list コマンドを使用してストレージプールが表示されることを確認します。
    # virsh pool-build guest_images_fs
    Pool guest_images_fs built
    # ls -la /guest_images
    total 8
    drwx------.  2 root root 4096 May 31 19:38 .
    dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      inactive   no

    注記

    ターゲットパスの構築は、ディスクベースのストレージプール、ファイルシステムベースのストレージプール、および論理ストレージプールにのみ必要です。libvirt によって、ソースストレージデバイスのデータ形式が選択したストレージプールの種類とは異なることが判明した場合、overwrite オプションが指定されていないと構築に失敗します。
  5. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ソースデバイスの使用を準備します。
    アクションはストレージプールの種類によって異なります。たとえば、ファイルシステムベースのストレージプールの場合、virsh pool-start コマンドがファイルシステムをマウントします。LVM ベースのストレージプールでは、virsh pool-start コマンドが vgchange コマンドを使用してボリュームグループをアクティベートします。
    その後、virsh pool-list command を使用してストレージプールがアクティブであることを確認します。
    # virsh pool-start guest_images_fs
    Pool guest_images_fs started
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      active     no

    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時ストレージプールは、作成時に自動的に起動されます。
  6. 自動起動をオンにします (任意)。

    デフォルトでは、virsh で定義されたストレージプールは、libvirtd の起動時に毎回自動的に起動されるよう設定されていません。virsh pool-autostart コマンドを使用すると、ストレージプールが自動的に起動するよう設定することができます。
    # virsh pool-autostart guest_images_fs
    Pool guest_images_fs marked as autostarted
    
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_fs      active     yes
    libvirtd の起動時に毎回ストレージプールが自動的に起動されるようになりました。
  7. ストレージプールを確認します。

    ストレージプールが正しく作成されたこと、およびサイズが予測される値で報告されていること、さらに状態が running として報告されていることを確認します。ファイルシステム上のターゲットパスに、デバイスがマウントされたことを示す「lost+found」ディレクトリーがあることを確認します。
    # virsh pool-info guest_images_fs
    Name:           guest_images_fs
    UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
    State:          running
    Persistent:     yes
    Autostart:      yes
    Capacity:       458.39 GB
    Allocation:     197.91 MB
    Available:      458.20 GB
    # mount | grep /guest_images
    /dev/sdc1 on /guest_images type ext4 (rw)
    # ls -la /guest_images
    total 24
    drwxr-xr-x.  3 root root  4096 May 31 19:47 .
    dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
    drwx------.  2 root root 16384 May 31 14:18 lost+found

13.2.2.2. 仮想マシンマネージャーでのストレージプールの作成

注記

ここでは、例としてディスクベースのストレージプールを作成します。

手順13.3 仮想マシンマネージャーでのストレージプールの作成

  1. ストレージプールが作成されるメディアを準備します。

    これは、ストレージプールの種類によって異なります。詳細は 「ストレージプール固有の情報」 を参照してください。
    この例では、GUID パーティションテーブル でディスクを再度ラベル付けする必要があることがあります。
  2. ストレージ設定を開きます。

    1. 仮想マシンマネージャーで、設定するホスト接続を選択します。
      編集 メニューを開き、接続の詳細 を選択します。
    2. 接続の詳細 ウインドウの ストレージ タブをクリックします。
      「ストレージ」タブ

      図13.1 「ストレージ」タブ

  3. 新しいストレージプールを作成します。

    注記

    仮想マシンマネージャー では永続ストレージプールのみを作成できます。一時ストレージプールは virsh を使用してのみ作成できます。
    1. 新しいストレージプールを追加します (パート 1)

      ウィンドウの下部にある ボタンをクリックします。新しいストレージプールを追加 ウィザードが表示されます。
      ストレージプールの 名前 を入力します。この例では名前として guest_images_fs を使用します。
      種類 ドロップダウンリストから作成するストレージプールの種類を選択します。この例では fs: 事前フォーマット済みブロックデバイス を使用します。
      ストレージプールの名前と種類

      図13.2 ストレージプールの名前と種類

      進む ボタンをクリックして続行します。
    2. 新規プールの追加 (パート 2)

      ストレージプールのパス

      図13.3 ストレージプールのパス

      関連するパラメーターを持つストレージプールを設定します。ストレージプールの各種類のパラメーターに関する情報は、「ストレージプール固有の情報」 を参照してください。
      ストレージプールの種類によっては プールを構築 チェックボックスがダイアログに表示されることがあります。ストレージからストレージプールを構築する場合は、プールを構築 チェックボックスにチェックマークを入れます。
      詳細を確認し、完了 ボタンをクリックしてストレージプールを作成します。

13.2.3. ストレージプール固有の情報

ここでは、前提条件、パラメーター、その他の情報など、ストレージプールの各種類に固有する情報を提供します。以下のトピックが含まれます。

13.2.3.1. ディレクトリベースのストレージプール

パラメーター
以下の表には、ディレクトリーベースのストレージプールを作成するために、XML ファイル、virsh pool-define-as コマンド、および仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.1 ディレクトリーベースのストレージプールのパラメーター

説明XMLpool-define-as仮想マシンマネージャー
ストレージプールの種類<pool type='dir'>[type] ディレクトリーdir: ファイルシステムディレクトリー
ストレージプールの名前<name>name</name>[name] name名前
ターゲットを指定するパス。これは、ストレージプールに使用されるパスになります。

<target>
  <path>target_path</path>
</target>

target path_to_poolターゲットパス
virsh を使用してストレージプールを作成している場合、プールが作成されたことを確認して続行します。
以下は、/guest_images ディレクトリーを基にしたストレージプールの XML ファイルの例になります。
<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>  
以下は、/guest_images ディレクトリーを基にしたストレージプール作成のコマンドの例になります。
# virsh pool-define-as dirpool dir --target "/guest_images"
Pool FS_directory defined
以下のイメージは、/guest_images ディレクトリーを基にしたストレージプールを作成するための 仮想マシンマネージャー の「新しいストレージプールを追加」ダイアログの例になります。
新しいディレクトリーベースのストレージプールの追加例

図13.4 新しいディレクトリーベースのストレージプールの追加例

13.2.3.2. ディスクベースのストレージプール

推奨
以下の点に注意してディスクベースのストレージプールを作成してください。
  • 使用されている libvirt のバージョンによっては、ディスクをストレージプール専用にすると、ディスクデバイスに現在保存されているすべてのデータが再フォーマットまたは消去されることがあります。ストレージデバイスのデータをバックアップしてからストレージプールを作成することが強く推奨されます。
  • ゲストにはディスクまたはブロックデバイス全体 (例: /dev/sdb) の書き込み権限を与えないでください。パーティション (例: /dev/sdb1) または LVM ボリュームを使用してください。
    ゲストにブロックデバイス全体を渡した場合、ゲストはそれにパーティションを設定するか、またはその上に独自の LVM グループを作成する可能性があります。これは、ホスト物理マシンがこれらのパーティションや LVM グループを検出し、エラーを出す原因になります。
前提条件

注記

ここの手順は、virsh pool-build コマンドを実行しない場合のみ必要になります。
ディスクのラベルを GPT (GUID パーティションテーブル) ディスクラベルに変更しないと、ディスクベースのストレージプールをホストディスク上に作成できません。GPT ディスクラベルでは、各デバイスに最大 128 個のパーティションを作成できます。
# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
New disk label type? gpt
(parted) quit
Information: You may need to update /etc/fstab.
#
ディスクのラベルを変更したら、ストレージプールを定義して ストレージプールの作成を続行します。
パラメーター
以下の表には、ディスクベースのストレージプールを作成するために、XML ファイル、virsh pool-define-as コマンド、および仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.2 ディスクベースのストレージプールのパラメーター

説明XMLpool-define-as仮想マシンマネージャー
ストレージプールの種類<pool type='disk'>[type] ディスクdisk: 物理ディスクデバイス
ストレージプールの名前<name>name</name>[name] name名前
ストレージデバイスを指定するパス (例: /dev/sdb)。

<source>
  <device path=/dev/sdb/>
<source>

source-dev path_to_diskソースパス
ターゲットを指定するパス。これは、ストレージプールに使用されるパスになります。

<target>
  <path>/path_to_pool</path>
</target>

target path_to_poolターゲットパス
virsh を使用してストレージプールを作成している場合、ストレージプールの定義 を続行します。
以下は、ディスクベースストレージプールの XML ファイルの例になります。
<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>  
以下は、ディスクベースのストレージプールを作成するコマンドの例になります。
# virsh pool-define-as phy_disk disk gpt --source-dev=/dev/sdb --target /dev
Pool phy_disk defined
以下のイメージは、ディスクベースのストレージプールを作成する、仮想マシンマネージャー の「新しいストレージプールを追加」ダイアログの仮想マシン XML 設定例になります。
新しいディスクベースのストレージプールの追加例

図13.5 新しいディスクベースのストレージプールの追加例

13.2.3.3. ファイルシステムベースのストレージプール

推奨
ディスク全体をストレージプールとして割り当てる場合は、ここの手順を使用しないでください (例: /dev/sdb)。ゲストにはディスクまたはブロックデバイス全体への書き込み権限を与えないでください。この方法はパーティション (例: /dev/sdb1) をストレージプールに割り当てるためにのみ使用してください。
前提条件

注記

これは、virsh pool-build コマンドを実行しない場合のみ必要になります。
パーティションからストレージプールを作成するには、ファイルシステムを ext4 にフォーマットします。
# mkfs.ext4 /dev/sdc1
ファイルシステムをフォーマットしたら、ストレージプールを定義して ストレージプールの作成を続行します。
パラメーター
以下の表には、ファイルシステムベースのストレージプールをパーティションから作成するために、XML ファイル、virsh pool-define-as コマンド、および仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.3 ファイルシステムベースストレージプールのパラメーター

説明XMLpool-define-as仮想マシンマネージャー
ストレージプールの種類<pool type='fs'>[type] fsfs: 事前フォーマント済みブロックデバイス
ストレージプールの名前<name>name</name>[name] name名前
パーティションを指定するパス (例: dev/sdc1)

<source>
  <device path='source_path' />

[source] path_to_partitionソースパス
ファイルシステムの種類 (例: ext4)。

  <format type='fs_type' />
</source>

[source format] FS-format該当なし
ターゲットを指定するパス。これは、ストレージプールに使用されるパスになります。

<target>
  <path>/path_to_pool</path>
</target>

[target] path_to_poolターゲットパス
virsh を使用してストレージプールを作成している場合、ストレージプールが作成されたことを確認して続行します。
以下は、ファイルシステムベースストレージプールの XML ファイルの例になります。
<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>  
以下は、パーティションベースのストレージプールを作成するコマンドの例になります。
# virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images
Pool guest_images_fs defined
以下のイメージは、ファイルシステムベースのストレージプールを作成する、仮想マシンマネージャー の「新しいストレージプールを追加」ダイアログの仮想マシン XML 設定例になります。
新しいファイルシステムベースのストレージプールの追加例

図13.6 新しいファイルシステムベースのストレージプールの追加例

13.2.3.4. GlusterFS ベースのストレージプール

推奨
GlusterFS は、File System in Userspace (FUSE) を使用する user space ファイルシステムです。
前提条件
GlusterFS ベースのストレージプールをホスト上に作成できるようにするには、最初に Gluster サーバーを準備する必要があります。

手順13.4 Gluster サーバーの準備

  1. 次のコマンドを使って、状態を一覧表示し、Gluster サーバーの IP アドレスを取得します。
    # gluster volume status
    Status of volume: gluster-vol1
    Gluster process						Port	Online	Pid
    ------------------------------------------------------------------------------
    Brick 222.111.222.111:/gluster-vol1 			49155	Y	18634
    
    Task Status of Volume gluster-vol1
    ------------------------------------------------------------------------------
    There are no active volume tasks
  2. glusterfs-fuse パッケージがインストールされていない場合はインストールします。
  3. virt_use_fusefs ブール値が有効になっていない場合は有効にします。有効になっているか確認してください。
    # setsebool virt_use_fusefs on
    # getsebool virt_use_fusefs
    virt_use_fusefs --> on
必要なパッケージがインストールされ、有効になっていることを確認したら、ストレージプールを定義 して、引き続きストレージプールの作成を行います。
パラメーター
以下の表には、GlusterFS ベースのストレージプールを作成するために、XML ファイル、virsh pool-define-as コマンド、および 仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.4 GlusterFS ベースのストレージプールのパラメーター

説明XMLpool-define-as仮想マシンマネージャー
ストレージプールの種類<pool type='gluster'>[type] glusterGluster: Gluster ファイルシステム
ストレージプールの名前<name>name</name>[name] name名前
Gluster サーバーのホスト名または IP アドレス

<source>
  <hostname='hostname' />

source-host hostnameホスト名
Gluster サーバーの名前  <name='Gluster-name' />source-name Gluster-nameソース名
ストレージプールに使用される Gluster サーバーのパス。

  <dir path='Gluster-path' />
</source>

source-path Gluster-pathソースパス
virsh を使用してストレージプールを作成している場合、ストレージプールが作成されたことを確認して続行します。
以下は、GlusterFS ベースストレージプールの XML ファイルの例になります。
<pool type='gluster'>
  <name>Gluster_pool</name>
  <source>
    <host name='111.222.111.222'/>
    <dir path='/'/>
    <name>gluster-vol1</name>
  </source>
</pool>  
以下は、GlusterFS ベースのストレージプールを作成するコマンドの例になります。
# pool-define-as --name Gluster_pool --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /
Pool Gluster_pool defined
以下のイメージは、Gluster ベースのストレージプールを作成する、仮想マシンマネージャー の「新しいストレージプールを追加」ダイアログの仮想マシン XML 設定例になります。
新しい GlusterFS ベースのストレージプールの追加例

図13.7 新しい GlusterFS ベースのストレージプールの追加例

13.2.3.5. iSCSI ベースのストレージプール

推奨
iSCSI (Internet Small Computer System Interface) とは、ストレージデバイスを共有するためのネットワークプロトコルです。iSCSI では、IP 層全体での SCSI の指示を使用してイニシエーター (ストレージクライアント) をターゲット (ストレージサーバー) に接続します。
iSCSI ベースのデバイスを使用してゲスト仮想マシンを格納すると、ブロックストレージデバイスとして iSCSI を使用するなど、より柔軟にストレージを使用することができます。iSCSI デバイスは、Linux のマルチプロトコル SCSI ターゲットである Linux-IO (LIO) ターゲットを使用します。iSCSI のほかにも、LIO はファイバーチャネルおよびファイバーチャネルオーバーイーサネット (FCoE: Fibre Channel over Ethernet) もサポートします。
前提条件
iSCSI ベースのストレージプールを作成できるようにするには、最初に iSCSI ターゲットを作成する必要があります。iSCSI ターゲットは targetcli パッケージを使用して作成されます。このパッケージは、ソフトウェアベースの iSCSI ターゲットを作成するためのコマンドセットを提供します。

手順13.5 iSCSI ターゲットの作成

  1. targetcli パッケージのインストール

    # yum install targetcli
  2. targetcli コマンドセットを起動します。

    # targetcli
  3. ストレージオブジェクトの作成

    ストレージプールを使用して、3 つのストレージオブジェクトを作成します。
    1. ブロックストレージオブジェクトの作成
      1. /backstores/block ディレクトリーに移動します。
      2. create コマンドを実行します。
        # create [block-name][filepath]
        例を以下に示します。
        # create block1 dev=/dev/sdb1
    2. fileio オブジェクトの作成
      1. /fileio ディレクトリーに移動します。
      2. create コマンドを実行します。
        # create [fileio-name][image-name] [image-size]
        例を以下に示します。
        # create fileio1 /foo.img 50M
    3. ram ディスクオブジェクトの作成
      1. /ramdisk ディレクトリーに移動します。
      2. create コマンドを実行します。
        # create [ramdisk-name] [ramdisk-size]
        例を以下に示します。
        # create ramdisk1 1M
    4. ここで作成するディスクの名前を書き留めておきます。これは後ほど使用します。
  4. iSCSI ターゲットの作成

    1. /iscsi ディレクトリーに移動します。
    2. ターゲットを以下の 2 つの方法のいずれかで作成します。
      • パラメーターを使用せずに create コマンドを実行します。
        iSCSI 修飾名 (IQN) が自動的に生成されます。
      • 以下の例のように、IQN とサーバーを指定して create コマンドを実行します。
        # create iqn.2010-05.com.example.server1:iscsirhel7guest
  5. ポータル IP アドレスの定義

    iSCSI 上でブロックストレージをエクスポートするには、最初にポータル、LUN、および アクセス制御リスト ACL を設定する必要があります。
    ポータルには、ターゲットが監視する IP アドレスおよび TCPと、ポータルが接続するイニシエーターが含まれます。iSCSI は 3260 番ポートを使用します。このポートはデフォルトで設定されています。
    3260 番ポートに接続するには、以下を行います。
    1. /tpg ディレクトリーに移動します。
    2. 次のコマンドを実行します。
      # portals/ create
      このコマンドは、利用可能な IP アドレスがすべて 3260 番ポートをリッスンするようにします。
      1 つの IP アドレスのみが 3260 番ポートをリッスンするようにするには、以下の例のように IP アドレスをコマンドの最後に追加します。
      # portals/ create 143.22.16.33
  6. LUN を設定し、ストレージオブジェクトをファブリックに割り当てます。

    このステップでは、「ストレージオブジェクトの作成」で作成したストレージオブジェクトを使用します。
    1. 以下の例のように、「ポータル IP アドレスの定義」で作成した TPG の luns ディレクトリーに移動します。
      # iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest
    2. 以下の例のように、最初の LUN ram ディスクに割り当てます。
      # create /backstores/ramdisk/ramdisk1
    3. 以下の例のように、2 番目の LUN をブロックディスクに割り当てます。
      # create /backstores/block/block1
    4. 以下の例のように、3 番目の LUN を fileio ディスクに割り当てます。
      # create /backstores/fileio/fileio1
    5. 結果の LUN を一覧表示します。
      /iscsi/iqn.20...csirhel7guest ls
      
      o- tgp1 ............................................................[enabled, auth]
        o- acls...................................................................[0 ACL]
        o- luns..................................................................[3 LUNs]
        | o- lun0......................................................[ramdisk/ramdisk1]
        | o- lun1...............................................[block/block1 (dev/vdb1)]
        | o- lun2................................................[fileio/file1 (foo.img)]
        o- portals.............................................................[1 Portal]
          o- IP-ADDRESS:3260.........................................................[OK]
  7. 各イニシエーターに ACL を作成

    イニシエーターの接続時に認証を有効にします。指定の LUN を指定のイニシエーターに制限することもできます。ターゲットとイニシエーターの名前は一意です。iSCSI イニシエーターは IQN を使用します。
    1. 以下の例のように、イニシエーター名を使用して iSCSI イニシエーターの IQN を検索します。
      # cat /etc/iscsi/initiator2.iscsi
      InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest
      この IQN は、ACL の作成に使用されます。
    2. acls ディレクトリーに移動します。
    3. 以下のいずれかを実行して ACL を作成します。
      • パラメーターを使用せずに create コマンドを実行して、すべての LUN およびイニシエーターに対して ACL を作成します。
        # create
      • 特定の LUN およびイニシエーターに対して ACL を作成するには、以下のように iSCSI イニシエーターの IQN を指定して create コマンドを実行します。
        # create iqn.2010-05.com.example.server1:888
      • すべてのイニシエーターに 1 つのユーザー ID とパスワードを使用するよう、カーネルターゲットを設定します。
        # set auth userid=user_ID
        # set auth password=password
        # set attribute authentication=1
        # set attribute generate_node_acls=1
    この手順を完了した後、ストレージプールをセキュア化して作業を続けます。
  8. 設定の保存

    以前のブート設定を上書きして、設定を永続化します。
    # saveconfig
  9. サービスの有効化

    保存した設定を次回のブート時に適用するには、サービスを有効にします。
    # systemctl enable target.service
任意の手順
iSCSI ベースのストレージプールを作成する前に、iSCSI ターゲットを使用して実行できる任意の手順が複数あります。

手順13.6 RAID アレイ上の論理ボリュームの設定

  1. RAID5 アレイの作成

    RAID5 アレイの作成に関する情報は、『Red Hat Enterprise Linux 7 ストレージ管理ガイド』を参照してください。
  2. RAID5 アレイ上の LVM 論理ボリュームの作成

    RAID 5 アレイ上での LVM 論理ボリュームの作成に関する詳細は、『Red Hat Enterprise Linux 7 論理ボリュームマネージャーの管理』を参照してください。

手順13.7 検出可能性のテスト

  • 新規の iSCSI デバイスが検出可能であるかを確認します。

    # iscsiadm --mode discovery --type sendtargets --portal server1.example.com
    143.22.16.33:3260,1 iqn.2010-05.com.example.server1:iscsirhel7guest

手順13.8 デバイス割り当てのテスト

  1. 新規 iSCSI デバイスの割り当て

    新規デバイス (iqn.2010-05.com.example.server1:iscsirhel7guest) を割り当て、デバイスが割り当て可能であるかどうかを判別します。
    # iscsiadm -d2 -m node --login
    scsiadm: Max file limits 1024 1024
    
    Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260]
    Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.
  2. デバイスの接続を解除します。

    # iscsiadm -d2 -m node --logout
    scsiadm: Max file limits 1024 1024
    
    Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260
    Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.

手順13.9 iSCSI ストレージプールの libvert シークレットの使用

注記

この手順は、iSCSI ターゲットの作成時に user_ID および password が定義された場合に必要となります。
virsh を使ってユーザー名およびパスワードパラメーターを設定することにより、iSCSI ストレージプールのセキュリティーを保護することができます。これは、プールを定義する前後に設定できますが、認証設定を有効にするには、プールが起動している必要があります。
  1. libvirt シークレットファイルを作成します。

    以下の例のように、チャレンジハンドシェイク認証プロトコル (CHAP) のユーザー名を使用して libvirt シークレットファイルを作成します。
    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>    
  2. シークレットの定義

    # virsh secret-define secret.xml
  3. UUID の検証

    # virsh secret-list
    UUID                                  Usage
    --------------------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. シークレットの UID への割り当て

    以下のコマンドを使用して、以前の手順の出力にある UUID にシークレットを割り当てます。これにより、CHAP ユーザー名およびパスワードが libvirt によって制御されるシークレットリストに確実に記載されるようにします。
    # MYSECRET=`printf %s "password123" | base64`
    # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
  5. 認証エントリーをストレージプールに追加します。

    virsh edit を使用してストレージプールの XML ファイルの <source> エントリーを変更し、authentication typeusername、および secret usage を指定して <auth> 要素を追加します。
    例を以下に示します。
    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>     

    注記

    <auth> サブ要素は、ゲスト XML の <pool> および <disk> 要素内の複数の異なる場所に存在します。<pool> の場合、<auth> は、認証が一部のプールソース (iSCSI および RBD) のプロパティーであり、プールソースの検索方法を記述しているため、<source> 要素内に指定されます。ドメインのサブ要素である <disk> の場合、iSCSI または RBD ディスクへの認証はディスクのプロパティーになります。
    さらに、ディスクの <auth> サブ要素はストレージプールのものとは異なります。
    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>  
  6. 変更のアクティブ化

    以下の変更をアクティブにするには、ストレージプールを起動している必要があります。
    • ストレージプールをまだ起動していない場合は、「virsh でのストレージプールの作成」の手順にしたがってストレージプールを定義および起動します。
    • プールがすでに起動している場合は、以下のコマンドを実行してストレージプールを停止し、再起動します。
      # virsh pool-destroy iscsirhel7pool
      # virsh pool-start iscsirhel7pool
パラメーター
以下の表には、iSCSI ベースのストレージプールを作成するために、XML ファイル、virsh pool-define-as コマンド、および仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.5 iSCSI ベースのストレージプールのパラメーター

説明XMLpool-define-as仮想マシンマネージャー
ストレージプールの種類<pool type='iscsi'>[type] iscsiiscsi: iSCSI Target
ストレージプールの名前<name>name</name>[name] name名前
ホストの名前

<source>
  <host name='hostname' />

source-host hostnameホスト名
iSCSI の IQN。

  device path="iSCSI_IQN" />
</source>

source-dev iSCSI_IQNソース IQN
ターゲットを指定するパス。これは、ストレージプールに使用されるパスになります。

<target>
  <path>/dev/disk/by-path</path>
</target>

target path_to_poolターゲットパス
(任意) iSCSI イニシエーターの IQN。ACL が特定のイニシエーターへの LUN を制限する場合のみ必要です。

<initiator>
  <iqn name='initiator0' />
</initiator>

以下の注記を参照してください。イニシエーター IQN

注記

iSCSI イニシエーターの IQN を判断するには、virsh find-storage-pool-sources-as iscsi コマンドを使用します。
virsh を使用してストレージプールを作成している場合、ストレージプールが作成されたことを確認して続行します。
以下は、iSCSI ベースストレージプールの XML ファイルの例になります。
<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
  
以下は、iSCSI ベースのストレージプールを作成するコマンドの例になります。
# virsh pool-define-as --name iSCSI_pool --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
Pool iSCSI_pool defined
以下のイメージは、iSCSI ベースのストレージプールを作成する、仮想マシンマネージャー の「新しいストレージプールを追加」ダイアログの仮想マシン XML 設定例になります。
新しい iSCSI ベースストレージプールの追加例

図13.8 新しい iSCSI ベースストレージプールの追加例

13.2.3.6. LVM ベースのストレージプール

推奨
以下の点に注意して LVM ベースのストレージプールを作成してください。
  • LVM ベースのストレージプールは LVM の完全な柔軟性を提供しません。
  • libvirt はシン論理ボリュームをサポートしますが、シンストレージプールの機能は提供しません。
  • LVM ベースのストレージプールはボリュームグループです。論理ボリュームマネージャーのコマンドまたは virsh コマンドを使用するとボリュームグループを作成できます。virsh インターフェースを使用してボリュームグループを管理するには、virsh コマンドを使用してボリュームグループを作成します。
    ボリュームグループに関する詳細は、Red Hat Enterprise Linux 7 論理ボリュームマネージャーの管理を参照してください。
  • LVM ベースのストレージプールは全面的なディスクパーティションを必要とします。この手順を使用して新しいパーティションおよびデバイスをアクティブ化する場合、パーティションはフォーマットされ、すべてのデータは消去されます。ホストの既存ボリュームグループ (VG) を使用する場合は、いずれのデータも消去されません。以下の手順を開始する前に、ストレージデバイスのバックアップを取っておくことが推奨されます。
    LVM ボリュームグループ作成の詳細については、Red Hat Enterprise Linux 7 論理ボリュームマネージャーの管理を参照してください。
  • 既存の VG 上に LVM ベースのストレージプールを作成する場合、pool-build コマンドを実行しないでください。
VG が準備されたことを確認したら、ストレージプールを定義 してストレージプールの作成を続行します。
パラメーター
以下の表には、LVM ベースのストレージプールを作成するために、XML ファイル、virsh pool-define-as コマンド、および仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.6 LVM ベースのストレージプールのパラメーター

説明XMLpool-define-as仮想マシンマネージャー
ストレージプールの種類<pool type='logical'>[type] logicallogical: LVM Volume Group
ストレージプールの名前<name>name</name>[name] name名前
ストレージプールのデバイスへのパス

<source>
  <device path='device_path' />

source-dev device_pathソースパス
ボリュームグループの名前  <name='VG-name' />source-name VG-nameソースパス
仮想グループの形式

  <format type='lvm2' />
</source>

source-format lvm2該当なし
ターゲットパス

<target>
  <path='target-path' />
</target>

target target-pathターゲットパス

注記

論理ボリュームグループが複数のディスクパーティションで構成されている場合、複数のソースデバイスが表示されることがあります。例を以下に示します。
<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
  </source> 
virsh を使用してストレージプールを作成している場合、ストレージプールが作成されたことを確認して続行します。
以下は、LVM ベースのストレージプールの XML ファイルの例になります。
<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>  
以下は、LVM ベースのストレージプールを作成するコマンドの例になります。
# virsh pool-define-as guest_images_lvm logical --source-dev=/dev/sdc --source-name libvirt_lvm --target /dev/libvirt_lvm
Pool guest_images_lvm defined
以下のイメージは、LVM ベースのストレージプールを作成する、仮想マシンマネージャー の「新しいストレージプールを追加」ダイアログの仮想マシン XML 設定例になります。
新しい LVM ベースのストレージプールの追加例

図13.9 新しい LVM ベースのストレージプールの追加例

13.2.3.7. NFS ベースのストレージプール

前提条件
ネットワークファイルシステム (NFS) ベースのストレージプールを作成するには、ホストマシンが使用できるよう NFS サーバーが準備済みである必要があります。NFS に関する詳細は、『Red Hat Enterprise Linux ストレージ管理ガイド』を参照してください。
NFS サーバーが適切に設定されていることを確認したら、ストレージプールを定義 してストレージプールの作成を続行します。
パラメーター
以下の表には、NFS ベースのストレージプールを作成するために、XML ファイル、virsh pool-define-as コマンド、および仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.7 NFS ベースのストレージプールのパラメーター

説明XMLpool-define-as仮想マシンマネージャー
ストレージプールの種類<pool type='netfs'>[type] netfsnetfs: Network Exported Directory
ストレージプールの名前<name>name</name>[name] name名前
マウントポイントがある NFS サーバーのホスト名。ホスト名または IP アドレスを指定できます。

<source>
  <host name='host_name' />

source-host host_nameホスト名
NFS サーバーで使用されるディレクトリー

  <dir path='source_path' />
</source>

source-path source_pathソースパス
ターゲットを指定するパス。これは、ストレージプールに使用されるパスになります。

<target>
  <path>/target_path</path>
</target>

target target_pathターゲットパス
virsh を使用してストレージプールを作成している場合、ストレージプールが作成されたことを確認して続行します。
以下は、NFS ベースストレージプールの XML ファイルの例になります。
<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='localhost'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>  
以下は、NFS ベースのストレージプールを作成するコマンドの例になります。
# virsh pool-define-as nfspool netfs --source-host localhost --source-path /home/net_mount --target /var/lib/libvirt/images/nfspool
Pool nfspool defined
以下のイメージは、NFS ベースのストレージプールを作成する、仮想マシンマネージャー の「新しいストレージプールを追加」ダイアログの仮想マシン XML 設定例になります。
新しい NFS ベースのストレージプールの追加例

図13.10 新しい NFS ベースのストレージプールの追加例

13.2.3.8. SCSI デバイスを使用した vHBA ベースのストレージプール

注記

SCSI デバイスを使用した vHBA ベースのストレージプールの作成に 仮想マシンマネージャー を使用することはできません。
推奨
N_Port ID 仮想化 (NPIV) は、1 つの物理ファイバーチャネルのホストバスアダプター (HBA) を共有できるようにするソフトウェア技術です。これにより、複数のゲストから複数物理ホストの同一ストレージを確認することが可能になり、ストレージの移行パスが容易になります。このため、適切なストレージパスが指定されていれば、移行でストレージを作成したりコピーしたりする必要がありません。
仮想化では、仮想ホストバスアダプター (vHBA) が仮想マシンの LUN (Logical Unit Number: 論理ユニット番号) を制御します。ホストが複数 KVM ゲスト間で 1 つのファイバーチャネルを共有するには、各仮想マシンに vHBA が作成される必要があります。単一の vHBA を複数の KVM ゲストで使用することはできません。
NPIV の各 vHBA は、その親 HBA および独自の World Wide Node Name (WWNN) と World Wide Port Name (WWPN) で識別されます。ストレージへのパスは、WWNN と WWPN の値で決定されます。親 HBA は、scsi_host# または WWNN/WWPN ペアで定義することができます。

注記

親 HBA を scsi_host# で定義しハードウェアがホストマシンに追加されると、scsi_host# の割り付けが変更される場合があります。したがって、親 HBA は WWNN/WWPN ペアを使って定義することが推奨されます。
vHBA 設定が保持されるため、vHBA を基にして libvirt ストレージプールを定義することが推奨されます。
libvirt ストレージプールを使用することには 2 つの主な利点があります。
  • libvirt コードにより、virsh コマンド出力から LUN のパスを簡単に特定できます。
  • 仮想マシンの移行には、ターゲットマシン上に同じ vHBA 名を持つストレージプールを定義し、起動することのみが必要になります。これを実行するには、vHBA LUN、libvirt ストレージプール、およびボリューム名を仮想マシンの XML 設定に指定する必要があります。例については、「SCSI デバイスを使用した vHBA ベースのストレージプール」 を参照してください。

注記

vHBA を作成する前に、ホスト LUN のストレージアレイ (SAN) 側のゾーン機能を設定してゲスト間を分離し、データが損傷する可能性を防ぐことをお勧めします。
vHBA の永続的な設定を作成するには、まず以下の形式を使用して libvirt 'scsi' ストレージプール XML ファイルを作成します。同一の物理 HBA 上のストレージプールを使用する単一の vHBA を作成する場合は、システム上の /dev/disk/by-{path|id|uuid|label} の場所のいずれかにするなど、<path> 値の安定した場所を使用することをお勧めします。
同一の物理 HBA 上のストレージプールを使用する複数の vHBA を使用する場合、<path> フィールドの値は /dev/ にしなければなりません。そうでないと、ストレージプールボリュームは vHBA のいずれかのみに表示され、ホストのデバイスを NPIV 設定で複数ゲストに表示することができなくなります。
<path> の詳細および <target> の要素については、アップストリームの libvirt ドキュメント を参照してください。
前提条件
SCSI デバイスで vHBA ベースのストレージプールを作成する前に、vHBA を 作成します。

手順13.10 vHBA の作成

  1. ホストシステム上で HBA を見つけます。

    ホストシステム上で HBA を見つけるには、virsh nodedev-list --cap vports コマンドを使用します。
    次の例は、vHBA をサポートする 2 つの HBA を持つホストを示しています。
    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
  2. HBA の詳細を確認します。

    virsh nodedev-dumpxml HBA_device コマンドを使って HBA の詳細を確認します。
    # virsh nodedev-dumpxml scsi_host3
    コマンドからの XML 出力には、<name><wwnn>、および <wwpn> フィールドの一覧が表示されます。これらのフィールドは vHBA を作成するために使用されます。<max_vports> 値は、サポートされる vHBA の最大数を示します。例を以下に示します。
    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>   
    この例では、<max_vports> 値は HBA 設定で使用できる 127 の仮想ポートがあることを示しています。<vports> 値は、現在使用中の仮想ポートの数を示します。これらの値は、vHBA 作成後に更新されます。
  3. vHBA ホストデバイスを作成します。

    vHBA ホスト用に以下のどちらかのような XML ファイルを作成します (この例では、ファイル名は vhba_host3.xml です)。
    この例では、親 vHBA を定義するのに scsi_host3 が使われています。
    # cat vhba_host3.xml
    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>   
    この例では、親 vHBA を定義するのに WWNN/WWPN ペアが使われています。
    # cat vhba_host3.xml
    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>   

    注記

    WWNN と WWPN の値は、手順13.10「vHBA の作成」 で確認した HBA 詳細の値と一致している必要があります。
    <parent> フィールドでは、この vHBA デバイスに関連付ける HBA デバイスを指定します。<device> タグ内の詳細は、ホスト用に新規の vHBA デバイスを作成するために次のステップで使用します。nodedev XML 形式についての詳細は、libvirt アップストリームページ を参照してください。
  4. vHBA ホストデバイス上で新規 vHBA を作成します。

    vhba_host3 をベースにして vHBA を作成するには、virsh nodedev-create コマンドを使用します。
    # virsh nodedev-create vhba_host3.xml
    Node device scsi_host5 created from vhba_host3.xml
  5. vHBA を確認します。

    新規 vHBA (scsi_host5) の詳細を virsh nodedev-dumpxml コマンドで確認します。
    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>  
vHBA を検証した後、ストレージプールを定義 してストレージプールの作成を続行します。
パラメーター
以下の表には、vHBA ベースのストレージプールを作成するために、XML ファイル、virsh pool-define-as コマンド、および 仮想マシンマネージャー アプリケーションに必要なパラメーターの一覧が記載されています。

表13.8 vHBA ベースのストレージプールのパラメーター

説明XMLpool-define-as
ストレージプールの種類<pool type='scsi'>scsi
ストレージプールの名前<name>name</name>--adapter-name name
vHBA の識別子。parent 属性は任意です。

<source>
  <adapter type='fc_host'
  [parent=parent_scsi_device]
  wwnn='WWNN'
  wwpn='WWPN' />
</source>

[--adapter-parent parent]
--adapter-wwnn wwnn
--adapter-wpnn wwpn

ターゲットを指定するパス。これは、ストレージプールに使用されるパスになります。

<target>
  <path>target_path</path>
</target>

target path_to_pool

重要

<path> フィールドが /dev/ の場合、libvirt はボリュームデバイスパスの一意な短いデバイスパスを生成します (例: /dev/sdc)。そうでない場合は、物理ホストパスが使用されます (例: /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0)。一意な短いデバイスパスを使用すると、同じボリュームが複数のストレージプールによって複数のゲストに一覧表示されます。物理ホストパスが複数のゲストによって使用される場合は、デバイスの種類の重複に関する警告が発生する可能性があります。

注記

parent 属性を <adapter> フィールドで使用すると、物理 HBA の親を特定できます。そこからさまざまなパスで NPIV LUN を使用することができます。このフィールド scsi_hostNvports および max_vports 属性と組み合わされ、親の識別を完了します。parentparent_wwnnparent_wwpn、または parent_fabric_wwn 属性は、ホストの再起動後に同じ HBA が使用されることをさまざまな程度で保証します。
  • parent の指定がない場合は、libvirt は NPIV をサポートする最初の scsi_hostN アダプターを使用します。
  • parent のみが指定されていると、設定に追加の SCSI ホストアダプターが追加すると問題が発生することがあります。
  • parent_wwnn または parent_wwpn が指定されている場合、ホストの再起動後に同じ HBA が使用されます。
  • parent_fabric_wwn が使用された場合、使用された scsi_hostN に関係なく、ホストの再起動後に同じファブリックの HBA が選択されます。
virsh を使用してストレージプールを作成している場合、ストレージプールが作成されたことを確認して続行します。
以下は、vHBA ベースのストレージプールの XML ファイルの例になります。最初の例は、HBA で唯一のストレージプールを示しています。2 番目の例は、単一の vHBA を使用する複数のストレージプールの 1 つで、parent 属性を使用して SCSI ホストデバイスを識別するストレージプールを示しています。
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool> 
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>  
以下は、vHBA ベースのストレージプールを作成するコマンドの例になります。
# virsh pool-define-as vhbapool_host3 scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/by-path
Pool vhbapool_host3 defined

注記

virsh コマンドは、parent_wwnnparent_wwpn、および parent_fabric_wwn を定義する方法を提供しません。
仮想マシンが vHBA LUN を使用するよう設定
vHBA のストレージプールを作成した後、vHBA LUN を仮想マシンの設定に追加する必要があります。
  1. 仮想マシンの XML に仮想マシンのディスクボリュームを作成します。
  2. <source> パラメーターで storage pool および storage volume を指定します。
例を以下に示します。
<disk type='volume' device='disk'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0'/>
  <target dev='hda' bus='ide'/>
</disk>    
disk ではなく lun デバイスを指定するには、以下の例を参照してください。
<disk type='volume' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0' mode='host'/>
  <target dev='sda' bus='scsi'/>
  <shareable />
</disk>
SCSI LUN ベースのストレージをゲストに追加する際の XML 設定のサンプルについては、「SCSI LUN ベースのストレージのゲストへの追加」を参照してください。
ハードウェア故障の際に LUN への再接続を確実にするには、fast_io_fail_tmo および dev_loss_tmo オプションを編集することが推奨されます。詳細については、「ハードウェア故障後に公開されている LUN に再接続」を参照してください。

13.2.4. ストレージプールの削除

virsh コマンドまたは 仮想マシンマネージャー を使用するとストレージプールを削除できます。

13.2.4.1. ストレージプールを削除するための前提条件

削除するストレージプールを使用するその他のゲスト仮想マシンへの影響を避けるため、ストレージプールを停止し、そのストレージプールが使用するリソースを解放することが推奨されます。

13.2.4.2. virsh を使用したストレージプールの削除

  1. 定義したストレージプールを一覧で表示します。
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_pool    active     yes
  2. 削除するストレージプールを停止します。
    # virsh pool-destroy guest_images_disk
  3. (任意): ストレージプールのタイプによっては、ストレージプールがあるディレクトリーを任意で削除することができます。
    # virsh pool-delete guest_images_disk
  4. ストレージプールの定義を削除します。
    # virsh pool-undefine guest_images_disk
  5. プールが定義されていないことを確認します。
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    

13.2.4.3. 仮想マシンマネージャーを使用したストレージプールの削除

  1. 「接続の詳細」ウインドウ の「ストレージタブ」にあるストレージプールリストで、削除するストレージプールを選択します。
  2. 「ストレージ」ウィンドウの下部にある をクリックします。これにより、ストレージプールが停止され、ストレージプールによって使用されているリソースが解放されます。
  3. をクリックします。

    注記

    ストレージプールが停止した場合のみ アイコンが有効になります。
    ストレージプールが削除されます。