13.3. ストレージボリュームの使用

ここでは、ストレージボリュームの使用に関して説明します。概念的な情報の他に、virsh コマンドや 仮想マシンマネージャー を使用したストレージボリュームの作成、設定、および削除手順を詳しく説明します。

13.3.1. ストレージボリュームの概念

ストレージプールは ストレージボリューム に分割されます。ストレージボリュームは、物理パーティション、LVM 論理ボリューム、ファイルベースのディスクイメージ、および libvirt が対処するその他のストレージタイプを抽象化したものです。ストレージボリュームは、基盤のハードウェアに関係なく、ローカルストレージデバイスとしてゲスト仮想マシンに提供されます。

注記

ここでは、ストレージボリューの管理用に virsh が提供する可能なコマンドや引数をすべて取り上げるわけではありません。詳細は 「ストレージボリュームコマンド」 を参照してください。
ホストマシンでは、ストレージボリュームは名前と派生するストレージプールの識別子で参照されます。virsh コマンドラインでは、--pool storage_pool volume_name の形式を取ります。
たとえば、名前が firstimage というボリュームが guest_images プールにあるとします。
# virsh vol-info --pool guest_images firstimage
  Name:           firstimage
  Type:           block
  Capacity:       20.00 GB
  Allocation:     20.00 GB
追加のパラメーターおよび引数については、「ボリューム情報の一覧表示」を参照してくだい。

13.3.2. ストレージボリュームの作成

ここでは、virsh および 仮想マシンマネージャー を使用してストレージプールからストレージボリュームを作成する一般的な手順を説明します。ストレージボリュームの作成後、ストレージデバイスをゲストに追加することができます。

13.3.2.1. virsh を使用したストレージボリュームの作成

次のいずれかを行います。
  • XML ファイルを使用してストレージボリュームを定義します。
    a. 新規デバイスに必要となるストレージボリューム情報が含まれる一時 XML ファイルを作成します。
    XML ファイルには、以下を含む特定のフィールドが含まれている必要があります。
    • name: ストレージボリュームの名前。
    • allocation: ストレージボリュームのストレージ割り当ての合計。
    • capacity: ストレージボリュームの論理容量。ボリュームがスパースである場合、ボリュームが allocation の値とは異なることがあります。
    • target: ホストシステム上のストレージボリュームへのパス。任意でそのパーミッションとラベルが含まれます。
    以下はストレージボリューム定義の XML ファイルの例になります。この例では、ファイルは ~/guest_volume.xml に保存されます。
      <volume>
        <name>volume1</name>
        <allocation>0</allocation>
        <capacity>20G</capacity>
        <target>
          <path>/var/lib/virt/images/sparse.img</path>
        </target>
      </volume> 
    b. virsh vol-create コマンドを使用し、XML ファイルを基にしてストレージボリュームを作成します。
    # virsh vol-create guest_images_dir ~/guest_volume.xml
      Vol volume1 created
    c. a. で作成した XML ファイルを削除します。
  • virsh vol-create-as コマンドを使用して、ストレージボリュームを作成します。
    # virsh vol-create-as guest_images_dir volume1 20GB --allocation 0
  • virsh vol-clone コマンドを使用して既存のストレージボリュームをクローンします。virsh vol-clone コマンドには、クローンするストレージボリュームが含まれるストレージプールと、新たに作成されたストレージボリュームの名前を指定する必要があります。
    # virsh vol-clone --pool guest_images_dir volume1 clone1

13.3.2.2. 仮想マシンマネージャーでのストレージボリュームの作成

手順13.11 仮想マシンマネージャーでのストレージボリュームの作成

  1. ストレージ設定を開きます。

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

      図13.11 「ストレージ」タブ

      接続の詳細 ウインドウの左側のペインにストレージプールの一覧が表示されます。
  2. ストレージボリュームを作成するストレージプールの選択

    ストレージプールの一覧で、ストレージボリュームを作成するストレージプールをクリックします。
    選択したストレージプールに設定されたストレージボリュームは、ウインドウの下部にある ボリューム ペインに表示されます。
  3. 新しいストレージボリュームの追加

    ボリューム リストの上にある ボタンをクリックします。ストレージボリュームを追加 ダイアログが表示されます。
    ストレージボリュームの作成

    図13.12 ストレージボリュームの作成

  4. ストレージボリュームの設定

    以下のパラメーターでストレージボリュームを設定します。
    • 名前 フィールドにストレージプールの名前を入力します。
    • フォーマット リストでストレージボリュームの形式を選択します。
    • 最大容量 フィールドにストレージボリュームの最大サイズを入力します。
  5. 作成の終了

    完了 をクリックします。ストレージボリュームを追加 ダイアログが閉じられ、ストレージボリュームが ボリューム リストに表示されます。

