13.3. ディレクトリーベースのストレージプール

このセクションでは、ホスト物理マシンのディレクトリーにゲスト仮想マシンを格納する方法について説明します。
ディレクトリベースのストレージプールは、virt-manager または virsh のコマンドラインツールを使用して作成することができます。

13.3.1. virt-manager を使用したディレクトリーベースのストレージプールの作成

  1. ローカルのディレクトリーを作成します。

    1. オプション: ストレージプール用に新規ディレクトリーを作成します。

      ホストマシン上にストレージプール用のディレクトリーを作成します。この例では /guest_images と言うディレクトリー名を使用しています。
      # mkdir /guest_images
    2. ディレクトリーの所有権を設定します。

      ディレクトリーのユーザーとグループの所有権を変更します。ディレクトリーは root ユーザーによって所有される必要があります。
      # chown root:root /guest_images
    3. ディレクトリーの権限を設定します。

      ディレクトリーのファイル権限を変更します。
      # chmod 700 /guest_images
    4. 変更を確認します。

      権限が変更されていることを確認します。出力には、正しく設定された空のディレクトリーが表示されます。
      # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 28 13:57 .
      dr-xr-xr-x. 26 root root 4096 May 28 13:57 ..
  2. SELinux のファイルコンテキストを設定します。

    新しいディレクトリーに適切な SELinux コンテキストを設定します。プール名とディレクトリー名を一致させる必要はありません。ただし、ゲスト仮想マシンをシャットダウンする際に libvirt はコンテキストをデフォルト値に戻さなければなりません。このデフォルト値はディレクトリーのコンテキストによって決定されます。したがって、ディレクトリーに「virt_image_t」のラベルを明示的に付けておくと、ゲスト仮想マシンがシャットダウンした際にそのイメージに「virt_image_t」のラベルが付けられるため、ホスト物理マシンで実行されている他のプロセスと区別できるようになります。
    # semanage fcontext -a -t virt_image_t '/guest_images(/.*)?'
    # restorecon -R /guest_images
  3. ストレージプールの設定を開きます。

    1. virt-manager グラフィカルインターフェースで、メインウィンドウからホスト物理マシンを選択します。
      編集 メニューを開き 接続の詳細 を選択します。
    2. 接続の詳細 ウィンドウで ストレージ タブをクリックします。
      「ストレージ」タブ

      図13.5 「ストレージ」タブ

  4. 新しいストレージプールを作成します。

    1. 新規プールの追加 (パート1)

      + ボタンを押します (プールの追加ボタン)。新規ストレージプールを追加 ウィザードが表示されます。
      ストレージプールの 名前 を選択します。この例では guest_images という名前を使用しています。種類dir: ファイルシステムディレクトリー にします。
      ストレージプールに名前を付ける

      図13.6 ストレージプールに名前を付ける

      進む ボタンを押して先に進みます。
    2. 新規プールの追加 (パート2)

      ターゲットパス フィールドを /guest_images などに変更します。
      ストレージプールのパスの選択

      図13.7 ストレージプールのパスの選択

      詳細を確認したら、完了 ボタンを押してストレージプールを作成します。
  5. 新しいストレージプールを確認します。

    数秒後、左側のストレージ一覧に新しいストレージプールが表示されます。サイズが予想通りの値で報告されていることを確認します (この例では、75.15 GiB 空き)。状態 フィールドに新しいストレージが 動作中 と表示されていることを確認します。
    ストレージプールを選択します。自動起動 フィールドで 起動時 のチェックボックスにチェックが付いていることを確認します。チェックが付いていると、libvirtd サービスの起動時は常にストレージプールも起動します。
    ストレージプール情報の確認

    図13.8 ストレージプール情報の確認

    これでストレージプールが作成されました。接続の詳細 ウィンドウを閉じます。

13.3.2. virt-manager を使用したストレージプールの削除

