14.5. ストレージデバイスのゲストへの追加
- ファイルベースのストレージ。「ファイルベースのストレージのゲストへの追加」を参照してください。
- ブロックデバイス (CD-ROM、DVD およびフロッピーディスクを含む)。「ハードドライブと他のブロックデバイスのゲストへの追加」を参照してください。
- SCSI コントローラーおよびデバイス。お使いのホスト物理マシンでこれに対応できる場合、最大 100 の SCSI コントローラーを任意のゲスト仮想マシンに追加することができます。「ゲスト仮想マシンのストレージコントローラーの管理」を参照してください。
14.5.1. ファイルベースのストレージのゲストへの追加
手順14.1 ファイルベースのストレージの追加
- ストレージファイルを作成するか、または既存のファイルを使用します (IMG ファイルなど)。以下のコマンドでは、どちらもゲスト用の追加ストレージとして使用できる 4GB のファイルを作成します。
- ファイルベースのストレージイメージには、事前割り当てファイルを使用することをお勧めします。以下の
ddコマンドを使って事前割り当てファイルを作成します。#
dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1G count=4 - または、事前割り当てファイルの代わりにスパースファイルを作成することもできます。スパースファイルの方が短い時間で作成できるため、テストの目的で使用することに適しています。ただし、データ整合性またはパフォーマンス関連の問題があるため、実稼働環境に使用することはお勧めしません。
#
dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1G seek=4096 count=4
- 新しいファイル内に <disk> 要素を記述して追加のストレージを作成します。この例では、このファイル名は
NewStorage.xmlになります。<disk>要素は、ディスクのソースと仮想ブロックデバイスのデバイス名を記述します。デバイス名はゲスト内のすべてのデバイスの中で固有の名前にするようにしてください。このデバイス名によって、ゲストが仮想ブロックデバイスを検索する際に使用するバスが指定されます。次の例では、FileName.imgという名前のファイルベースのストレージコンテナーをソースとする virtio ブロックデバイスを定義しています。<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/FileName.img'/> <target dev='vdb'/> </disk>
デバイス名は、IDE や SCSI ディスクを指定する「hd」や「sd」で始まる名前にすることができます。設定ファイルには<address>サブ要素も組み込むことができ、バス上に新しいデバイスの位置を指定することができます。virtio ブロックデバイスの場合、これは PCI アドレスになるはずです。<address>サブ要素を省略すると、livbirt により次に使用できる PCI スロットの検索および割り当てが行われます。 - 以下のようにして CD-ROM を接続します。
<disk type='file' device='cdrom'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/FileName.img'/> <readonly/> <target dev='hdc'/> </disk >
NewStorage.xml内で定義されているデバイスをゲスト (Guest1) に追加します。#
virsh attach-device --config Guest1 ~/NewStorage.xml注記
この変更は、ゲストが破棄され、再起動された後にのみ適用されます。また、永続デバイスが追加できるのは永続ドメインに対してのみになります。永続ドメインとは、ドメインの設定をvirsh defineコマンドを使って保存したドメインを指します。ゲストが実行中の場合で、そのゲストが破棄されるまでの間に新しいデバイスを一時的に追加する場合は--configオプションを省略します。#
virsh attach-device Guest1 ~/NewStorage.xml注記
virshコマンドではattach-diskコマンドを使用することができます。このコマンドでは、より簡単な構文で限られた数のパラメーターを設定でき、XML ファイルを作成する必要がありません。以下に示すように、attach-diskコマンドは前述のattach-deviceコマンドと同じように使用できます。#
virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img vdb --cache nonevirsh attach-diskコマンドでも--configオプションを使用できる点に注意してください。- ゲストマシンを起動します (まだ稼働していない場合):
#
virsh start Guest1注記
以下は Linux ゲストに固有のステップになります。他のオペレーティングシステムは、複数の異なる方法で新規のストレージデバイスを処理します。他のシステムについては、該当するオペレーティングシステムのドキュメントを参照してください。 ディスクドライブのパーティション設定
これでゲストは/dev/vdbというハードディスクデバイスを持っていることになります。必要であれば、このディスクドライブにパーティションを設定し、フォーマットします。追加したデバイスが表示されない場合は、ゲストのオペレーティングシステムにディスクのホットプラグに関する問題が発生していることを示します。- 新規デバイスに対して
fdiskを開始します。#
fdisk /dev/vdbCommand (m for help): - 新規パーティションを作成するために
nを入力します。 - 次のように出力されます。
Command action e extended p primary partition (1-4)
プライマリーパーティションを作成するためにpを入力します。 - 使用できるパーティション番号を選択します。この例では、
1が入力され1番目のパーティションが選択されています。Partition number (1-4): 1
Enterを押して、デフォルトとなる 1 番目のシリンダーを入力します。First cylinder (1-400, default 1):
- パーティションのサイズを選択します。この例では、
Enterが押されてディスク全体が割り当てられています。Last cylinder or +size or +sizeM or +sizeK (2-400, default 400):
tを入力して、パーティションタイプを設定します。Command (m for help): t
- 直前のステップで作成したパーティションを選択します。この例ではパーティション番号が
1のパーティションを選択しています。この例で作成されたパーティションは 1 つだけであるため、fdisk によってパーティション 1 が自動的に選択されています。Partition number (1-4): 1
- Linux パーティションを作成するために
83を入力します。Hex code (type L to list codes): 83
wを入力して、変更を書き込み、終了します。Command (m for help): w
ext3ファイルシステムで新しいパーティションをフォーマットします。#
mke2fs -j /dev/vdb1
- マウントディレクトリーを作成して、ゲスト上にディスクをマウントします。この例では、ディレクトリーは myfiles に置かれています。
#
mkdir /myfiles#mount /dev/vdb1 /myfilesこれで、ゲストは仮想化されたファイルベースの追加ストレージデバイスを持つことになります。ただし、このストレージはゲストの/etc/fstabファイル内で定義しない限り、再起動後も永続的にマウントされることはない点に注意してください。/dev/vdb1 /myfiles ext3 defaults 0 0
14.5.2. ハードドライブと他のブロックデバイスのゲストへの追加
手順14.2 物理ブロックデバイスのゲストへの追加
- この手順は、ホスト物理マシン上のハードドライブをゲストに追加する方法を説明しています。これは、CD-ROM、DVD、およびフロッピーデバイスを含むすべての物理ブロックデバイスに適用されます。ホスト物理マシンにハードディスクデバイスを物理的に割り当てます。ドライブにデフォルトでアクセスできない場合に、ホスト物理マシンを設定します。
- 次のいずれかを行います。
- 新しいファイル内に
disk要素を記述して追加のストレージを作成します。この例では、このファイル名はNewStorage.xmlです。次の例は、ホスト物理マシンのパーティション/dev/sr0:用のデバイスベースの追加ストレージコンテナーが含まれる設定ファイルのセクションになります。<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/sr0'/> <target dev='vdc' bus='virtio'/> </disk> - 直前のセクションの指示に従って、デバイスをゲスト仮想マシンに割り当てます。または、以下のように
virsh attach-diskコマンドを使用することもできます。#
virsh attach-disk Guest1 /dev/sr0 vdc次のオプションを選択できることに注意してください。- 以下のように、
virsh attach-diskコマンドも--config、--type、および--modeオプションを受け入れます。#
virsh attach-disk Guest1 /dev/sr0 vdc --config --type cdrom --mode readonly - または、デバイスがハードドライブの場合には、
--typeで--type diskを使用することもできます。
- これでゲスト仮想マシンは、Linux の場合は
/dev/vdcという名前 (ゲスト仮想マシン OS の選択によって異なるがこれに類する名前) の新しいハードディスクデバイスを持つことになり、ゲスト仮想マシンのオペレーティングシステムに適した標準的な手順に従ってゲスト仮想マシンからディスクを初期化できるようになります。具体例については、手順14.1「ファイルベースのストレージの追加」を参照してください。
警告
14.5.3. SCSI LUN ベースのストレージのゲストへの追加
重要
sgio 属性は、特権のない SCSI Generical I/O (SG_IO) コマンドが device='lun' ディスクについてフィルターされるかどうかを制御します。sgio 属性は 'filtered' または 'unfiltered' として指定できますが、SG_IO ioctl コマンドを永続性保存の状態でゲスト上で渡せるようにするには 'unfiltered' に設定する必要があります。
sgio='unfiltered' の設定のほかにも、ゲスト間で LUN を共有するために <shareable> 要素を設定する必要があります。sgio 属性は、指定がない場合はデフォルトで 'filtered' に設定されます。
<disk> XML 属性 device='lun' は、以下のゲストディスク設定について有効です。
type='block'を<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'を<source protocol='iscsi'... />に対して指定します。<disk type='network' device='disk' 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'/> </source> <auth username='myuser'> <secret type='iscsi' usage='libvirtiscsi'/> </auth> <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 を使用する方法についての詳細は、「仮想マシンが vHBA LUN を使用するよう設定する」を参照してください。
<disk device='lun'> ゲストのディスク設定のいずれもこの方法で割り当てることができます。ご使用の環境に応じて設定を置き換えてください。
手順14.3 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注記
virsh attach-deviceコマンドを--configオプションを指定して実行するには、デバイスをゲストに永続的に追加するためにゲストを再起動する必要があります。または、--persistentオプションを--configの代わりに使用することができます。これを、デバイスをゲストにホットプラグするために使用することもできます。

