Red Hat Training

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

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

このセクションでは、ストレージボリュームの使用方法を説明します。ここでは、概念情報と、virsh コマンドおよび Virtual Machine Manager を使用してストレージボリュームを作成、設定、および削除する方法を詳細に説明します。

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 ファイルには、以下を含む特定のフィールドが含まれている必要があります。
    • 名前 - ストレージボリュームの名前。
    • 割り当て - ストレージボリュームのストレージ割り当ての合計数。
    • 容量 - ストレージボリュームの論理容量。ボリュームがスパースの場合、この値は allocation の値とは異なります。
    • ターゲット - ホストシステムのストレージボリュームのパス、さらに任意でそのパーミッションとラベル。
    以下は、ストレージボリューム定義の 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. Virtual Machine Manager を使用したストレージボリュームの作成

手順13.11 Virtual Machine Manager を使用したストレージボリュームの作成

  1. ストレージ設定を開く

    1. Virtual Machine ManagerEdit メニューを開き、Connection Details を選択します。
    2. Connection Details ウィンドウの Storage タブをクリックします。

      図13.11 ストレージタブ

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

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

    Volumes リストの上にある ボタンをクリックします。Add a Storage Volume のダイアログが表示されます。

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

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

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

    Finish をクリックします。Add a Storage Volume のダイアログが閉じ、ストレージボリュームが Volumes リストに表示されます。

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
この例のsde1 は、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 length - ダウンロードするデータ量の上限です。

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

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

例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. Virtual Machine Manager を使用したストレージボリュームの削除

手順13.12 Virtual Machine Manager を使用したストレージボリュームの削除

  1. ストレージ設定を開く

    1. Virtual Machine ManagerEdit メニューを開き、Connection Details を選択します。
    2. Connection Details ウィンドウの Storage タブをクリックします。

      図13.13 ストレージタブ

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

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

    1. ボタン (Volumes リストの上) をクリックします。確認ダイアログが表示されます。
    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. Virtual Machine Manager を使用したゲストへのストレージデバイスの追加

ストレージボリュームをゲスト仮想マシンに追加するか、デフォルトのストレージデバイスを作成してゲスト仮想マシンに追加できます。
13.3.6.2.1. ゲストへのストレージボリュームの追加
ゲスト仮想マシンにストレージボリュームを追加するには、次のコマンドを実行します。
  1. 仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。

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

    図13.14 Virtual Machine Manager ウィンドウ

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

    図13.15 Hardware Details ウィンドウ

    Hardware Details ウィンドウ
  2. Add New Virtual Hardware ウィンドウが開きます。

    Add Hardware をクリックします。Add New Virtual Hardware ウィンドウが表示されます。
    ハードウェアタイプペインで Storage が選択されていることを確認します。

    図13.16 Add New Virtual Hardware ウィンドウ

    Add New Virtual Hardware ウィンドウ
  3. ストレージボリュームのリストを表示します。

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

    図13.17 Select Storage Volume ウィンドウ

    Select Storage Volume ウィンドウ
  4. ストレージボリュームを選択します。

    Select Storage Volume ウィンドウの左側にあるリストからストレージプールを選択します。選択したストレージプールのストレージボリュームのリストが、Volumes リストに表示されます。
    注記
    ストレージプールは、Select Storage Volume ウィンドウから作成できます。詳細は、「Virtual Machine Manager を使用したストレージプールの作成」 を参照してください。
    Volumes リストからストレージボリュームを選択します。
    注記
    Select Storage Volume ウィンドウから、ストレージボリュームを作成できます。詳細は、「Virtual Machine Manager を使用したストレージボリュームの作成」 を参照してください。
    Choose Volume をクリックします。Select Storage Volume ウィンドウが閉じます。
  5. ストレージボリュームの設定

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

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

    図13.18 Virtual Machine Manager ウィンドウ

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

    図13.19 Hardware Details ウィンドウ

    Hardware Details ウィンドウ
  2. Add New Virtual Hardware ウィンドウが開きます。

    Add Hardware をクリックします。Add New Virtual Hardware ウィンドウが表示されます。
    ハードウェアタイプペインで Storage が選択されていることを確認します。

    図13.20 Add New Virtual Hardware ウィンドウ

    Add New Virtual Hardware ウィンドウ
  3. ゲスト用のディスクの作成

    Create a disk image for the virtual machine が選択できることを確認します。
    Create a disk image for the virtual machine オプションボタンの下にあるテキストボックスに、作成するディスクのサイズを入力します。
    Finish をクリックします。Add New Virtual Hardware ウィンドウが閉じます。

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

ホスト SCSI LUN を完全にゲストに公開する方法は複数あります。SCSI LUN をゲストに公開すると、ゲストの LUN に対して SCSI コマンドを直接実行できるようになります。これは、ゲスト間で LUN を共有したり、ホスト間でファイバーチャネルストレージを共有したりする手段として役立ちます。
SCSI LUN ベースのストレージの詳細は、vHBA-based storage pools using SCSI devices を参照してください。
重要
オプションの sgio 属性は、非特権 SCSI ジェネリック I/O (SG_IO) コマンドでdevice='lun'ディスクをフィルターにかけるかどうかを制御します。sgio 属性は 'filtered' または 'unfiltered' に指定できますが、SG_IO ioctl コマンドが永続予約でゲストを通過できるようにするには、'unfiltered' に設定する必要があります。
sgio='unfiltered' の設定に加えて、<shareable> 要素を設定してゲスト間で LUN を共有する必要があります。指定されていない場合、sgio 属性のデフォルトは 'filtered' になります。
<disk> XML 属性の device='lun' は、次のゲストディスク設定で有効です。
  • <source dev='/dev/disk/by-{path|id|uuid|label}'/>type='block'
    <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>デバイス名のコロンの前にあるバックスラッシュは必須です。
  • <source protocol='iscsi'... />type='network'
    <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
    注記
    --config を指定して virsh attach-device コマンドを実行すると、ゲストを再起動してデバイスをゲストに永続的に追加する必要があります。また、--config の代わりに --persistent オプションを使用することもできます。これを使用すると、デバイスをゲストにホットプラグできます。
または、virt-manager を使用して、 SCSI LUN ベースのストレージをゲストに接続または設定できます。virt-manager を使用してこれを設定する場合は、Add Hardware ボタンをクリックし、必要なパラメーターを持つ仮想ディスクを追加するか、このウィンドウで既存の SCSI LUN デバイスの設定を変更します。Red Hat Enterprise Linux 7.2 以降では、virt-manager で SGIO 値を設定することもできます。

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

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 デバイスに障害が発生してから I / O にフェイルバックするまでに SCSI 層が待機する時間を制御します。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
    }
    
  • dev_loss_tmo および fast_io_fail は、以下のように、FC ホストまたはリモートポートのレベルで設定します。
    # 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 ホワイトペーパーを参照してください: 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 Storage Administration Guide の手順に従います。

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

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

13.3.7.1. virsh を使用した仮想マシンからのストレージの削除

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

13.3.7.2. Virtual Machine Manager を使用した仮想マシンからのストレージの削除

手順13.15 Virtual Machine Manager を使用した仮想マシンからのストレージの削除

Virtual Machine Manager を使用してゲスト仮想マシンからストレージを削除するには、次のコマンドを実行します。
  1. 仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。

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

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