この手順では、ストレージプールを削除する方法を説明します。
  1. 同じプールを使用する他のゲスト仮想マシンに関連した問題を避けるには、ストレージプールを停止し、そのストレージプールで使用中のリソースをすべて解放するのが最良の方法です。これを実行するには、停止するストレージプールを選択して、ストレージウィンドウの下部にある をクリックします。
  2. ストレージプールを削除するには、 をクリックします。このアイコンが使用できるのは、ストレージプールが停止している場合のみです。

13.3.3. virsh を使用したディレクトリーベースのストレージプールの作成

  1. ストレージプールの定義を作成します。

    新規のストレージプールを定義するために virsh pool-define-as コマンドを使用します。ディレクトリーベースのストレージプールの作成には 2 つのオプションが必要になります。
    • ストレージプールの 名前
      この例では guest_images という名前を使用しています。この例の virsh コマンドではすべてこの名前を使用しています。
    • ゲストイメージファイル格納用のファイルシステムディレクトリーへの パス (このディレクトリーが存在しない場合は、virsh がディレクトリーを作成します)。
      この例では /guest_images ディレクトリーを使用しています。
     # virsh pool-define-as guest_images dir - - - - "/guest_images" Pool guest_images defined
  2. ストレージプールが一覧表示されていることを確認します。

    ストレージプールオブジェクトが正しく作成されていること、および状態が inactive として表示されていることを確認します。
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images     inactive   no
  3. ローカルのディレクトリーを作成します。

    以下のように virsh pool-build コマンドを使用し、guest_images (例) ディレクトリーにディレクトリーベースのストレージプールをビルドします。
    # virsh pool-build guest_images
    Pool guest_images built
    # ls -la /guest_images
    total 8
    drwx------.  2 root root 4096 May 30 02:44 .
    dr-xr-xr-x. 26 root root 4096 May 30 02:44 ..
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images     inactive   no
  4. ストレージプールを起動します。

    virsh コマンドの pool-start を使ってディレクトリーストレージプールを有効にします。これにより、プールのボリュームがゲストのディスクイメージとして使用されます。
    # virsh pool-start guest_images
    Pool guest_images started
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default             active     yes
    guest_images    active     no
  5. autostart をオンにします。

    ストレージプールの autostart をオンにします。Autostart は、libvirtd サービスの起動時にはストレージプールも起動されるように設定します。
    # virsh pool-autostart guest_images
    Pool guest_images marked as autostarted
    # virsh pool-list --all
    Name                 State      Autostart
    -----------------------------------------
    default              active     yes
    guest_images         active     yes
  6. ストレージプールの設定を確認します。

    ストレージプールが正しく作成されたこと、およびサイズが正確に報告されていること、さらに状態が running として報告されていることを確認します。ゲスト仮想マシンが実行されていない場合でもプールへのアクセスを可能にしておきたい場合には、Persistentyes が表示されていることを確認します。サービスの起動時にプールを自動的に起動させる場合は、Autostartyes が表示されていることを確認します。
    # virsh pool-info guest_images
    Name:           guest_images
    UUID:           779081bf-7a82-107b-2874-a19a9c51d24c
    State:          running
    Persistent:     yes
    Autostart:      yes
    Capacity:       49.22 GB
    Allocation:     12.80 GB
    Available:      36.41 GB
    
    # ls -la /guest_images
    total 8
    drwx------.  2 root root 4096 May 30 02:44 .
    dr-xr-xr-x. 26 root root 4096 May 30 02:44 ..
    #
これでディレクトリーベースのストレージプールが利用できるようになります。

13.3.4. virsh を使用したストレージプールの削除

以下の手順では、virsh を使用してストレージプールを削除する方法を説明します。
  1. 同じプールを使用する他のゲスト仮想マシンに関連した問題を避けるには、ストレージプールを停止し、そのストレージプールで使用中のリソースすべてを解放するのが最良の方法です。
    # virsh pool-destroy guest_images_disk
  2. また、ストレージプールがあるディレクトリーを削除したい場合は、次のコマンドを使用します。
    # virsh pool-delete guest_images_disk
  3. ストレージプールの定義を削除します。
    # virsh pool-undefine guest_images_disk