13.3. ストレージボリュームの使用
13.3.1. ストレージボリュームの概念
--pool
storage_pool volume_name の形式を取ります。
# virsh vol-info --pool guest_images firstimage
Name: firstimage
Type: block
Capacity: 20.00 GB
Allocation: 20.00 GB
13.3.2. ストレージボリュームの作成
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 を使用したストレージボリュームの作成
ストレージ設定を開く
- Virtual Machine Manager で Edit メニューを開き、Connection Details を選択します。
- Connection Details ウィンドウの Storage タブをクリックします。
図13.11 ストレージタブ
Connection Details ウィンドウの左側のペインには、ストレージプールのリストが表示されます。
ストレージボリュームを作成するストレージプールを選択します。
ストレージプールのリストで、ストレージボリュームを作成するストレージプールをクリックします。選択したストレージプールに設定したストレージボリュームは、画面下部の Volumes ペインに表示されます。新しいストレージボリュームの追加
Volumes リストの上にある ボタンをクリックします。Add a Storage Volume のダイアログが表示されます。図13.12 ストレージボリュームの作成
ストレージボリュームの設定
以下のパラメーターを使用して、ストレージボリュームを設定します。- Name フィールドにストレージプールの名前を入力します。
- Format リストからストレージボリュームの形式を選択します。
- Max Capacity フィールドに、ストレージボリュームの最大サイズを入力します。
作成を終了します。
Add a Storage Volume のダイアログが閉じ、ストレージボリュームが Volumes リストに表示されます。をクリックします。
13.3.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 new-vol vdisk
13.3.4.2. ストレージボリュームへのデータのアップロード
# virsh vol-upload --pool pool-or-uuid --offset bytes --length bytes
vol-name-or-key-or-path local-file
--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. ストレージボリュームへのデータのダウンロード
# vol-download --pool pool-or-uuid --offset bytes --length bytes
vol-name-or-key-or-path local-file
--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. ストレージボリュームのサイズ変更
# virsh vol-resize --pool pool-or-uuid
vol-name-or-path pool-or-uuid capacity --allocate
--delta
--shrink
--pool pool-or-uuid
が必要です。また、このコマンドでサイズを変更するには、ボリュームのvol-name-or-key-or-path、名前、鍵、またはパスが必要です。
--allocate
が指定されていない限り、新しい容量はスパースである可能性があります。通常、容量は新しいサイズになりますが、--delta
が存在する場合は、既存のサイズに追加されます。--shrink
が存在しない限り、ボリュームを縮小しようとすると失敗します。
--shrink
が指定されていない限り、容量 を負にすることはできず、負の符号は必要ないことに注意してください。capacity はスケーリングされた整数であり、接尾辞がない場合はデフォルトでバイトになります。さらに、このコマンドは、アクティブなゲストが使用していないストレージボリュームに対してのみ安全であることに注意してください。ライブサイズの変更については、「ゲスト仮想マシンのブロックデバイスのサイズの変更」 を参照してください。
例13.3 ストレージボリュームのサイズを変更
# virsh vol-resize --pool disk-pool sde1 100M
13.3.5. ストレージボリュームの削除
13.3.5.1. virsh を使用したストレージボリュームの削除
# 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 を使用したストレージボリュームの削除
ストレージ設定を開く
- Virtual Machine Manager で Edit メニューを開き、Connection Details を選択します。
- Connection Details ウィンドウの Storage タブをクリックします。
図13.13 ストレージタブ
Connection Details ウィンドウの左側のペインには、ストレージプールのリストが表示されます。
削除するストレージボリュームを選択します。
- ストレージプールのリストで、ストレージボリュームが抽象化されたストレージプールをクリックします。選択したストレージプールに設定されているストレージボリュームのリストが、画面下部の Volumes ペインに表示されます。
- 削除するストレージボリュームを選択します。
ストレージボリュームを削除します。
- ボタン (Volumes リストの上) をクリックします。確認ダイアログが表示されます。
13.3.6. ゲストへのストレージデバイスの追加
13.3.6.1. virsh を使用したゲストへのストレージデバイスの追加
<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
# 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. ゲストへのストレージボリュームの追加
仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。
root で virt-manager コマンドを実行するか、ApplicationsSystem Tools Virtual Machine Manager を開き、virt-manager を開きます。 図13.14 Virtual Machine Manager ウィンドウ
ストレージボリュームを追加するゲスト仮想マシンを選択します。をクリックします。ハードウェアの詳細ウィンドウが表示されます。図13.15 Hardware Details ウィンドウ
Add New Virtual Hardware ウィンドウが開きます。
ハードウェアタイプペインで Storage が選択されていることを確認します。図13.16 Add New Virtual Hardware ウィンドウ
ストレージボリュームのリストを表示します。
Select or create custom storage オプションのボタンを選択します。図13.17 Select Storage Volume ウィンドウ
ストレージボリュームを選択します。
Select Storage Volume ウィンドウの左側にあるリストからストレージプールを選択します。選択したストレージプールのストレージボリュームのリストが、Volumes リストに表示されます。注記ストレージプールは、Select Storage Volume ウィンドウから作成できます。詳細は、「Virtual Machine Manager を使用したストレージプールの作成」 を参照してください。Volumes リストからストレージボリュームを選択します。注記Select Storage Volume ウィンドウから、ストレージボリュームを作成できます。詳細は、「Virtual Machine Manager を使用したストレージボリュームの作成」 を参照してください。ストレージボリュームの設定
Device type リストからデバイスタイプを選択します。利用可能なタイプは、ディスクデバイス、フロッピーデバイス、および LUN パススルーです。Bus type リストからバスの種類を選択します。利用可能なバスの種類は、選択したデバイスタイプによって異なります。Cache modeリストからキャッシュモードを選択します。利用可能なキャッシュモードは次のとおりです: Hypervisor default、none、writethrough、writeback、directsync、unsafe
13.3.6.2.2. ゲストへのデフォルトストレージの追加
/var/lib/libvirt/images/
ディレクトリーのファイルベースのイメージです。
仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。
root で virt-manager コマンドを実行するか、ApplicationsSystem Tools Virtual Machine Manager を開き、virt-manager を開きます。 図13.18 Virtual Machine Manager ウィンドウ
ストレージボリュームを追加するゲスト仮想マシンを選択します。をクリックします。ハードウェアの詳細ウィンドウが表示されます。図13.19 Hardware Details ウィンドウ
Add New Virtual Hardware ウィンドウが開きます。
ハードウェアタイプペインで Storage が選択されていることを確認します。図13.20 Add New Virtual Hardware ウィンドウ
ゲスト用のディスクの作成
Create a disk image for the virtual machine が選択できることを確認します。Create a disk image for the virtual machine オプションボタンの下にあるテキストボックスに、作成するディスクのサイズを入力します。
13.3.6.3. ゲストへの SCSI LUN ベースのストレージの追加
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 ベースのストレージプール」 を参照してください。
<disk device='lun'>
ゲストディスク設定は、この方法で割り当てることができます。使用環境に応じて、設定を置き換えます。
手順13.13 SCSI LUN ベースのストレージのゲストへの割り当て
- <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>
- sda.xml で作成したデバイスをゲスト仮想マシン (Guest1 など) に関連付けます。
# virsh attach-device --config Guest1 ~/sda.xml
注記--config
を指定して virsh attach-device コマンドを実行すると、ゲストを再起動してデバイスをゲストに永続的に追加する必要があります。また、--config
の代わりに--persistent
オプションを使用することもできます。これを使用すると、デバイスをゲストにホットプラグできます。
図13.21 virt-manager を使用した SCSI 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. ゲスト仮想マシンでのストレージコントローラーの管理
手順13.14 仮想 SCSI コントローラーの作成
- ゲスト仮想マシン (
Guest1
) の設定を表示し、以前から存在している SCSI コントローラーを検索します。# virsh dumpxml Guest1 | grep controller.*scsi
デバイスコントローラーが存在する場合は、このコマンドにより、次のような行が 1 つ以上出力されます。<controller type='scsi' model='virtio-scsi' index='0'/>
- 前の手順でデバイスコントローラーが表示されなかった場合は、以下の手順に従って、新しいファイルにデバイスコントローラーの説明を作成し、仮想マシンに追加します。
- 新しいファイルに
<controller>
要素を書き込んでデバイスコントローラーを作成し、このファイルを XML 拡張子で保存します。たとえば、virtio-scsi-controller.xml
となります。<controller type='scsi' model='virtio-scsi'/>
virtio-scsi-controller.xml
で作成したデバイスコントローラーをゲスト仮想マシン (例: Guest1) に関連付けます。# virsh attach-device --config Guest1 ~/virtio-scsi-controller.xml
この例では、--config
オプションはディスクと同じように動作します。詳細は、「ゲストへのストレージデバイスの追加」 を参照してください。
- 新しい 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. ゲストからのストレージデバイスの削除
13.3.7.1. virsh を使用した仮想マシンからのストレージの削除
# virsh detach-disk Guest1 vdb
13.3.7.2. Virtual Machine Manager を使用した仮想マシンからのストレージの削除
手順13.15 Virtual Machine Manager を使用した仮想マシンからのストレージの削除
仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。
root で virt-manager コマンドを実行するか、ApplicationsSystem Tools Virtual Machine Manager を開き、virt-manager を開きます。 ストレージデバイスを削除するゲスト仮想マシンを選択します。をクリックします。ハードウェアの詳細ウィンドウが表示されます。ゲスト仮想マシンからストレージを削除します。
ハードウェアの詳細ペインの左側にあるハードウェアのリストから、ストレージデバイスを選択します。