13.3.3. ストレージボリュームの表示

ストレージプールから複数のストレージボリュームを作成できます。virsh vol-list コマンドを使用してストレージプールのストレージボリュームを一覧表示することもできます。以下の例では、guest_images_disk に 3 つのボリュームが含まれています。
virsh vol-create-as guest_images_disk volume1 8G
Vol volume1 created

# virsh vol-create-as guest_images_disk volume2 8G
Vol volume2 created

# virsh vol-create-as guest_images_disk volume3 8G
Vol volume3 created

# virsh vol-list guest_images_disk
Name                 Path
-----------------------------------------
volume1              /home/VirtualMachines/guest_images_dir/volume1
volume2              /home/VirtualMachines/guest_images_dir/volume2
volume3              /home/VirtualMachines/guest_images_dir/volume3

13.3.4. データの管理

ここでは、ストレージボリュームでのデータの管理について説明します。

注記

ストレージボリュームのタイプによっては、すべてのデータ管理コマンドをサポートしないものがあります。特定の情報については、以下のセクションを参照してください。

13.3.4.1. ストレージボリュームのワイプ

ストレージボリュームのデータへアクセスできないようにするには、virsh vol-wipe コマンドを使用してストレージボリュームをワイプします。
virsh vol-wipe コマンドを使用してストレージボリュームをワイプします。
# virsh vol-wipe new-vol vdisk
デフォルトでは、データはゼロで上書きされます。しかし、ストレージボリュームのワイプでは指定できる方法が複数あります。virsh vol-wipe コマンドのすべてのオプションに関する詳細は、「ストレージボリュームの内容の削除」 を参照してください。

13.3.4.2. ストレージボリュームへのデータのアップロード

virsh vol-upload コマンドを使用するとデータを指定のローカルファイルからストレージボリュームにアップロードすることができます。
# virsh vol-upload --pool pool-or-uuid --offset bytes --length bytes vol-name-or-key-or-path local-file
主な virsh vol-upload のオプションは次のとおりです。
  • --pool pool-or-uuid: ボリュームが存在するストレージプールの名前または UUID。
  • vol-name-or-key-or-path : アップロードするボリュームの名前、キー、またはパス。
  • --offset bytes: データの書き込みを開始するストレージボリュームの位置。
  • --length length: アップロードするデータの容量の上限。

    注記

    local-file が指定の --length よりも大きいとエラーが発生します。

例13.1 ストレージボリュームへのデータのアップロード

# virsh vol-upload sde1 /tmp/data500m.empty disk-pool
この例では、sde1disk-pool のボリュームになります。/tmp/data500m.empty のデータは sde1 にコピーされます。

13.3.4.3. ストレージボリュームへのデータのダウンロード

virsh vol-upload コマンドを使用するとデータをストレージボリュームから指定のローカルファイルにダウンロードすることができます。
# vol-download --pool pool-or-uuid --offset bytes --length bytes vol-name-or-key-or-path local-file
主な virsh vol-download のオプションは次のとおりです。
  • --pool pool-or-uuid: ボリュームが存在するストレージプールの名前または UUID。
  • vol-name-or-key-or-path : ダウンロードするボリュームの名前、キー、またはパス。
  • --offset: データの読み取りを開始するストレージボリュームの位置。
  • --length length: ダウンロードするデータの容量の上限。

例13.2 ストレージボリュームからのデータのダウンロード

# virsh vol-download sde1 /tmp/data-sde1.tmp disk-pool
この例では、sde1disk-pool のボリュームになります。sde1 のデータは /tmp/data-sde1.tmp にダウンロードされます。

13.3.4.4. ストレージボリュームのサイズ変更

