Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
コンテンツコンテンツ
仮想化ガイド
  1. 前書き
  2. I 概要
    1. 1 仮想化技術
    2. 2 仮想化シナリオ
    3. 3 Xen 仮想化の紹介
    4. 4 KVM 仮想化の紹介
    5. 5 仮想化ツール
    6. 6 仮想化コンポーネントのインストール
  3. II libvirt を利用した仮想マシンの管理
    1. 7 libvirt デーモン
    2. 8 VM ホストサーバ の準備
    3. 9 ゲストのインストール
    4. 10 基本的な VM ゲスト の管理
    5. 11 接続と認可
    6. 12 高度なストレージ設定
    7. 13 仮想マシンマネージャ を利用した仮想マシンの設定
    8. 14 virsh を利用した仮想マシンの設定
    9. 15 AMD SEV-SNP による仮想マシンのセキュリティ強化
    10. 16 VM ゲスト の移行
    11. 17 Xen から KVM への移行ガイド
  4. III 全ハイパーバイザ共通の機能
    1. 18 ディスクのキャッシュモード
    2. 19 VM ゲスト の時刻設定
    3. 20 libguestfs
    4. 21 QEMU ゲストエージェント
    5. 22 ソフトウエア TPM エミュレータ
    6. 23 VM ゲスト に対するクラッシュダンプの作成
  5. IV Xen を利用した仮想マシンの管理
    1. 24 仮想マシンホストの設定
    2. 25 仮想ネットワーク
    3. 26 仮想環境の管理
    4. 27 Xen 内でのブロックデバイス
    5. 28 仮想化: オプション設定
    6. 29 管理作業
    7. 30 XenStore: ドメイン間で共有される設定データベース
    8. 31 Xen の高可用性仮想化ホストとしての使用
    9. 32 Xen: 準仮想化 (PV) ゲストから完全仮想化 (FV/HVM) ゲストへの変換
  6. V QEMU を利用した仮想マシンの管理
    1. 33 QEMU の概要
    2. 34 KVM VM ホストサーバ の構築
    3. 35 ゲストのインストール
    4. 36 qemu-system-ARCH を利用した仮想マシンの実行
    5. 37 QEMU モニタを利用した仮想マシンの管理
  7. VI トラブルシューティング
    1. 38 内蔵ヘルプとパッケージのドキュメンテーション
    2. 39 システム情報とログの収集
  8. 用語集
  9. A NVIDIA カードに対する GPU パススルー の設定
  10. B GNU ライセンス
ナビゲーション
適用先 openSUSE Leap 15.7

12 高度なストレージ設定 Edit source

本章では、 VM ホストサーバ の観点におけるストレージ関連の高度なトピックを説明しています。

12.1 virtlockd を利用したディスクファイルやブロックデバイスのロック (施錠) Edit source

ブロックデバイスやディスクファイルをロック (施錠) することで、これらのリソースを他の VM ゲストから書き込まれることがないように保護することができます。これにより、同一の VM ゲスト が二重に起動されることを防ぐことができるほか、異なる仮想マシンに同じディスクが割り当てられたりすることがないようになります。これにより、仮想マシンのディスクイメージが、誤った設定によって破壊されてしまうのを防ぐことにもなります。

ロック処理は virtlockd と呼ばれるデーモンが取り扱います。 libvirtd デーモンとは個別に動作する仕組みであることから、 libvirtd がクラッシュしたり再起動したりしてしまったような場合でも、ロックを提供し続けることができます。さらに virtlockd 自身の更新にも対応していて、自分自身で再起動を実施できるようになっています。これにより、 virtlockd を更新しても、 VM ゲスト を再起動する必要がありません。なお、 virtlockd は KVM, QEMU, Xen にそれぞれ対応しています。

12.1.1 ロックの有効化 Edit source

