ドメインの設定ファイル内にある Xen ドメインのディスク設定は非常に直感的で、下記のように記述します:
disk = [ 'format=raw,vdev=hdc,access=ro,devtype=cdrom,target=/root/image.iso' ]
上記では /root/image.iso
というファイルをベースにしたディスク型のブロックデバイスを定義しています。ゲスト内では、このディスクは hdc
として表示され、読み込み専用 ( ro
) に設定されています。デバイスの種類は cdrom
で、 raw
形式を使用する設定になっています。
下記の設定例は上記と同じ設定ですが、よりシンプルなカンマ区切りの書式を使用しています:
disk = [ '/root/image.iso,raw,hdc,ro,cdrom' ]
同じ行内に複数のディスク定義を設定したい場合は、それぞれをカンマ区切りで指定してください。パラメータを指定しない場合、既定値が指定されているものとみなされます:
disk = [ '/root/image.iso,raw,hdc,ro,cdrom','/dev/vg/guest-volume,,hda','...' ]
ソースとなるブロックデバイスやディスクイメージのファイルパスを指定します。
イメージファイルの形式を指定します。既定値は raw
です。
ゲスト側での仮想デバイスを指定します。設定できる値には hd[x], xvd[x], sd[x] などがあります。詳しくは /usr/share/doc/packages/xen/misc/vbd-interface.txt
(英語) ファイルをお読みください。このパラメータは必須です。
ゲスト側でのブロックデバイスを読み込み専用とするか、読み書きできるものとするかを指定します。設定可能な値は ro
または r
(読み込み専用), rw
または w
(読み書き可能) から指定します。既定値は devtype=cdrom
の場合は ro
に、それ以外のデバイスの場合は rw
になります。
仮想デバイスの種類を指定します。設定可能な値は cdrom
です。
使用するバックエンド実装を指定します。設定可能な値は phy
, tap
, qdisk
のいずれかです。通常は、バックエンドの種類を自動設定するため、このオプションを指定する必要はありません。
target
が通常のホストパスではなく、実行可能なプログラムで解釈される情報である場合に指定します。ここで指定したスクリプトファイルが絶対パスではない場合、 /etc/xen/scripts
内にあるものとして扱われます。これらのスクリプトは通常、 block-<スクリプト名>
と呼ばれます。
仮想ディスクの指定方法に関する詳細は、 /usr/share/doc/packages/xen/misc/xl-disk-configuration.txt
(英語) をお読みください。
ローカルのディスクイメージをマッピングする (詳しくは 27.1項 「物理ストレージから仮想ディスクへのマッピング」 をお読みください) 場合と同様に、ネットワークディスクを仮想ディスクとしてマッピングすることもできます。
下記の例では、複数の Ceph モニタと cephx 認証が有効化された RBD (RADOS Block Device) ディスクに対して、マッピングを設定しています:
disk = [ 'vdev=hdc, backendtype=qdisk, \ target=rbd:libvirt-pool/new-libvirt-image:\ id=libvirt:key=AQDsPWtW8JoXJBAAyLPQe7MhCC+JPkI3QuhaAw==:auth_supported=cephx;none:\ mon_host=137.65.135.205\\:6789;137.65.135.206\\:6789;137.65.135.207\\:6789' ]
NBD (Network Block Device) のディスクマッピング例は下記のとおりです:
disk = [ 'vdev=hdc, backendtype=qdisk, target=nbd:151.155.144.82:5555' ]
仮想マシンが動作している場合、ファイルとして存在する仮想ディスクは、ホスト内でループバックデバイスを使用します。既定では、ホスト側では 64 個までのループバックデバイスを使用することができます。
ホスト側でそれ以上のファイルベースの仮想ディスクを使用する場合は、ホスト側の /etc/modprobe.conf.local
ファイル内に下記のオプションを追加して、同時に利用可能なループバック数を増やしておく必要があります。
options loop max_loop=x
ここで、 x
には使用したいループバックデバイスの最大数を指定します。
設定した内容は、モジュールの再読み込み時に反映されます。
rmmod loop
および modprobe loop
を実行することで、モジュールの読み込み解除と再読み込みを行うことができます。なお、 rmmod
がうまく動作しない場合、既存のループバックデバイスの使用を全て解除するか、もしくはコンピュータを再起動してください。
VM ゲスト システムに新しいブロックデバイスを追加することもできますが、場合によっては既存のブロックデバイスのサイズを増やしたほうが都合のよい場合があります。 VM ゲスト の作成の際にそのような拡張を考慮しておきたい場合は、下記のような設定を行っておくことをお勧めします:
サイズを増やすことのできるブロックデバイスを使用するようにしてください。具体的には LVM デバイスやファイルベースのイメージがそれにあたります。
VM ゲスト 内部ではデバイスのパーティションを作成せずに使用するものとし、メインとなるデバイスを直接マウントしてお使いください。たとえば /dev/xvdb
に対してパーティションを作成する代わりに、 /dev/xvdb
を直接マウントしてください。
サイズを変更することのできるファイルシステムを使用してください。たとえば ext3 などのファイルシステムでは、サイズを変更するためにいくつかの機能を無効化しなければならないこともあります。また、オンラインでマウントしたままサイズを変更することができるファイルシステムとして、 XFS
があります。 xfs_growfs
コマンドを使用することで、ブロックデバイス側のサイズ変更を行ったあと、ファイルシステム側のサイズ変更を行うことができます。 XFS
の詳細について、詳しくは man 8 xfs_growfs
をお読みください。
VM ゲスト に対して割り当てられている LVM デバイスをサイズ変更する場合、新しいサイズは自動的に VM ゲスト に伝達されます。新しいブロックデバイスのサイズを知らせるために必要なアクションはありません。
ファイルシステムのイメージを使用する場合、ループバックデバイスを使用してイメージファイルをゲストに割り当てます。イメージのサイズ変更と VM ゲスト 側でのサイズ情報の伝達について、詳しくは 29.2項 「スパースイメージファイルとディスク領域」 をお読みください。
ソフトウエア RAID セット上に構築されてた LVM 環境や LVM 環境上に構築されたソフトウエア RAID セットなど、 dmmd
( 「device mapper—multi disk」 ) で提供されるディスク環境のような高度なストレージ環境の管理を支援するため、いくつかのスクリプトが提供されています。これらのスクリプトは xen-tools パッケージ内に含まれていて、インストール後には /etc/xen/scripts
ディレクトリ内に存在します:
block-dmmd
block-drbd-probe
block-npiv
これらのスクリプトを使用すると、外部のコマンドがゲストに対してブロックデバイスを提供する前に、そのブロックデバイスに対して何らかの処理や一連のアクションを実行することができるようになります。
これらのスクリプトは従来、 script=
のディスク設定書式を利用して xl
や libxl
で使用できていたものです。これらはディスクの <source>
要素内でブロックスクリプトのベース名を指定することで、 libvirt でも使用できるようになっています。たとえば下記のようになります:
<source dev='dmmd:md;/dev/md0;lvm;/dev/vgxen/lv-vm01'/>