vol-resize コマンドを使用すると、指定のストレージボリュームの容量を変更できます。
# virsh vol-resize --pool pool-or-uuid vol-name-or-path pool-or-uuid capacity --allocate --delta --shrink
capacity はバイト単位です。コマンドには、ストレージボリュームがあるストレージプールの名前または UUID である --pool pool-or-uuid が必要です。また、サイズを変更するボリュームの名前、キー、またはパスである --pool pool-or-uuid も必要です。
新たな容量は、--allocate が指定されない限りスパースになります。通常、容量は新規のサイズになりますが、--delta がある場合、既存のサイズに追加されます。--shrink がない場合、ボリュームを縮小する試みは失敗します。
--shrink が指定されていない限り、capacity は負の値にならず、負の符号は不要であることに注意してください。capacity は、サフィックスがない場合、デフォルトがバイトになる単位付き整数です。また、このコマンドはアクティブなゲストによって使用されていないストレージボリュームの場合にのみ安全であることにも注意してください。ライブのサイズ変更については、「ゲスト仮想マシンのブロックデバイスのサイズ変更」 を参照してください。

例13.3 ストレージボリュームのサイズ変更

たとえば、作成した 50M のストレージボリュームのサイズを 100M に変更する場合は以下のコマンドを使用します。
# virsh vol-resize --pool disk-pool sde1 100M

13.3.5. ストレージボリュームの削除

virsh または 仮想マシンマネージャー を使用するとストレージボリュームを削除できます。

注記

削除するストレージボリュームを使用するゲスト仮想マシンへの影響を避けるため、ストレージボリュームが使用しているリソースをすべて解放することが推奨されます。

13.3.5.1. virsh を使用したストレージボリュームの削除

virsh vol-delete コマンドを使用してストレージボリュームを削除します。コマンドには、ストレージボリュームの名前またはパスと、ストレージボリュームが抽象化されるストレージプールを指定する必要があります。
以下の例は、guest_images_dir ストレージプールから volume_name ストレージボリュームを削除します。
# virsh vol-delete volume_name --pool guest_images_dir
  vol volume_name deleted

13.3.5.2. 仮想マシンマネージャーを使用したストレージボリュームの削除

手順13.12 仮想マシンマネージャーでのストレージボリュームの削除

  1. ストレージ設定を開きます。

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

      図13.13 「ストレージ」タブ

      接続の詳細 ウインドウの左側のペインにストレージプールの一覧が表示されます。
  2. 削除するストレージボリュームを選択します。

    1. ストレージプールの一覧で、ストレージボリュームが抽象化されるストレージプールをクリックします。
      選択したストレージプールに設定されたストレージボリュームの一覧が、ウインドウの下部にある ボリューム ペインに表示されます。
    2. 削除するストレージボリュームを選択します。
  3. ストレージボリュームの削除

    1. ボリューム リストの上にある ボタンをクリックします。確認のダイアログが表示されます。
    2. はい をクリックします。選択したストレージボリュームが削除されます。

13.3.6. ストレージデバイスのゲストへの追加

virsh または 仮想マシンマネージャー を使用すると、ストレージデバイスをゲスト仮想マシンに追加できます。

13.3.6.1. virsh を使用したストレージデバイスのゲストへの追加

ストレージデバイスをゲスト仮想マシンに追加するには、attach-disk コマンドを使用します。追加するディスクに関する情報が含まれる引数は、XML ファイルまたはコマンドラインで指定できます。
以下は、ストレージの定義が含まれる XML ファイルの例になります。
<disk type='file' device='disk>'>
  <driver name='qemu' type='raw' cache='none'/>
  <source file='/var/lib/libvirt/images/FileName.img'/>
  <target dev='vdb' bus='virtio'/>
</disk> 
以下のコマンドは、NewStorage.xml という XML ファイルを使用してディスクを Guest1 に割り当てます。
# virsh attach-disk --config Guest1 ~/NewStorage.xml
以下のコマンドは、xml ファイルを使用せずに、ディスクを Guest1 に割り当てます。
# virsh attach-disk --config Guest1 --source /var/lib/libvirt/images/FileName.img --target vdb

13.3.6.2. 仮想マシンマネージャーを使用したストレージデバイスのゲストへの追加