仮想ディスクのロックは openSUSE Leap の既定では有効化されていません。有効化してシステムの起動時に自動的に開始されるようにするには、下記の手順を実施します:

  1. /etc/libvirt/qemu.conf ファイルを編集して、下記を設定します:

    lock_manager = "lockd"
  2. あとは過去のコマンドを実行して、 virtlockd デーモンを開始します:

    > sudo systemctl start virtlockd
  3. libvirtd デーモンを再起動します:

    > sudo systemctl restart libvirtd
  4. システムの起動時に virtlockd が自動的に開始されるように設定します:

    > sudo systemctl enable virtlockd

12.1.2 ロックの設定 Edit source

既定では、 virtlockd は VM ゲスト に設定された全てのディスクを自動的にロックします。また、既定の設定では 直接 ロック領域を使用し、 VM ゲストの <disk> に書かれたデバイスに結びつけられたファイルに対して直接ロックを取得します。たとえば VM ゲスト 内に下記のような設定が存在した場合、 /var/lib/libvirt/images/my-server/disk0.raw ファイルに対して flock(2) を直接実行して、ロックを獲得します:

<disk type='file' device='disk'>
 <driver name='qemu' type='raw'/>
 <source file='/var/lib/libvirt/images/my-server/disk0.raw'/>
 <target dev='vda' bus='virtio'/>
</disk>

virtlockd の設定は、設定ファイルである /etc/libvirt/qemu-lockd.conf を編集することで変更することができます。ここにはさらに詳しい情報の書かれたコメント (英語) が含まれています。なお、設定を変更した後は、それを反映させるために virtlockd を再読み込みさせる必要があります:

> sudo systemctl reload virtlockd

12.1.2.1 間接ロック領域の有効化 Edit source

virtlockd の既定の設定では、 "直接" ロック領域を使用し、 VM ゲストの <disk> に書かれたデバイスに結びつけられたファイルに対して直接ロックを取得します。

ディスクのファイルパスが全てのホストから直接アクセスできるものではない場合、 virtlockd を設定して 間接 ロック領域を使用するように設定することができます。この場合、間接ロック領域ディレクトリ内に、ディスクファイルパスのハッシュファイルを作成します。このロックは、実際のディスクファイルパスの代用として使用され、保持されるようになります。間接ロック領域は、 fcntl() ロックに対応していないファイルシステムを使用する場合にも便利です。間接ロック領域は、 file_lockspace_dir 設定で指定します:

file_lockspace_dir = "ロック領域のディレクトリ"

12.1.2.2 LVM や iSCSI ボリュームでのロック有効化 Edit source

複数のホストで共有されている LVM や iSCSI ボリューム内に仮想ディスクが存在する場合、それらをロックするには、パス (既定で使用される方法) ではなく UUID で行う必要があります。それに加えてロック領域のディレクトリは、全てのホストからアクセスすることのできる共有の領域内に配置する必要があります。 virtlockd の LVM/iSCSI におけるロックの設定は、下記のようになります:

lvm_lockspace_dir = "ロック領域のディレクトリ"
iscsi_lockspace_dir = "ロック領域のディレクトリ"

12.2 ゲストのブロックデバイスのオンラインサイズ変更 Edit source

状況によっては、ゲストシステムで使用されるブロックデバイスのサイズを変更し、サイズを大きくするか小さくする必要に迫られることがあります。たとえば元々割り当てていたサイズでは不足しているような場合には、サイズを増やす必要があります。ゲストに割り当てていたディスクが 論理ボリューム 内に存在していれば、ゲストシステムを動作させた状態のままサイズを変更することができます。これはオフラインによるディスクサイズの変更 (20.3項 「guestfs ツール」 内で説明している virt-resize コマンドに関する説明をお読みください) とは異なり、サイズ変更時にもゲストを停止させる必要がありませんので、大きな利点になります。 VM ゲスト のディスクサイズを変更するには、下記の手順を実施します:

