Red Hat Training

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

第12章 ストレージプール

この章には、さまざまなタイプのストレージプールを作成する手順が含まれています。ストレージプール は、仮想マシンで使用するために、管理者 (多くの場合は専用のストレージ管理者) によって確保されるストレージの量です。多くの場合、ストレージプールは、ストレージ管理者またはシステム管理者によってストレージボリュームに分割され、ボリュームはブロックデバイスとしてゲスト仮想マシンに割り当てられます。

例12.1 NFS ストレージプール

NFS サーバーを担当するストレージ管理者が、ゲスト仮想マシンのデータを格納するための共有を作成するとします。システム管理者は、共有の詳細を使用してホスト物理マシン上のプールを定義します (nfs.example.com:/path/to/share/vm_data にマウントする必要があります)。プールが開始すると、libvirt は、システム管理者がログインして mount nfs.example.com:/path/to/share /vmdata を実行した場合と同じように、指定したディレクトリーに共有をマウントします。プールが自動開始するように設定されている場合、libvirt は、libvirt の開始時に指定されたディレクトリーに NFS 共有がマウントされていることを確認します。
プールが開始されると、NFS が共有するファイルがボリュームとして報告され、libvirtAPI を使用してストレージボリュームのパスが照会されます。ストレージボリュームのパスは、ゲスト仮想マシンの XML 定義ファイルセクションにコピーできます。このセクションは、ゲスト仮想マシンのブロックデバイスのソースストレージを記述します。NFS を使用すると、libvirt API を使用するアプリケーションは、プールのサイズ (共有の最大ストレージ容量) の制限まで、プール内のボリューム (NFS 共有内のファイル) を作成および削除できます。すべてのプールタイプがボリュームの作成と削除をサポートしているわけではありません。プールを停止すると、開始操作が無効になります。この場合、NFS 共有がアンマウントされます。名前にもかかわらず、共有のデータは破棄操作によって変更されません。詳細については、manvirsh を参照してください。
注記
ゲスト仮想マシンを適切に動作させるために、ストレージプールとボリュームは必要ありません。プールとボリュームは、libvirt が特定のストレージをゲスト仮想マシンで使用できるようにする方法を提供しますが、一部の管理者は独自のストレージを管理することを好み、ゲスト仮想マシンはプールやボリュームを定義しなくても適切に動作します。プールを使用しないシステムでは、システム管理者は、起動時に共有がマウントされるように、ホスト物理マシンの fstab に NFS 共有を追加するなど、好みのツールを使用してゲスト仮想マシンのストレージの可用性を確保する必要があります。
警告
ゲストにストレージプールを作成するときは、セキュリティー上の考慮事項に必ず従ってください。この情報については、『Red Hat Enterprise Linux 仮想化セキュリティーガイド』 を参照してください。https://access.redhat.com/site/documentation/

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

このセクションでは、ゲスト仮想マシン用のディスクベースのストレージデバイスの作成について説明します。
警告
ゲストには、ディスク全体またはブロックデバイス (/dev/sdb など) への書き込みアクセス権を付与しないでください。パーティション (/dev/sdb1 など) または LVM ボリュームを使用します。
ブロックデバイス全体をゲストに渡すと、ゲストはブロックデバイスをパーティションに分割するか、ブロックデバイスに独自の LVM グループを作成します。これにより、ホストの物理マシンがこのようなパーティションや LVM グループを検出し、エラーが発生する場合があります。

12.1.1. virsh を使用したディスクベースのストレージプールの作成