図14.1 virt-manager を使用した SCSI 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
...14.5.4. ゲスト仮想マシンのストレージコントローラーの管理
手順14.4 仮想 SCSI コントローラーの作成
- ゲスト仮想マシン (
Guest1) の設定を表示して、すでに存在している SCSI コントローラーを探します。#
virsh dumpxml Guest1 | grep controller.*scsiデバイスコントローラーが存在する場合は、このコマンドは以下のように 1 つ以上の行を出力します。<controller type='scsi' model='virtio-scsi' index='0'/>
- 直前のステップでデバイスコントローラーが表示されない場合、新しいファイルでその 1 つを記述し、以下のステップを実行してそれを仮想マシンに追加します。
- 新しいファイルに
<controller>要素を書き込むことによってデバイスコントローラーを作成し、このファイルを XML 拡張子を付けて保存します。たとえば、NewHBA.xmlのようになります。<controller type='scsi' model='virtio-scsi'/>
virtio-scsi-controller.xmlで作成したばかりのデバイスコントローラーを使用中のゲスト仮想マシン (例: Guest1) に関連付けます。#
virsh attach-device --config Guest1 ~/virtio-scsi-controller.xmlこの例では、--configオプションはディスク接続の場合と同様の動作をします。詳細は、手順14.2「物理ブロックデバイスのゲストへの追加」を参照してください。
- 新規 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 7 ストレージ管理ガイド』のステップに従ってください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.