手順 12.1: ゲストディスクのオンラインサイズ変更
  1. まずはゲストシステム内で、現在のサイズを確認します (下記では /dev/vda にディスクが配置されているものとします) 。

    # fdisk -l /dev/vda
    Disk /dev/sda: 160.0 GB, 160041885696 bytes, 312581808 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
  2. ホスト側で、ゲストの /dev/vda を提供している論理ボリュームのサイズを変更します。ここではたとえば 200 GB に変更します。

    # lvresize -L 200G /dev/mapper/vg00-home
    Extending logical volume home to 200 GiB
    Logical volume home successfully resized
  3. ホスト側で、ゲストの /dev/mapper/vg00-home ディスクに対応するブロックデバイスのサイズを変更します。なお、下記の ドメイン_ID の箇所には、 virsh list で表示されるドメイン名 (仮想マシン名) を入力します。

    # virsh blockresize  --path /dev/vg00/home --size 200G ドメイン_ID
    ブロックデバイス '/dev/vg00/home' の容量が変更されました
  4. ゲスト側で、新しいディスクサイズが認識されていることを確認します。

    # fdisk -l /dev/vda
    Disk /dev/sda: 200.0 GB, 200052357120 bytes, 390727260 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

12.3 ホストとゲストの間でのディレクトリ共有 (ファイルシステムのパススルー) Edit source

libvirt では、 QEMU のファイルシステムパススルー (VirtFS とも呼ばれます) 機能を利用して、ホストとゲストの間でのディレクトリ共有を行うことができます。このようなディレクトリは複数の VM ゲスト から同時にアクセスすることができるため、 VM ゲスト 間でのファイル交換を行うこともできます。

注記
注記: Windows ゲストとファイルシステムのパススルーについて

Windows ゲストには共有ディレクトリをマウントするためのデバイスドライバが提供されていないため、 VM ホストサーバ と Windows ゲストとの間では、ファイルシステムのパススルー機能を利用してディレクトリの共有を行うことはできません。

VM ゲスト に対してディレクトリを共有するには、下記の手順を実施します:

  1. 仮想マシンマネージャ でゲストのコンソールを開いて、メニューから 表示 › 詳細 を選択するか、もしくはツールバー内の 仮想マシンの情報を表示 を選択します。あとは ハードウェアを追加 › ファイルシステム を選択して、 ファイルシステム・パススルー を表示します。

  2. ドライバー では、 Handle もしくは Path のいずれかを選択します。既定値は Path です。 モード ではセキュリティモデルを指定します。これは、ホスト内でのファイルパーミッションの設定方法を指定します。下記のいずれかを選択します:

    Passthrough (既定値)

    ファイルシステム内のファイルを、クライアントユーザの権限で直接作成します。これは NFSv3 を利用している場合によく似ています。

    Squash

    Passthrough と同様ですが、 chown などの特権操作の失敗については無視します。これは KVM が root で動作していない場合に必要となります。

    Mapped

    ファイルサーバ側の権限 ( qemu.qemu ) でファイルを作成します。ユーザ権限とクライアント側の権限情報は、拡張属性内に保存します。このモデルは、ホストとゲストを完全に分離しておきたい場合にお勧めの設定です。

  3. VM ホストサーバ 内のディレクトリを ソースパス に指定します。なお、共有されたディレクトリをマウントする際には、 ターゲットパス に指定した名前を使用します。また、この文字列はタグとして使用するだけのものであり、 VM ゲスト 内のパスを表すものではありません。

  4. 完了 を押して設定を適用します。 VM ゲスト が動作中の場合は、設定を反映させるのにシャットダウンが必要となります (ゲストの再起動では不十分です) 。

  5. VM ゲスト を起動します。共有されたディレクトリをマウントするには、下記のコマンドを実行します:

    > sudo mount -t 9p -o trans=virtio,version=9p2000.L,rw タグ /マウントポイント

    共有されたディレクトリを恒久的にマウントしたい場合は、下記のような内容を /etc/fstab に追加します:

    タグ   /マウントポイント    9p  trans=virtio,version=9p2000.L,rw    0   0

12.4 libvirt を利用した RADOS ブロックデバイスの使用 Edit source

RADOS Block Devices (RBD) はデータを Ceph クラスタに保存します。このブロックデバイスでは、スナップショットやレプリケーション、データの一貫性維持などを行うことができます。お使いの libvirt 管理下の VM ゲスト から RBD を使用したい場合は、他のブロックデバイスと同様の手順を実施してください。

このページを印刷