14.3. ゲストにストレージデバイスを追加する

このセクションでは、ゲストにストレージデバイスを追加する方法を説明します。必要なストレージのみを追加することができます。

14.3.1. ゲストにファイルベースのストレージを追加する

ファイルベースのストレージは、ホスト物理マシンのファイルシステム上に格納されるファイルの集合であり、ゲストに対して仮想化されたハードドライブとして動作します。ファイルベースのストレージを追加するには、次の手順を実行します。

手順14.1 ファイルベースのストレージを追加する

  1. ストレージファイルを作成するか、または既存のファイルを使用します (IMG ファイルなど)。以下のコマンドはどちらもゲスト用の追加ストレージとして使用できる 4GB のファイルを作成します。
    • ファイルベースのストレージイメージには、事前割り当てのファイルを使用することを推奨します。以下のように dd コマンドを使って事前割り当てのファイルを作成します。
      # dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M count=4096
    • または、事前割り当てファイルの代わりにスパースファイルを作成することもできます。スパースファイルの方が作成にかかる時間が短く、テストなどに適しています。ただし、データの整合性やパフォーマンス関連の問題があるため、実稼働環境には推奨できません。
      # dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M seek=4096 count=0
  2. 新しいファイルに <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 スロットの検索および割り当てが行なわれます。
  3. 以下のように 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 >
  4. 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 none
    virsh attach-disk コマンドも --config オプションを受け入れることに注意してください。
  5. ゲストマシンを開始します (まだ稼働していない場合):
    # virsh start Guest1

    注記

    以下のステップは Linux ゲストに固有なステップです。他のオペレーティングシステムでは、異なる方法で新規のストレージデバイスを処理します。他のシステムについては、そのオペレーティングシステムのドキュメントを参照してください。
  6. ディスクドライブのパーティション設定

    ここでゲストには /dev/vdb というハードディスクデバイスが設定されています。必要であれば、このディスクドライブにパーティションを設定し、パーティションをフォーマットします。追加したデバイスが表示されない場合、それはゲストのオペレーティングシステムにディスクのホットプラグに関する問題が発生していることを示します。
    1. 新規デバイスに対して fdisk を開始します。
      # fdisk /dev/vdb
      Command (m for help):
    2. 新規パーティション作成の n を入力します。
    3. 次のように出力されます。
      Command action
      e   extended
      p   primary partition (1-4)
      プライマリパーティションを作成するために p を入力します。
    4. 使用できるパーティション番号を選択します。この例では、1 が入力され、1 番目のパーティションが選択されています。
      Partition number (1-4): 1
    5. Enter を押して、デフォルトとなる 1 番目のシリンダーを選択します。
      First cylinder (1-400, default 1):
    6. パーティションのサイズを選択します。この例では、Enter を押して、ディスク全体が割り当てられています。
      Last cylinder or +size or +sizeM or +sizeK (2-400, default 400):
    7. t を入力して、パーティションタイプを設定します。
      Command (m for help): t
    8. 前のステップで作成したパーティションを選択します。この例では、パーティション番号が 1 のパーティションを選択しています。この例で作成されたパーティションは 1 つのみのため、fdisk によって自動的にパーティション 1 が選択されています。
      Partition number (1-4): 1
    9. Linux パーティションの 83 を入力します。
      Hex code (type L to list codes): 83
    10. w を入力して、変更を書き込み、終了します。
      Command (m for help): w
    11. ext3 ファイルシステムで新しいパーティションをフォーマットします。
      # mke2fs -j /dev/vdb1
  7. マウントディレクトリーを作成して、ゲスト上にディスクをマウントします。この例では、ディレクトリーは myfiles にあります。
    # mkdir /myfiles
    # mount /dev/vdb1 /myfiles
    これで、ゲストは仮想化されたファイルベースの追加ストレージデバイスを持つことになります。ただし、このストレージはゲストの /etc/fstab ファイルで定義されない限り、再起動後にも永続化するようにマウントされない点に注意してください。
    /dev/vdb1    /myfiles    ext3     defaults    0 0