Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

本セクションでは、ストレージボリュームの使用方法を説明します。virsh コマンドおよび仮想マシンマネージャーを使用してストレージボリュームの作成、設定、および削除に関する概念、情報、および説明を提供します。

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

ストレージプールは、ストレージボリューム に分類されます。ストレージボリュームは、libvirt が処理する物理パーティション、LVM 論理ボリューム、ファイルベースのディスクイメージ、その他のストレージタイプの抽象化です。ストレージボリュームは、基盤となるハードウェアに関係なく、ローカルのストレージデバイスとしてゲスト仮想マシンに表示されます。
注記
以下のセクションには、virsh がストレージボリュームの管理を行うコマンドおよび引数がすべて含まれていません。詳細は 「ストレージボリュームコマンド」
ホストマシンでは、ストレージボリュームは、その名前と、そこから派生するストレージプールの識別子で参照されます。virsh コマンドラインでは、--pool storage_pool volume_name の形式を取ります。
たとえば、guest_images プールの firstimage という名前のボリュームの場合は以下のようになります。
# virsh vol-info --pool guest_images firstimage
  Name:           firstimage
  Type:           block
  Capacity:       20.00 GB
  Allocation:     20.00 GB

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

本セクションでは、virsh およびVirtual Machine Manager を使用してストレージプールからストレージボリュームを作成する方法を説明します。ストレージボリュームの作成後、ストレージデバイスをゲストに追加できます

13.3.2.1. virsh でストレージボリュームの作成

以下のいずれかを行います。
  • XML ファイルを使用してストレージボリュームを定義します。
    a.新しいデバイスに必要なストレージボリューム情報を含む一時的な XML ファイルを作成します。
    XML ファイルには、以下を含む特定のフィールドが含まれている必要があります。
    • 名前 - ストレージボリュームの名前。
    • 割り当て - ストレージボリュームのストレージ割り当ての合計数。
    • 容量 - ストレージボリュームの論理容量。ボリュームがスパースの場合、この値は 割り当て の値とは異なります。
    • ターゲット - ホストシステムのストレージボリュームのパス、さらに任意でそのパーミッションとラベル。
    以下は、ストレージボリューム定義の 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.で作成した 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. Virtual Machine ManagerEdit メニューを開き、Connection Details を選択します。
    2. Connection Details ウィンドウの Storage タブをクリックします。

      図13.11 ストレージタブ

      ストレージタブ
      Connection Details ウィンドウの左側にあるペインには、ストレージプールの一覧が表示されます。
  2. ストレージボリュームを作成するストレージプールを選択します。

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

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

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

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

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

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

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 バイト、データの書き込みを開始するストレージボリュームの位置。
  • --length - アップロードするデータのサイズの上限。
    注記
    local-file が指定の --length を超えると、エラーが発生します。

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

# virsh vol-upload sde1 /tmp/data500m.empty disk-pool
この例のde1 は、disk-pool ストレージプールのボリュームです。/tmp/data500m.empty のデータはsde1 にコピーされます。

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

virsh vol-download コマンドを使用して、ストレージボリュームから指定したローカルファイルにデータをダウンロードできます。
# 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 - ダウンロードされるデータ量の上限。

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

# virsh vol-download sde1 /tmp/data-sde1.tmp disk-pool
この例のde1 は、disk-pool ストレージプールのボリュームです。insde1 のデータは /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
容量はバイト単位で表現されます。このコマンドでは、ボリュームが置かれているストレージプールの名前または UUID である --pool pool-or-uuid が必要です。このコマンドでは、サイズを変更するボリュームの vol-name-or-key-or-path、名前、キー、またはパスも必要です。
--allocate が指定されていない限り、新しい容量がスパースになる可能性があります。通常、容量は新しいサイズになりますが、--delta が存在する場合は、既存のサイズに追加されます。--shrink が存在する場合を除き、ボリュームの縮小を試みると失敗します。
--shrink が指定されておらず、負の記号が必要でない限り、容量を負の値にすることはできません容量 はスケーリングされた整数で、接尾辞がない場合はデフォルトでバイトに設定されます。また、このコマンドは、アクティブなゲストで使用されていないストレージボリュームの場合にのみ安全なことに注意してください。「ゲスト仮想マシンのブロックデバイスのサイズの変更」、を参照してください。

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

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

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