ストレージボリュームをゲスト仮想マシンに追加したり、デフォルトのストレージデバイスをゲスト仮想マシンに作成および追加することができます。
13.3.6.2.1. ストレージボリュームのゲストへの追加
ストレージボリュームをゲスト仮想マシンに追加するには、以下を行います。
  1. 仮想マシンマネージャーの仮想マシンハードウェア詳細のウインドウを開く

    virt-manager を開くには、root で virt-manager コマンドを実行するか、または アプリケーションシステムツール仮想マシンマネージャー を開きます。
    仮想マシンマネージャーのウィンドウ

    図13.14 仮想マシンマネージャーのウィンドウ

    ストレージボリュームを追加するゲスト仮想マシンを選択します。
    開く をクリックして、仮想マシンのウインドウを開きます。
    をクリックすると、ハードウェア詳細のウインドウが表示されます。
    ハードウェア詳細のウインドウ

    図13.15 ハードウェア詳細のウインドウ

  2. 「新しいハードウェアを追加」ウインドウの表示

    ハードウェアを追加 をクリックします。「新しい仮想ハードウェアを追加」ウインドウが表示されます。
    ハードウェアタイプのペインで ストレージ が選択されていることを確認してください。
    新しい仮想ハードウェアを追加ウインドウ

    図13.16 新しい仮想ハードウェアを追加ウインドウ

  3. ストレージボリュームの一覧を表示

    カスタムストレージの選択または作成 オプションボタンを選択します。
    管理 ボタンをクリックします。ストレージボリュームの選択ダイアログが表示されます。
    「ストレージボリュームの選択」ウィンドウ

    図13.17 「ストレージボリュームの選択」ウィンドウ

  4. ストレージボリュームの選択

    「ストレージボリュームの選択」ウインドウの左側にあるリストからストレージプールを選択します。ボリューム リストに、選択したストレージプールのストレージボリュームのリストが表示されます。

    注記

    「ストレージボリュームの選択」ウインドウからストレージプールを作成できます。詳細は 「仮想マシンマネージャーでのストレージプールの作成」 を参照してください。
    ボリューム リストでストレージボリュームを選択します。

    注記

    「ストレージボリュームの選択」ウインドウからストレージボリュームを作成できます。詳細は 「仮想マシンマネージャーでのストレージボリュームの作成」 を参照してください。
    ボリュームの選択 をクリックします。「ストレージボリュームの選択」ウインドウが閉じられます。
  5. ストレージボリュームの設定

    デバイスの種類 リストでデバイスの種類を選択します。ディスクデバイス、CDROM デバイス、フロッピーデバイス、または LUN パススルーの選択が可能です。
    バスの種類 リストでバスの種類を選択します。選択が可能なバスの種類は、選択したデバイスの種類によって異なります。
    キャッシュモデル リストでキャッシュモデルを選択します。ハイパーバイザーのデフォルト、none、writethrough、writeback、directsync、または unsafe の選択が可能です。
    完了 をクリックします。「新しい仮想ハードウェアを追加」ウインドウが閉じられます。
13.3.6.2.2. デフォルトストレージのゲストへの追加
デフォルトのストレージプールは /var/lib/libvirt/images/ ディレクトリーのファイルベースイメージです。
デフォルトのストレージをゲスト仮想マシンに追加するには、以下を行います。
  1. 仮想マシンマネージャーの仮想マシンハードウェア詳細のウインドウを開く

    virt-manager を開くには、root で virt-manager コマンドを実行するか、または アプリケーションシステムツール仮想マシンマネージャー を開きます。
    仮想マシンマネージャーのウィンドウ

    図13.18 仮想マシンマネージャーのウィンドウ

    ストレージボリュームを追加するゲスト仮想マシンを選択します。
    開く をクリックして、仮想マシンのウインドウを開きます。
    をクリックすると、ハードウェア詳細のウインドウが表示されます。
    ハードウェア詳細のウインドウ

    図13.19 ハードウェア詳細のウインドウ

  2. 「新しいハードウェアを追加」ウインドウの表示

    ハードウェアを追加 をクリックします。「新しい仮想ハードウェアを追加」ウインドウが表示されます。
    ハードウェアタイプのペインで ストレージ が選択されていることを確認してください。
    新しい仮想ハードウェアを追加ウインドウ

    図13.20 新しい仮想ハードウェアを追加ウインドウ

  3. ゲスト用のディスクの作成

    仮想マシン用にディスクイメージを作成する オプションを選択してください。
    仮想マシン用にディスクイメージを作成する オプションボタンの下にあるテキストボックスに作成するディスクのサイズを入力します。
    完了 をクリックします。「新しい仮想ハードウェアを追加」ウインドウが閉じられます。

