Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
13.2. ストレージプールの使用
13.2.1. ストレージプールの概念
- ローカルストレージのプール
- ローカルストレージプールは、ホストサーバーに直接割り当てることができます。これには、ローカルデバイスのローカルディレクトリー、直接接続したディスク、物理パーティション、および論理ボリューム管理 (LVM) ボリュームグループが含まれます。ローカルストレージプールは、移行や大量の仮想マシンを必要としない開発、テスト、および小規模なデプロイメントに役立ちます。ローカルストレージプールは、ライブマイグレーションに使用できないため、多くの実稼働環境には適していない場合があります。
- ネットワーク (共有) ストレージプール
- ネットワークストレージプールには、標準プロトコルを使用してネットワーク経由で共有されるストレージデバイスが含まれます。virt-manager を使用してホスト間で仮想マシンを移行する場合はネットワークストレージが必要ですが、virsh を使用して移行する場合は任意です。仮想マシンの移行の詳細は、15章KVM の移行 を参照してください。
- ディレクトリーベースのストレージプール
- ディスクベースのストレージプール
- パーティションベースのストレージプール
- GlusterFS ストレージプール
- iSCSI ベースのストレージプール
- LVM ベースのストレージプール
- NFS ベースのストレージプール
- SCSI デバイスを使用した vHBA ベースのストレージプール
- マルチパスベースのストレージプール
- RBD ベースのストレージプール
- sheepdog ベースのストレージプール
- vstorage ベースのストレージプール
- ZFS ベースのストレージプール
13.2.2. ストレージプールの作成
13.2.2.1. virsh を使用したストレージプールの作成
手順13.2 virsh を使用したストレージプールの作成
推奨事項を読み、前提条件がすべて満たされていることを確認します。
ストレージプールによっては、このガイドでは特定の方法に従うことが推奨されます。また、一部のタイプのストレージプールには前提条件があります。推奨事項および前提条件 (存在する場合) を表示する場合は、「ストレージプール固有のもの」 を参照してください。ストレージプールの定義
ストレージプールは永続的または一時的なものにできます。永続ストレージプールは、ホストマシンのシステムを再起動しても維持します。一時的なストレージプールは、ホストが再起動すると削除されます。次のいずれかを行います。- 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
にマッピングされた一時的なファイルシステムベースのストレージプールを作成します。# 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 インターフェイスを使用する場合、コマンド内のオプション名は任意です。オプション名を使用しない場合は、指定する必要のないフィールドにハイフンを使用します。
プールが作成されたことを確認します。
virsh pool-list --allを使用して、存在するすべてのストレージプールのリストを表示します。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs inactive no
ストレージプールのターゲットパスの定義
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
オプションが指定されている場合を除き、ソースストレージデバイスのデータフォーマットが、選択したストレージプールタイプと異なることを検出すると、ビルドに失敗します。ストレージプールを起動します。
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 コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。自動起動を有効にする (オプション)
デフォルトでは、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
が起動するたびに自動的に起動するようになりました。ストレージプールを確認します。
ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 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. Virtual Machine Manager を使用したストレージプールの作成
手順13.3 Virtual Machine Manager を使用したストレージプールの作成
ストレージプールを作成するメディアを準備します。
これは、ストレージプールのタイプにより異なります。詳細は 「ストレージプール固有のもの」 を参照してください。この例では、GUID Partition Table でディスクに再ラベル付けする必要がある場合があります。ストレージ設定を開く
- Virtual Machine Manager で、設定するホスト接続を選択します。Edit メニューを開き、Connection Details を選択します。
- Connection Details ウィンドウの Storage タブをクリックします。
図13.1 ストレージタブ
新しいストレージプールを作成します。
注記Virtual Machine Manager を使用して、永続ストレージプールのみを作成できます。一時ストレージプールは、virsh を使用してのみ作成できます。新しいストレージプールの追加 (パート 1)
ウィンドウんの下部の ボタンをクリックします。Add a New Storage Pool ウィザードが表示されます。ストレージプールの Name を入力します。この例では、guest_images_fs という名前を使用します。Type ドロップダウンリストから、作成するストレージプールの種類を選択します。この例では、fs: Pre-Formatted Block Device を使用しています。図13.2 ストレージプールの名前とタイプ
Forward ボタンを選択して続行します。新しいプールの追加 (パート 2)
図13.3 ストレージプールのパス
関連するパラメーターを使用してストレージプールを設定します。各タイプのストレージプールのパラメーターの詳細は、「ストレージプール固有のもの」 を参照してください。ストレージプールの種類によっては、Build Pool チェックボックスが表示されます。ストレージからストレージプールを構築する場合は、Build Pool チェックボックスをチェックします。詳細を確認し、Finish をクリックしてストレージプールを作成します。
13.2.3. ストレージプール固有のもの
13.2.3.1. ディレクトリーベースのストレージプール
パラメーター
表13.1 ディレクトリーベースのストレージプールのパラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='dir'> | [type] directory | dir: ファイルシステムディレクトリー |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target path_to_pool | ターゲットパス |
例
/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
ディレクトリーに基づいてストレージプールを作成するための、Virtual Machine Manager の Add a New Storage Pool ダイアログボックスの例を示しています。
図13.4 新しいディレクトリーベースのストレージプールの例を追加します。
13.2.3.2. ディスクベースのストレージプール
推奨事項
- 使用されている libvirt のバージョンに応じて、ディスクをストレージプール専用にすると、現在ディスクデバイスに格納されているすべてのデータが再フォーマットされて消去される可能性があります。ストレージプールを作成する前に、ストレージデバイスのデータのバックアップを作成することを強く推奨します。
- ゲストには、ディスク全体またはブロックデバイス (
/dev/sdb
など) への書き込みアクセス権を付与しないでください。パーティション (/dev/sdb1
など) または LVM ボリュームを使用します。ブロックデバイス全体をゲストに渡すと、ゲストはブロックデバイスをパーティションに分割するか、ブロックデバイスに独自の LVM グループを作成します。これにより、ホストの物理マシンがこのようなパーティションや LVM グループを検出し、エラーが発生する場合があります。
前提条件
# 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.
#
パラメーター
表13.2 ディスクベースのストレージプールのパラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='disk'> | [type] disk | disk: 物理ディスクデバイス |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ストレージデバイスを指定するパス。たとえば、/dev/sdb |
<source> | source-dev path_to_disk | ソースパス |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target path_to_pool | ターゲットパス |
例
<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 --source-format=gpt --source-dev=/dev/sdb --target /dev
Pool phy_disk defined
図13.5 新しいディスクベースのストレージプールの例を追加します。
13.2.3.3. ファイルシステムベースのストレージプール
推奨事項
/dev/sdb
など) をストレージプールとして割り当てないでください。ゲストには、ディスク全体またはブロックデバイスへの書き込みアクセス権を付与しないでください。この方法は、パーティション (/dev/sdb1
など) をストレージプールに割り当てる場合に限り使用してください。
前提条件
# mkfs.ext4 /dev/sdc1
パラメーター
表13.3 ファイルシステムベースのストレージプールパラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='fs'> | [type] fs | fs: フォーマット済みブロックデバイス |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
パーミッションを指定するパス。たとえば、/dev/sdc1 |
<source> | [source] path_to_partition | ソースパス |
ファイルシステムのタイプ (ext4 など)。 |
<format type='fs_type' /> | [ソースフォーマット]FS-format | 該当なし |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | [target] path_to_pool | ターゲットパス |
例
<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
図13.6 新しいファイルシステムベースのストレージプールの例を追加します。
13.2.3.4. GlusterFS ベースのストレージプール
推奨事項
前提条件
手順13.4 Gluster サーバーの準備
- 次のコマンドを使用してそのステータスをリスト表示して、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
- glusterfs-fuse パッケージがインストールされていない場合はインストールします。
- virt_use_fusefs ブール値が有効になっていない場合は有効にします。有効になっていることを確認します。
# setsebool virt_use_fusefs on # getsebool virt_use_fusefs virt_use_fusefs --> on
パラメーター
表13.4 GlusterFS ベースのストレージプールパラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='gluster'> | [type] gluster | Gluster: Gluster ファイルシステム |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
Gluster サーバーのホスト名または IP アドレス |
<source> | source-host hostname | ホスト名 |
Gluster サーバーの名前 | <name='Gluster-name' /> | source-name Gluster-name | ソース名 |
ストレージプールに使用される Gluster サーバーのパス。 |
<dir path='Gluster-path' /> | source-path Gluster-path | ソースパス |
例
<pool type='gluster'> <name>Gluster_pool</name> <source> <host name='111.222.111.222'/> <dir path='/'/> <name>gluster-vol1</name> </source> </pool>
# pool-define-as --name Gluster_pool --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /
Pool Gluster_pool defined
図13.7 新しい GlusterFS ベースのストレージプールの例を追加します。
13.2.3.5. iSCSI ベースのストレージプール
推奨事項
前提条件
手順13.5 iSCSI ターゲットの作成
targetcli パッケージのインストール
# yum install targetcli
targetcli コマンドセットの起動
# targetcli
ストレージオブジェクトの作成
ストレージプールを使用して、3 つのストレージオブジェクトを作成します。- ブロックストレージオブジェクトの作成
/backstores/block
ディレクトリーに移動します。- create コマンドを実行します。
# create [block-name][filepath]
以下に例を示します。# create block1 dev=/dev/sdb1
- fileio オブジェクトの作成
/fileio
ディレクトリーに移動します。- create コマンドを実行します。
# create [fileio-name][image-name] [image-size]
以下に例を示します。# create fileio1 /foo.img 50M
- ramdisk オブジェクトの作成
/ramdisk
ディレクトリーに移動します。- create コマンドを実行します。
# create [ramdisk-name] [ramdisk-size]
以下に例を示します。# create ramdisk1 1M
- この手順で作成したディスクの名前を書き留めておきます。これらは後で使用されます。
iSCSI ターゲットの作成
/iscsi
ディレクトリーに移動します。- ターゲットの作成には、以下の 2 つの方法があります。
- パラメーターを指定せずに create コマンドを実行します。iSCSI qualified name (IQN) は自動的に生成されます。
- IQN とサーバーを指定して create コマンドを実行します。以下に例を示します。
# create iqn.2010-05.com.example.server1:iscsirhel7guest
ポータル IP アドレスの定義
iSCSI 経由でブロックストレージをエクスポートするには、最初にポータル、LUN、および access control lists ACL を設定する必要があります。ポータルには、ターゲットが監視する IP アドレスと TCP、および接続するイニシエーターが含まれます。iSCSI はポート 3260 を使用します。このポートはデフォルトで設定されています。ポート 3260 への接続:/tpg
ディレクトリーに移動します。- 以下のコマンドを実行します。
# portals/ create
このコマンドを実行すると、ポート 3260 をリッスンしている利用可能な IP アドレスがすべて使用できるようになります。ポート 3260 をリッスンする IP アドレスを 1 つだけにする場合は、コマンドの末尾に IP アドレスを追加します。以下に例を示します。# portals/ create 143.22.16.33
LUN の設定と、ストレージオブジェクトのファブリックへの割り当て
この手順では、ストレージオブジェクトの作成 で作成したストレージオブジェクトを使用します。- ポータルの IP アドレスの定義 で作成した TPG の
luns
ディレクトリーに移動します。以下に例を示します。# iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest
- 最初の LUN を ramdisk に割り当てます。以下に例を示します。
# create /backstores/ramdisk/ramdisk1
- 2 番目の LUN をブロックディスクに割り当てます。以下に例を示します。
# create /backstores/block/block1
- 3 番目の LUN を fileio ディスクに割り当てます。以下に例を示します。
# create /backstores/fileio/fileio1
- 作成される 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]
各イニシエーターの ACL の作成
イニシエーターの接続時に認証を有効にします。指定した LUN を、指定したイニシエーターに制限することもできます。ターゲットとイニシエーターには一意の名前があります。iSCSI イニシエーターは IQN を使用します。- イニシエーター名を使用して、iSCSI イニシエーターの IQN を検索します。以下に例を示します。
# cat /etc/iscsi/initiator2.iscsi InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest
この IQN は、ACL を作成するために使用されます。 acls
ディレクトリーへ移動します。- 次のいずれかを実行して 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
この手順を完了したら、ストレージプールをセキュリティー保護 して続行します。設定を保存します。
以前の起動設定を上書きして、設定を永続化します。# saveconfig
サービスを有効にします。
次回の起動時に保存した設定を適用するには、サービスを有効にします。# systemctl enable target.service
オプションの手順
手順13.6 RAID アレイでの論理ボリュームの設定
RAID5 アレイの作成
RAID5 アレイの作成方法は、『Red Hat Enterprise Linux 7 Storage Administration Guide』 を参照してください。RAID5 アレイに LVM 論理ボリュームを作成する
RAID5 アレイで LVM 論理ボリュームを作成する方法は、『Red Hat Enterprise Linux 7 Logical Volume Manager Administration Guide』 を参照してください。
手順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 デバイスの接続のテスト
新しい 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.
デバイスの取り外し
# 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 ストレージプールで libvirt のシークレットを使用する
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>
シークレットの定義
# virsh secret-define secret.xml
UUID の確認
# virsh secret-list UUID Usage -------------------------------------------------------------------------------- 2d7891af-20be-4e5e-af83-190e8a922360 iscsi iscsirhel7secret
UID へのシークレットの割り当て
以下のコマンドを使用して、前の手順の出力の UUID に、シークレットを割り当てます。これにより、CHAP ユーザー名とパスワードが、libvirt が制御するシークレットリストにあることが保証されます。# MYSECRET=`printf %s "password123" | base64` # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
ストレージプールに認証エントリーを追加します。
virsh edit を使用して、ストレージプールの XML ファイル内の<source>
エントリーを変更し、authentication type
、username
、および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>
が<source>
要素内に指定されます。認証は一部のプールソース (iSCSI および RBD) のプロパティーであるため、これはプールソースの検索場所を説明する要素となります。ドメインのサブ要素である<disk>
の場合、iSCSI ディスクまたは RBD ディスクに対する認証は、ディスクのプロパティーになります。また、ディスクのサブ要素<auth>
は、ストレージプールのサブ要素とは異なります。<auth username='redhat'> <secret type='iscsi' usage='iscsirhel7secret'/> </auth>
変更を有効にします。
この変更をアクティブにするには、ストレージプールを起動する必要があります。- ストレージプールが起動していない場合は、virsh を使用したストレージプールの作成 の手順に従ってストレージプールを定義し、起動します。
- プールがすでに起動している場合は、次のコマンドを入力してストレージプールを停止し、再起動します。
# virsh pool-destroy iscsirhel7pool # virsh pool-start iscsirhel7pool
パラメーター
表13.5 iSCSI ベースのストレージプールパラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='iscsi'> | [type] iscsi | iscsi: iSCSI ターゲット |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ホストの名前。 |
<source> | source-host hostname | ホスト名 |
iSCSI IQN |
device path="iSCSI_IQN" /> | source-dev iSCSI_IQN | ソース IQN |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target path_to_pool | ターゲットパス |
(必要に応じて) iSCSI イニシエーターの IQN。これは、ACL が LUN を特定のイニシエーターに制限する場合に限り必要です。 |
<initiator> | 以下の注記を参照してください。 | イニシエーター IQN |
例
<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>
# 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
図13.8 新しい iSCSI ベースのストレージプールの例を追加します。
13.2.3.6. LVM ベースのストレージプール
推奨事項
- LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
- libvirt は、シン論理ボリュームに対応しますが、シンストレージプールの機能は提供しません。
- LVM ベースのストレージプールは、ボリュームグループです。Logical Volume Manager コマンド、または virsh コマンドを使用して、ボリュームグループを作成できます。virsh インターフェイスを使用してボリュームグループを管理する場合は、virsh コマンドを使用してボリュームグループを作成します。ボリュームグループの詳細は、『Red Hat Enterprise Linux Logical Volume Manager Administration Guide』 を参照してください。
- LVM ベースのストレージプールには、完全なディスクパーティションが必要です。この手順で新しいパーティションまたはデバイスをアクティベートすると、パーティションはフォーマットされ、すべてのデータが削除されます。ホストの既存のボリュームグループ (VG) を使用すると、何も消去されません。以下の手順を開始する前に、ストレージデバイスのバックアップを作成することが推奨されます。LVM ボリュームグループの作成方法は、『Red Hat Enterprise Linux Logical Volume Manager Administration Guide』 を参照してください。
- 既存の VG に LVM ベースのストレージプールを作成する場合は、pool-build コマンドを実行しないでください。
パラメーター
表13.6 LVM ベースのストレージプールパラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='logical'> | [type] logical | 論理: LVM ボリュームグループ |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ストレージプールのデバイスのパス |
<source> | source-dev device_path | ソースパス |
ボリュームグループの名前 | <name='VG-name' /> | source-name VG-name | ソースパス |
仮想グループの形式 |
<format type='lvm2' /> | source-format lvm2 | 該当なし |
ターゲットパス |
<target> | target target-path | ターゲットパス |
<source> <device path='/dev/sda1'/> <device path='/dev/sdb3'/> <device path='/dev/sdc2'/> ... </source>
例
<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>
# 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
図13.9 新しい LVM ベースのストレージプールの例を追加します。
13.2.3.7. NFS ベースのストレージプール
前提条件
パラメーター
表13.7 NFS ベースのストレージプールパラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='netfs'> | [type] netfs | netfs: Network Exported Directory |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
マウントポイントが置かれている NFS サーバーのホスト名。これは、ホスト名または IP アドレスになります。 |
<source> | source-host host_name | ホスト名 |
NFS サーバーで使用されるディレクトリー |
<dir path='source_path' /> | source-path source_path | ソースパス |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target target_path | ターゲットパス |
例
<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>
# virsh pool-define-as nfspool netfs --source-host localhost --source-path /home/net_mount --target /var/lib/libvirt/images/nfspool
Pool nfspool defined
図13.10 新しい NFS ベースのストレージプールの追加の例
13.2.3.8. SCSI デバイスを使用する vHBA ベースのストレージプール
推奨事項
scsi_host#
または WWNN/WWPN ペアとして定義できます。
scsi_host#
として定義され、ハードウェアがホストマシンに追加されている場合、scsi_host#
の割り当てが変更される可能性があります。したがって、WWNN/WWPN のペアを使用して親 HBA を定義することが推奨されます。
- libvirt コードは、virsh コマンドの出力を使用すると、LUN のパスを簡単に見つけることができます。
- 仮想マシンの移行には、ターゲットマシンで同じ vHBA 名を持つストレージプールの定義と起動のみが必要です。これを行うには、仮想マシンの XML 設定で、vHBA LUN、libvirt ストレージプール、およびボリューム名を指定する必要があります。例は、「SCSI デバイスを使用する vHBA ベースのストレージプール」 を参照してください。
'scsi'
ストレージプール XML ファイルを作成します。同じ物理 HBA 上のストレージプールを使用する 1 つの vHBA を作成する場合は、システムの /dev/disk/by-{path|id|uuid|label}
のような場所など、<path>
値に安定した場所を使用することが推奨されます。
<path>
フィールドの値を /dev/
のみにする必要があります。それ以外の場合は、ストレージプールボリュームが 1 つの vHBA からしか確認できず、NPIV 設定で、ホストのデバイスを複数のゲストに公開することができません。
前提条件
手順13.10 vHBA の作成
ホストシステムで HBA の場所を特定します。
ホストシステムの HBA を特定するには、virsh nodedev-list --cap vports コマンドを使用します。以下の例は、vHBA に対応する HBA が 2 つ搭載されているホストを示しています。# virsh nodedev-list --cap vports scsi_host3 scsi_host4
HBA の詳細を確認します。
virsh nodedev-dumpxml HBA_device コマンドを実行して、HBA の詳細を表示します。# virsh nodedev-dumpxml scsi_host3
コマンドの出力には、vHBA の作成に使用する<name>
、<wwnn>
、および<wwpn>
フィールドの一覧が表示されます。サポートされる vHBA の最大数が<max_vports>
に表示されます。以下に例を示します。<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 の作成後に更新されます。vHBA ホストデバイスの作成
vHBA ホスト用に、以下のいずれかの XML ファイルを作成します。この例では、ファイル名は vhba_host3.xml です。次の例では、scsi_host3
を使用して親 vHBA を説明します。# cat vhba_host3.xml <device> <parent>scsi_host3</parent> <capability type='scsi_host'> <capability type='fc_host'> </capability> </capability> </device>
次の例では、WWNN/WWPN のペアを使用して親 vHBA を説明します。# 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 アップストリームページ を参照してください。vHBA ホストデバイスに新しい vHBA を作成します。
vhba_host3 に基づいて vHBA を作成するには、virsh nodedev-create コマンドを使用します。# virsh nodedev-create vhba_host3.xml Node device scsi_host5 created from vhba_host3.xml
vHBA の確認
virsh nodedev-dumpxml コマンドを使用して、新しい vHBA の詳細 (scsi_host5
) を確認します。# 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>
パラメーター
表13.8 vHBA ベースのストレージプールパラメーター
説明 | XML | pool-define-as |
---|---|---|
ストレージプールのタイプ | <pool type='scsi'> | scsi |
ストレージプールの名前 | <name>name</name> | --adapter-name name |
vHBA の識別子。parent 属性はオプションです。 |
<source> |
[--adapter-parent parent] |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<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>
フィールドで、パスを変更して NPIV LUN を使用できる物理 HBA の親を識別するために使用できます。このフィールドの scsi_hostN
は、vports
属性および max_vports
属性と組み合わせて、親 ID を完了します。parent
属性、parent_wwnn
属性、parent_wwpn
属性、または parent_fabric_wwn
属性では、ホストの再起動後に同じ HBA が使用されるというさまざまな程度の保証を提供します。
parent
を指定しないと、libvirt は、NPIV に対応する最初のscsi_hostN
アダプターを使用します。parent
のみが指定されている場合、設定に SCSI ホストアダプターを追加すると、問題が発生する可能性があります。parent_wwnn
またはparent_wwpn
を指定した場合は、ホストの再起動後に同じ HBA が使用されます。parent_fabric_wwn
を使用する場合は、ホストの再起動後、使用されているscsi_hostN
に関係なく、同じファブリックの HBA が選択されます。
例
parent
属性を使用して、SCSI ホストデバイスを識別するいくつかのストレージプールの 1 つであるストレージプールの例になります。
<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>
# 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
parent_wwnn
属性、parent_wwpn
属性、または parent_fabric_wwn
属性を定義する方法は提供されていません。
vHBA LUN を使用するように仮想マシンを設定する
- 仮想マシンの XML に、仮想マシンにディスクボリュームを作成します。
<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>
fast_io_fail_tmo
オプションおよび dev_loss_tmo
オプションを変更することが推奨されます。詳細は、Reconnecting to an exposed LUN after a hardware failure を参照してください。
13.2.4. ストレージプールの削除
13.2.4.1. ストレージプールを削除するための前提条件
13.2.4.2. virsh を使用したストレージプールの削除
- 定義したストレージプールのリストを表示します。
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_pool active yes
- 削除するストレージプールを停止します。
# virsh pool-destroy guest_images_disk
- (任意) ストレージプールの種類によっては、ストレージプールが含まれるディレクトリーを削除できる場合があります。
# virsh pool-delete guest_images_disk
- ストレージプールの定義を削除します。
# virsh pool-undefine guest_images_disk
- プールが定義されていないことを確認します。
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes
13.2.4.3. Virtual Machine Manager を使用したストレージプールの削除
- Connection Details ウィンドウ の Storage タブにあるストレージプールリストで、削除するストレージプールを選択します。
- Storage ウィンドウの下部にある をクリックします。これによりストレージプールが停止し、使用中のリソースがすべて解放されます。
- をクリックします。注記アイコンは、ストレージプールが停止している場合にのみ有効になります。ストレージプールが削除されます。