この手順では、virsh コマンドでディスクデバイスを使用して新しいストレージプールを作成します。
警告
ディスクをストレージプール専用にすると、現在ディスクデバイスに保存されているすべてのデータが再フォーマットおよび消去されます。次の手順を開始する前に、ストレージデバイスをバックアップすることを強くお勧めします。
  1. ディスクに GPT ディスクラベルを作成します

    ディスクには、GUID パーティションテーブル (GPT) ディスクラベルを付け直す必要があります。GPT ディスクラベルを使用すると、各デバイスに最大 128 個のパーティションを作成できます。GPT パーティションテーブルは、MS-DOS パーティションテーブルよりもはるかに多くのパーティションのパーティションデータを格納できます。
    # 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.
    #
    
  2. ストレージプール設定ファイルを作成します

    新規デバイスに必要なストレージプール情報を含む一時的な XML テキストファイルを作成します。
    ファイルは以下に示す形式で、次のフィールドが含まれている必要があります。
    <name>guest_images_disk</name>
    nameパラメーターは、ストレージプールの名前を決定します。この例では、以下の例で guest_images_disk という名前を使用しています。
    <device path='/dev/sdb'/>
    deviceパラメーターにpath属性を指定すると、ストレージデバイスのデバイスパスが指定されます。この例では、デバイス /dev/sdb を使用しています。
    <target> <path>/dev</path></target>
    ファイルシステム target パラメーターと path サブパラメーターは、このストレージプールで作成されたボリュームを接続するホスト物理マシンファイルシステム上の場所を決定します。
    たとえば、sdb1、sdb2、sdb3 です。以下の例のように /dev/ を使用すると、このストレージプールから作成されたボリュームに /dev/sdb1、/dev/sdb2、/dev/sdb3 としてアクセスできることを意味します。
    <format type='gpt'/>
    formatパラメーターは、パーティションテーブルの種類を指定します。この例では、次の例の gpt を使用して、前の手順で作成した GPT ディスクラベルタイプと一致させます。
    テキストエディターを使用して、ストレージプールデバイスの XML ファイルを作成します。

    例12.2 ディスクベースのストレージデバイスストレージプール

    <pool type='disk'>
      <name>guest_images_disk</name>
      <source>
        <device path='/dev/sdb'/>
        <format type='gpt'/>
      </source>
      <target>
        <path>/dev</path>
      </target>
    </pool>
    
  3. デバイスを接続します

    前の手順で作成した XML 設定ファイルで virshpool-define コマンドを使用して、ストレージプール定義を追加します。
    # virsh pool-define ~/guest_images_disk.xml
    Pool guest_images_disk defined from /root/guest_images_disk.xml
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_disk    inactive   no
    
  4. ストレージプールを起動します。

    virshpool-start コマンドを使用してストレージプールを開始します。virshpool-list--all コマンドを使用してプールが開始されていることを確認します。
    # virsh pool-start guest_images_disk
    Pool guest_images_disk started
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_disk    active     no
    
  5. 自動起動をオンにします

    オンにするautostartストレージプール用。Autostart は、サービスの開始時にストレージプールを開始するように libvirtd サービスを設定します。
    # virsh pool-autostart guest_images_disk
    Pool guest_images_disk marked as autostarted
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images_disk    active     yes
    
  6. ストレージプールの設定を確認する

    ストレージプールが正しく作成され、サイズが正しく報告され、状態が次のように報告されることを確認しますrunning
    # virsh pool-info guest_images_disk
    Name:           guest_images_disk
    UUID:           551a67c8-5f2a-012c-3844-df29b167431c
    State:          running
    Capacity:       465.76 GB
    Allocation:     0.00
    Available:      465.76 GB
    # ls -la /dev/sdb
    brw-rw----. 1 root disk 8, 16 May 30 14:08 /dev/sdb
    # virsh vol-list guest_images_disk
    Name                 Path
    -----------------------------------------
    
  7. オプション: 一時設定ファイルを削除します

    必要がない場合は、一時ストレージプールの XML 設定ファイルを削除します。
    # rm ~/guest_images_disk.xml
ディスクベースのストレージプールが利用可能になりました。

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

次に、virsh を使用してストレージプールを削除する方法を示します。
  1. 同じプールを使用している他のゲスト仮想マシンでの問題を回避するには、ストレージプールを停止し、使用中のリソースを解放することをお勧めします。
    # virsh pool-destroy guest_images_disk
  2. ストレージプールの定義を削除します。
    # virsh pool-undefine guest_images_disk