13.3.6.3. SCSI LUN ベースのストレージのゲストへの追加

ホスト SCSI LUN を完全にゲストに公開する方法は複数あります。SCSI LUN をゲストに公開すると、ゲスト上で直接 SCSI コマンドを LUN に実行できます。これは、ゲスト間で LUN を共有でき、ホスト間でファイバーチャネルストレージを共有できる便利な方法です。
SCSI LUN ベースのストレージに関する詳細は「SCSI デバイスを使用した vHBA ベースのストレージプール」を参照してください。

重要

オプションの sgio 属性は、特権のない SCSI Generical I/O (SG_IO) コマンドが device='lun' ディスクについてフィルターされるかどうかを制御します。sgio 属性は 'filtered' または 'unfiltered' として指定できますが、SG_IO ioctl コマンドを永続性保存の状態でゲスト上で渡せるようにするには 'unfiltered' に設定する必要があります。
sgio='unfiltered' の設定のほかにも、ゲスト間で LUN を共有するために <shareable> 要素を設定する必要があります。sgio 属性は、指定がない場合はデフォルトで 'filtered' に設定されます。
<disk> XML 属性 device='lun' は、以下のゲストディスク設定について有効です。
  • type='block'<source dev='/dev/disk/by-{path|id|uuid|label}'/> に対して指定します。
    <disk type='block' device='lun' sgio='unfiltered'>
    ​  <driver name='qemu' type='raw'/>
    ​  <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b85ad1d7-lun-0'/>
    ​  <target dev='sda' bus='scsi'/>
      <shareable/>
    ​</disk>

    注記

    <source> デバイス名のコロンの前にはバックスラッシュが必要なことに注意してください。
  • type='network'<source protocol='iscsi'... /> に対して指定します。
    <disk type='network' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-net-pool/1'>
        <host name='example.com' port='3260'/>
        <auth username='myuser'>
          <secret type='iscsi' usage='libvirtiscsi'/>
        </auth>
      </source>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk> 
  • type='volume' を、iSCSI または NPIV/vHBA ソースプールを SCSI ソースプールとして使用する場合に指定します。
    以下のサンプル XML は、ゲストで iSCSI ソースプール (iscsi-net-pool という名前) を SCSI ソースプールとして使用していることを示しています。
    <disk type='volume' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source pool='iscsi-net-pool' volume='unit:0:0:1' mode='host'/>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk> 

    注記

    <source> タグ内で mode= オプションは任意ですが、使用する場合には 'direct' ではなく 'host' に設定する必要があります。'host' に設定される場合、libvirt はローカルホスト上のデバイスへのパスを検索します。'direct' に設定される場合、libvirt はソースプールのソースホストデータを使用してデバイスへのパスを生成します。
    上記のサンプルの iSCSI プール (iscsi-net-pool) には、以下のような設定があります。
    # virsh pool-dumpxml iscsi-net-pool
    <pool type='iscsi'>
      <name>iscsi-net-pool</name>
      <capacity unit='bytes'>11274289152</capacity>
      <allocation unit='bytes'>11274289152</allocation>
      <available unit='bytes'>0</available>
      <source>
        <host name='192.168.122.1' port='3260'/>
        <device path='iqn.2013-12.com.example:iscsi-chap-netpool'/>
        <auth type='chap' username='redhat'>
          <secret usage='libvirtiscsi'/>
        </auth>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
        <permissions>
          <mode>0755</mode>
        </permissions>
      </target>
    </pool> 
    iSCSI ソースプールで利用可能な LUN の詳細を確認するには、以下のコマンドを入力します。
    # virsh vol-list iscsi-net-pool
    Name                 Path
    ------------------------------------------------------------------------------
    unit:0:0:1           /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-1
    unit:0:0:2           /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-2
  • type='volume' を、NPIV/vHBA ソースプールを SCSI ソースプールとして使用する場合に指定します。
    以下のサンプル XML は、ゲストで NPIV/vHBA ソースプール (vhbapool_host3 という名前) を SCSI ソースプールとして使用していることを示しています。
    <disk type='volume' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source pool='vhbapool_host3' volume='unit:0:1:0'/>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk>  
    上記のサンプルの NPIV/vHBA プール (vhbapool_host3) には、以下のような設定があります。
    # virsh pool-dumpxml vhbapool_host3
    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <capacity unit='bytes'>0</capacity>
      <allocation unit='bytes'>0</allocation>
      <available unit='bytes'>0</available>
      <source>
        <adapter type='fc_host' parent='scsi_host3' managed='yes' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee045d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
        <permissions>
          <mode>0700</mode>
          <owner>0</owner>
          <group>0</group>
        </permissions>
      </target>
    </pool>  
    vHBA で利用可能な LUN の詳細を確認するには、以下のコマンドを入力します。
    # virsh vol-list vhbapool_host3
    Name                 Path
    ------------------------------------------------------------------------------
    unit:0:0:0           /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0
    unit:0:1:0           /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016844602198-lun-0
    SCSI デバイスで NPIV vHBA を使用する方法についての詳細は、「SCSI デバイスを使用した vHBA ベースのストレージプール」 を参照してください。