virsh またはVirtual Machine Manager を使用してストレージボリュームを削除できます。
注記
削除するストレージボリュームを使用するゲスト仮想マシンに影響を及ぼさないようにするには、これを使用してリソースを解放することが推奨されます。

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. Virtual Machine ManagerEdit メニューを開き、Connection Details を選択します。
    2. Connection Details ウィンドウの Storage タブをクリックします。

      図13.13 ストレージタブ

      ストレージタブ
      Connection Details ウィンドウの左側にあるペインには、ストレージプールの一覧が表示されます。
  2. 削除するストレージボリュームを選択します。

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

    1. ボタンをクリックします(ボリューム一覧を 格納 します)。確認ダイアログが表示されます。
    2. Yes をクリックします。選択したストレージボリュームが削除されます。

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

virsh またはVirtual Machine Manager を使用して、ストレージデバイスをゲスト仮想マシンに追加できます。

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. 仮想マシンハードウェア情報への Open Virtual Machine Manager

    root で virt-manager コマンドを実行するか、または ApplicationsSystem ToolsVirtual Machine Manager を開いて virt-manager を開きます。

    図13.14 Virtual Machine Manager ウィンドウ

    Virtual Machine Manager ウィンドウ
    ストレージボリュームを追加するゲスト仮想マシンを選択します。
    Open をクリックします。仮想マシン画面が開きます。
    をクリックします。ハードウェアの詳細ウィンドウが表示されます。

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

    ハードウェアの詳細ウィンドウ
  2. 新しい仮想ハードウェアの追加 ウィンドウを開く

    ハードウェアの追加 をクリックします。Add New Virtual Hardware ウィンドウが表示されます。
    ハードウェア種別ペインにストレージが選択されていることを確認します

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

    新しい仮想ハードウェアの追加 ウィンドウ
  3. ストレージボリュームの一覧を表示します。

    Select または create custom storage オプションを選択します。
    Manage をクリックします。Choose Storage Volume ダイアログが表示されます。

    図13.17 Select Storage Volume ウィンドウ

    Select Storage Volume ウィンドウ
  4. ストレージボリュームの選択

    Select Storage Volume ウィンドウの左側の一覧からストレージプールを選択します。選択したストレージプールのストレージボリュームの一覧が、ボリューム の一覧に表示されます
    注記
    ストレージプールは Select Storage Volume ウィンドウから作成できます。「仮想マシンマネージャーでのストレージプールの作成」
    ボリューム リストからストレージボリュームを選択します
    注記
    Select Storage Volume ウィンドウでストレージボリュームを作成できます。「仮想マシンマネージャーを使用したストレージボリュームの作成」
    Choose Volume をクリックします。Select Storage Volume ウィンドウが閉じます。
  5. ストレージボリュームの設定

    デバイス タイプ リストからデバイスタイプを選択します。利用可能なタイプは、ディスクデバイス、フロッピーデバイス、および LUN パススルーです。
    Bus タイプ リストからバスタイプを選択します。利用可能なバスタイプは、選択したデバイスの種類によって異なります。
    キャッシュモードリストからキャッシュモードを選択します。利用可能なキャッシュモード: Hypervisor default、none、writethrough、writeback、directsync、unsafe
    Finish をクリックします。新しい仮想ハードウェアの追加 ウィンドウが閉じます。
13.3.6.2.2. デフォルトストレージのゲストへの追加
デフォルトのストレージプールは、/var/lib/libvirt/images/ ディレクトリーのファイルベースのイメージです。
デフォルトのストレージをゲスト仮想マシンに追加するには、以下を実行します。
  1. 仮想マシンハードウェア情報への Open Virtual Machine Manager

    root で virt-manager コマンドを実行するか、または ApplicationsSystem ToolsVirtual Machine Manager を開いて virt-manager を開きます。

    図13.18 Virtual Machine Manager ウィンドウ

    Virtual Machine Manager ウィンドウ
    ストレージボリュームを追加するゲスト仮想マシンを選択します。
    Open をクリックします。仮想マシン画面が開きます。
    をクリックします。ハードウェアの詳細ウィンドウが表示されます。

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

    ハードウェアの詳細ウィンドウ
  2. 新しい仮想ハードウェアの追加 ウィンドウを開く

    ハードウェアの追加 をクリックします。Add New Virtual Hardware ウィンドウが表示されます。
    ハードウェア種別ペインにストレージが選択されていることを確認します

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

    新しい仮想ハードウェアの追加 ウィンドウ
  3. ゲストのディスクを作成します。

    Create a disk image for the virtual machine オプションを確認します。
    仮想マシンオプションの Create a disk image ボタンの下の、テキストボックスに作成するディスクのサイズを入力します。
    Finish をクリックします。新しい仮想ハードウェアの追加 ウィンドウが閉じます。

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