以下の手順は、SCSI LUN ベースのストレージデバイスをゲストに追加する例を示しています。上記の <disk device='lun'> ゲストのディスク設定のいずれもこの方法で割り当てることができます。ご使用の環境に応じて設定を置き換えてください。

手順13.13 SCSI LUN ベースのストレージのゲストへの割り当て

  1. 新しいファイルに <disk> 要素を書き込むことによってデバイスファイルを作成し、このファイルを XML 拡張子を付けて保存します (例: sda.xml)。
    # cat sda.xml
    <disk type='volume' device='lun' sgio='unfiltered'>
      <driver name='qemu' type='raw'/>
      <source pool='vhbapool_host3' volume='unit:0:1:0'/>
      <target dev='sda' bus='scsi'/>
      <shareable/>
    </disk>  
  2. sda.xml で作成したデバイスをゲスト仮想マシン (例: Guest1) に関連付けます。
    # virsh attach-device --config Guest1 ~/sda.xml

    注記

    virsh attach-device コマンドを --config オプションを指定して実行するには、デバイスをゲストに永続的に追加するためにゲストを再起動する必要があります。または、--persistent オプションを --config の代わりに使用することができます。これを、デバイスをゲストにホットプラグするために使用することもできます。
別の方法として、SCSI LUN ベースのストレージを virt-manager を使用してゲスト上で割り当てるか、または設定することができます。virt-manager を使用してこれを設定するには、ハードウェアを追加 ボタンをクリックして、必要なパラメーターと共に仮想ディスクを追加するか、またはこのウィンドウから既存の SCSI LUN デバイスの設定を変更します。Red Hat Enterprise Linux 7.2 以降では、SGIO の値も virt-manager で設定できます。
virt-manager を使用した SCSI LUN ストレージの設定

図13.21 virt-manager を使用した SCSI LUN ストレージの設定

ハードウェア故障後に公開されている LUN に再接続

ハードウェア (ホストのバスアダプター等) の故障により公開されているファイバーチャネル (FC) LUN への接続が失われた場合、ハードウェアの故障が修復された後でも、ゲストの公開されている LUN は故障したままのように見えることがあります。これを防ぐためには、dev_loss_tmo および fast_io_fail_tmo カーネルオプションを編集します。
  • dev_loss_tmo は、SCSI デバイスが故障してから SCSI レイヤーが故障と識別するまでの時間をコントロールします。タイムアウトを防ぐには、オプションを最大値の 2147483647 に設定することをお勧めします。
  • fast_io_fail_tmo は、SCSI デバイスが故障してから SCSI レイヤーが I/O にフェイルバックするまでの時間をコントロールします。dev_loss_tmo がカーネルによって無視されないようにするには、このオプションの値を dev_loss_tmo の値より小さい数値に設定します。
dev_loss_tmo および fast_io_fail の値を変更するには、以下に示すどちらかの操作を行います。
  • /etc/multipath.conf ファイルを編集し、defaults セクションの値を設定する。
    defaults {
    ...
    fast_io_fail_tmo     20
    dev_loss_tmo    infinity
    }
  • FC ホストまたはリモートポートのレベルで dev_loss_tmo および fast_io_fail を設定する。例を以下に示します。
    # echo 20 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/fast_io_fail_tmo
    # echo 2147483647 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
新しい dev_loss_tmo および fast_io_fail の値が有効であることを確認するには、以下のコマンドを使います。
# find /sys -name dev_loss_tmo -print -exec cat {} \;
パラメーターが正しく設定されていれば、出力は次のようになります (ただし、pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0 には実際のデバイスが表示されます)。
# find /sys -name dev_loss_tmo -print -exec cat {} \;
...
/sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
2147483647
...

13.3.6.4. ゲスト仮想マシンのストレージコントローラーの管理

virtio ディスクとは異なり、SCSI デバイスでは、コントローラーがゲスト仮想マシンに存在する必要があります。このセクションでは、仮想 SCSI コントローラー (「ホストバスアダプター」または HBA とも知られる) を作成し、SCSI ストレージをゲスト仮想マシンに追加するための必要なステップを詳しく説明します。

手順13.14 仮想 SCSI コントローラーの作成

  1. ゲスト仮想マシン (Guest1) の設定を表示して、すでに存在している SCSI コントローラーを探します。
    virsh dumpxml Guest1 | grep controller.*scsi
    デバイスコントローラーが存在する場合は、このコマンドは以下のように 1 つ以上の行を出力します。
    <controller type='scsi' model='virtio-scsi' index='0'/>
  2. 直前のステップでデバイスコントローラーが表示されない場合、新しいファイルでその 1 つを記述し、以下のステップを実行してそれを仮想マシンに追加します。
    1. 新しいファイルに <controller> 要素を書き込むことによってデバイスコントローラーを作成し、このファイルを XML 拡張子を付けて保存します。たとえば、NewHBA.xml のようになります。
      <controller type='scsi' model='virtio-scsi'/>
    2. virtio-scsi-controller.xml で作成したばかりのデバイスコントローラーを使用中のゲスト仮想マシン (例: Guest1) に関連付けます。
      virsh attach-device --config Guest1 ~/virtio-scsi-controller.xml
      この例では、--config オプションの挙動はディスクに対する挙動と同じです。詳細は 「ストレージデバイスのゲストへの追加」 を参照してください。
  3. 新しい SCSI ディスクまたは CD-ROM を追加します。新しいディスクは、「ストレージデバイスのゲストへの追加」 のやり方を使用して追加できます。SCSI ディスクを作成するには、sd で始まる目的のデバイス名を指定します。

    注記

    各コントローラーでサポートされる virtio-scsi ディスクの上限は 1024 個ですが、これよりも少ない数のディスクによってホストで利用できる他のリソース (ファイル記述子など) を使い果たしてしまう可能性があります。
    詳細については、Red Hat Enterprise Linux 6 ホワイトペーパー The next-generation storage interface for the Red Hat Enterprise Linux Kernel Virtual Machine: virtio-scsi を参照してください。
    virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img sdb --cache none
    ゲスト仮想マシン内のドライバーのバージョンによっては、実行中のゲスト仮想マシンを実行しても、新しいディスクをすぐには検出できない場合があります。『Red Hat Enterprise Linux 7 ストレージ管理ガイド』のステップに従ってください。

13.3.7. ゲストからのストレージデバイスの削除

virsh または 仮想マシンマネージャー を使用すると、ストレージデバイスをゲスト仮想マシンから削除することができます。

13.3.7.1. virsh で仮想マシンからストレージを削除

以下の例は vdb ストレージボリュームを Guest1 仮想マシンから削除します。
# virsh detach-disk Guest1 vdb

13.3.7.2. 仮想マシンマネージャーで仮想マシンからストレージを削除

手順13.15 仮想マシンマネージャーで仮想マシンからストレージを削除

仮想マシンマネージャー を使用してゲスト仮想マシンからストレージを削除するには、以下を行います。
  1. 仮想マシンマネージャーの仮想マシンハードウェア詳細のウインドウを開く

    virt-manager を開くには、root で virt-manager コマンドを実行するか、または アプリケーションシステムツール仮想マシンマネージャー を開きます。
    ストレージデバイスを削除するゲスト仮想マシンを選択します。
    開く をクリックして、仮想マシンのウインドウを開きます。
    をクリックすると、ハードウェア詳細のウインドウが表示されます。
  2. ゲスト仮想マシンからストレージを削除

    ハードウェア詳細のペインの左側にあるハードウェアのリストでストレージデバイスを選択します。
    削除 をクリックします。確認ダイアログが表示されます。
    はい をクリックします。ストレージがゲスト仮想マシンから削除されます。