ホスト SCSI LUN を完全にゲストに公開する方法は複数あります。SCSI LUN をゲストに公開すると、SCSI コマンドをゲストの LUN で直接実行する機能を提供します。これは、ゲスト間で LUN を共有する手段や、ホスト間でファイバーチャネルストレージを共有する手段に役立ちます。
SCSI LUN ベースのストレージプールの詳細は、「 SCSI デバイスを使用した vHBA ベースのストレージプール」を参照して ください。
重要
オプションの sgio 属性は、デバイス='lun' ディスクに対して、権限のない SCSI Generical I/O(SG_IO)コマンドがフィルターされるかどうかを制御します。sgio 属性は 'filtered' または ' unfiltered' として指定できますが、SG_IO ioctl コマンドが永続予約中のゲストを介して渡されるように、'unfiltered ' に設定する必要があります。
sgio='unfiltered を設定する場合に加え、<shareable> 要素はゲスト間で LUN を共有するように設定する必要があります。指定されていない場合、sgio 属性はデフォルトで 'filtered' に設定されます。
<disk> XML 属性 device='lun' は、以下のゲストディスク設定に対して有効です。
  • type='block' for <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' for <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>
  • iSCSI または NPIV/vHBA ソースプールを SCSI ソースプールとして使用する場合は type='volume' と入力します。
    以下の 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= オプションはオプションですが、使用する場合は、'host' に設定し、' direct' を設定することはできません。「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
  • NPIV/vHBA ソースプールを SCSI ソースプールとして使用する場合は、type='volume' を入力します
    以下の XML 例は、SCSI ソースプールとして NPIV/vHBA ソースプール(名前: vhbapool_host3)を使用するゲストを示しています。
    <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 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
    注記
    --config オプションを指定して virsh attach-device コマンドを実行すると、ゲストでデバイスを永続的にゲストに追加する必要があります。または、--config の代わりに --persistent オプションを使用することもできます。これを使用して、デバイスをゲストにホットプラグすることもできます。
または、SCSI LUN ベースのストレージは、virt-manager を使用してゲスト上で接続または設定できます。virt-manager を使用してこれを設定するには、ハードウェアの追加 ボタンをクリックして必要なパラメーターで仮想ディスクを追加するか、またはこの画面から既存の SCSI LUN デバイスの設定を変更します。Red Hat Enterprise Linux 7.2 以降では、SGIO の値を virt-manager で設定することもできます。

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

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

ハードウェア障害後の公開される LUN への再接続

ハードウェア(ホストバスアダプターなど)の失敗により、公開された Fiber Channel(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 コントローラー("Host Bus Adapter または 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. 新しいファイルに <controller> 要素を作成 て、このファイルを XML 拡張子で保存します。virtio-scsi-controller.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 で始まるターゲットデバイス名を指定します
    注記
    各コントローラーでサポートされる制限は 1024 virtio-scsi ディスクですが、ホストで利用可能なその他のリソース(ファイル記述子など)が少ないディスクで使い切られる可能性があります。
    詳細は、Red Hat Enterprise Linux 6 のホワイトペーパー: Red Hat Enterprise Linux カーネル仮想マシンの次世代ストレージインターフェース(virtio-scsi )を参照してください。
    virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img sdb --cache none
    ゲスト仮想マシンのドライバーのバージョンによっては、実行中のゲスト仮想マシンにより新しいディスクがすぐに検出されない可能性があります。『Red Hat Enterprise Linux ストレージ管理ガイド』 の手順に従ってください

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

virsh またはVirtual Machine Manager を使用して、ゲスト仮想マシンからストレージデバイスを削除できます。

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

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

13.3.7.2. 仮想マシンマネージャーを使用する仮想マシンからのストレージの削除

手順13.15 仮想マシンマネージャーを使用する仮想マシンからのストレージの削除

仮想マシンマネージャーを使用してゲスト仮想マシンからストレージを削除するには、以下を実行します。
  1. 仮想マシンハードウェア情報への Open Virtual Machine Manager

    root で virt-manager コマンドを実行するか、または ApplicationsSystem ToolsVirtual Machine Manager を開いて virt-manager を開きます。
    ストレージデバイスを削除するゲスト仮想マシンを選択します。
    Open をクリックします。仮想マシン画面が開きます。
    をクリックします。ハードウェアの詳細ウィンドウが表示されます。
  2. ゲスト仮想マシンからのストレージの削除

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