第7章 ストレージの管理

目次

7.1. Virtual Machine Manager を利用したストレージ管理
7.2. virsh を利用したストレージの管理
7.3. virtlockd を利用したディスクファイルとブロックデバイスの施錠

VM ホストサーバ 自身で VM ゲスト を管理する場合、 VM ゲスト の仮想ハードディスクを 追加したり既存のイメージを割り当てたりする際、 VM ホストサーバ のファイルシステム 全体に対してアクセスして管理することができます。しかしながら、 VM ゲスト を リモートから管理する場合、これを行なうことはできません。このような理由から libvirt では、リモートからアクセスできる ストレージプール と呼ばれる仕組みが用意されています。

[Tip]CD/DVD ISO イメージ

リモートから VM ホストサーバ 上にある CD/DVD の iso イメージにアクセスできるように するには、これらをストレージプール上に配置する必要があります。

libvirt ではそれぞれ、ストレージボリュームとストレージプールに対応しています:

ストレージボリューム

ストレージボリュームとは、ゲストに割り当てることのできるストレージデバイス で、仮想ディスクや CD/DVD/フロッピィディスクなどのイメージです。物理的な (VM ホストサーバ 上での) ブロックデバイス (パーティション、論理ボリュームなど) を 割り当てることもできます。

ストレージプール

基本的にはストレージプールとは、ボリュームを保存する際に使用することのできる、 VM ホストサーバ 上のストレージ資源を意味する用語です。デスクトップ機ではネットワーク ストレージの仕組みに似たもので、物理的には下記のような種類があります:

ファイルシステムのディレクトリ (dir)

イメージファイルを提供するディレクトリを指定する方法です。ファイルは 対応するディスク形式 (raw, qcow2, qed) のいずれか、もしくは ISO イメージ を利用することができます。

物理的なディスクデバイス (disk)

物理ディスクをストレージとして使用する方法です。パーティションは、プール に追加した各ボリュームに対して作成します。

事前フォーマット済みブロックデバイス (fs)

ファイルシステムのディレクトリ (イメージファイルを提供するディレクトリ) と同じ方法でパーティションを指定する方法です。唯一の違いは、 libvirt がデバイスのマウントを制御する、という点です。

iSCSI ターゲット (iscsi)

iSCSI のターゲット上にプールを作成する方法です。 libvirt で利用できる ようにするには、事前に対象のボリュームにログインしておく必要があります 。 iSCSI のプールに対してパーティションを作成 する機能には対応していませんが、既存の論理ユニット番号 (LUN) がボリュームを 表わします。それらを使用する際、それぞれのボリューム (LUN) には、有効な (何も書かれていない) パーティションテーブルまたはディスクラベルが書かれて いる必要があります。何も書かれていない場合は、 fdisk を利用して追加します:

~ # fdisk -cu /dev/disk/by-path/ip-192.168.2.100:3260-iscsi-iqn.2010-10.com.example:[...]-lun-2
Device contains neither a valid DOS partition table, nor Sun, SGI
or OSF disklabel
Building a new DOS disklabel with disk identifier 0xc15cdc4e.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
	
LVM ボリュームグループ (logical)

LVM のボリュームグループをプールとして使用する方法です。事前に設定された ボリュームグループを使用するか、もしくは使用するデバイスを指定して グループを作成します。ストレージボリュームは、ボリューム上のパーティション として作成されます。

[Warning]LVM ベースのプールに対する削除について

ストレージマネージャで LVM ベースのプールを削除すると、ボリュームグループ も削除されます。この削除は復元不可能な処理であるため、プール 上に保存された全てのデータが失われることになります!

マルチパスデバイス (mpath)

現時点ではマルチパスへの対応は、ゲストに対して既存のデバイスを割り当てる ことしかできません。 libvirt からマルチパスデバイスを作成したり、 設定したりすることには対応していません。

ネットワーク上の公開ディレクトリ (netfs)

ファイルシステムのディレクトリ (イメージファイルを提供するディレクトリを 指定する方法) と同じ方法で、ネットワーク上のディレクトリを指定します。 ファイルシステムのディレクトリとの違いは、 libvirt がデバイスのマウントを 制御するという点です。プロトコルは NFS と glusterfs に対応しています。

SCSI ホストアダプタ (scsi)

iSCSI ターゲットの場合と同様に、 SCSI ホストアダプタを使用する方法です。 なお、この方法を利用する場合は、 /dev/sdX のような シンプルなデバイス名の形式ではなく、 /dev/disk/by-* のような形式のデバイス名を使用するのがお勧めです。これは前者の方式の場合、 デバイスの接続状況によって名前が変わってしまう可能性 (たとえばデバイスを 追加したり削除したりした場合に、名前が変わってしまう可能性) があるためです。 なお、 iSCSI プール上にボリュームを作成する機能はサポートされていません。 その代わり、既存の論理ユニット番号 (LUN) がボリュームを表わします。

[Warning]セキュリティの考慮事項

データの損失や破壊を防ぐため、ストレージプールを構築する際に使用する LVM ボリュームグループや iSCSI ターゲットなどを VM ホストサーバ 上で使用 (マウント) しないでください。 VM ホストサーバ 上からこれらの資源に接続したりマウントしたりする 必要はありません。 libvirt がこれらの管理を行ないます。

また、 VM ホストサーバ 上のパーティションをラベルでマウントすることは避けてください。 このような設定を行なっている場合、 VM ゲスト 内でも同じラベル名が使用される 可能性があるため、 VM ホストサーバ 側でのマウント時にトラブルを招く可能性があります。

7.1. Virtual Machine Manager を利用したストレージ管理

Virtual Machine Manager では、ストレージボリュームとプールを管理するのに、グラフィカルな インターフェイスであるストレージマネージャを提供しています。これを利用するには、 接続を選んでからマウスの右ボタンを押して Details を選択する か、もしくは接続をハイライト表示させてから Edit+Connection Details を選択します。 表示されたウインドウで Storage タブを選択してください。

7.1.1. ストレージプールの追加

ストレージプールを追加するには、下記の手順で行ないます:

  1. 左下の隅にあるプラス型のシンボルを押し、 Add a New Storage Pool Window を開きます。

  2. まずは Name 欄で名前を指定します (半角英数字のほか、 "_-." の各記号を利用できます) 。続いて Type を選び、 Forward を押します。

  3. 続いて表示されるウインドウでは、必要な詳細情報を指定します。入力すべきデータは、 作成しようとしているプールの種類によって異なります。

    dir: タイプの場合
    • Target Path: 既存のディレクトリを選択します。

    disk: タイプの場合
    • Target Path: デバイスを提供するディレクトリを指定します。 ほとんどの場合、既定値である /dev が適切な 値になります。

    • Format: デバイスのパーティションテーブルの形式を指定します。 ほとんどの場合は auto (自動) で問題なく動作するはずです。 それ以外の場合は、 parted -l を実行する ことで表示される一覧から形式を指定してください。

    • Source Path: デバイスを指定します。たとえば ここでは /dev/sdX のような形式ではなく、 /dev/disk/by-* の形式で 指定しておくことをお勧めします。これは前者の方式の場合、デバイスの 接続状況によって名前が変わってしまう可能性 (たとえばデバイスを追加 したり削除したりした場合に、名前が変わってしまう可能性) があるためです。 また、ここではディスク上のパーティションではなく、ディスク全体を 表わすパスを指定します。

    • Build Pool: このオプションを選択すると、デバイスの フォーマット作業を行ないます。なお、このオプションを選択すると、対象の デバイスに存在する全てのデータが失われます!

    fs: タイプの場合
    • target Path: VM ホストサーバ のファイルシステム内で、 マウントする位置 (マウントポイント) を指定します。

    • Format: デバイスのファイルシステム形式を指定します。 既定値 auto (自動) で問題なく動作するはずです。

    • Source Path: デバイスファイルのパスを指定します。 /dev/sdX のような 形式ではなく、 /dev/disk/by-* のような形式で 指定してください。これは前者のように指定してしまうと、デバイスの 接続状況によって名前が変わってしまう可能性 (たとえばデバイスを追加 したり削除したりした場合に、名前が変わってしまう可能性) があるためです。

    iscsi: タイプの場合

    VM ホストサーバ 上で下記のコマンドを入力すると、必要なデータを得ることができます:

    iscsiadm --mode node

    上記を実行すると、下記のような書式で iSCSI ボリュームの一覧が出力されます。 太字で表記している箇所が必要な情報です:

    IP_アドレス:PORT,TPGT ターゲット名_(IQN)
    • Target Path: デバイスファイルが含まれている ディレクトリを指定します。 /dev/disk/by-path (既定値) または /dev/disk/by-id のいずれかを 指定します。

    • Host Name: iSCSI サーバのホスト名または IP アドレスを 指定します。

    • Source Path: iSCSI のターゲット名 (IQN) を指定します。

    logical: タイプの場合
    • Target Path: 既存のボリュームグルーブを使用する場合、 ここに既存のデバイスパスを入力します。新しい LVM ボリュームグループを作成 する場合は、 /dev ディレクトリ内のデバイスファイルの うち、その時点で存在していないデバイス名を入力します。

    • Source Path: 既存のボリュームグループを使用する場合は 何も入力しません。新しいボリュームグループを作成する場合は、ここにデバイスを 指定します。

    • Build Pool: 新しいボリュームグループを作成する場合のみ チェックを入れます。

    mpath: タイプの場合
    • Target Path: マルチパスへの対応は、利用可能な全ての マルチパスデバイスを利用して作成する場合に限られています。そのため、 ここでは任意の文字列を指定します (何も指定しないと、 XML パーサーが エラーを返します) 。後で使用するようなことはありません。

    netfs: タイプの場合
    • target Path: VM ホストサーバ のファイルシステム上での マウントポイントを指定します。

    • Format: ネットワークファイルシステムのプロトコルを 指定します。

    • Host Name: ネットワークファイルシステムを提供する サーバの IP アドレスまたはホスト名を入力します。

    • Source Path: サーバ上で公開しているディレクトリを 指定します。

    scsi: タイプの場合
    • Target Path: デバイスファイルを含むディレクトリを 指定します。 /dev/disk/by-path (既定値) または /dev/disk/by-id のいずれかを指定します。

    • Source Path: SCSI アダプタの名称を入力します。

    [Note]ファイル参照

    リモートから操作している場合、 Browse ボタンを押す ことによるファイルブラウザは利用できません。

  4. 最後に Finish を押すと、ストレージプールへの追加が 行なわれます。

7.1.2. ストレージプールの管理

Virtual Machine Manager のストレージマネージャでは、プール内にボリュームを作成することができる ほか、プール内のボリュームを削除することができます。そのほか、一時的に既存の ストレージプールを無効化したり、恒久的に削除したりすることもできます。なお、 プールの基本設定を変更する作業は、 SUSE ではサポートしていません。

7.1.2.1. プールの開始と停止、および削除

ストレージプールの機能は、リモートから管理している場合に VM ホストサーバ 上に配置 されているブロックデバイスを追加できるようにするため、用意されている機能です。 特定のプールをリモートから一時的にアクセスできないようにするには、ストレージ マネージャの左下隅にある停止マークを押して Stop (停止) させてください。停止されたプールは State: Inactive (状態: 無効) として印が付けられ、一覧表示では灰色で表示されます。既定では 新しく作成したプールは、 VM ホストサーバ の起動時に自動で開始するように (On Boot) なっています。

無効になっているプールを開始 (Start) し、リモートから 再度アクセスできるようにするには、ストレージマネージャの左下隅にある再生ボタン を押してください。

[Note]プールの状態と接続されたボリュームの影響関係

プールから VM ゲスト に割り当てられたボリュームは、そのプールの状態 (Active (有効) または Inactive (無効)) に関わらず、常に利用可能な状態になります。プールの状態は、リモートからの 管理で、 VM ゲスト にボリュームを割り当てられるかどうかだけに影響します。

プールに対して恒久的にアクセスできないようにするには、ストレージマネージャの 左下隅にあるシュレッダー型のボタンを押すことで Delete (削除) を行なうことができます。削除は無効化されたプールに対してのみ実施できます。 削除の作業では VM ホストサーバ 上で物理的に削除されたり消去されたりすることはなく、 プールの設定だけが削除されます。ですが、特に LVM ボリュームグループベースの ツールを削除するような場合には注意して作業を行なってください:

[Warning]ストレージプールの削除

ローカルの ファイルシステムディレクトリや ローカルパーティション、ローカルディスクをベースにしたプールの 削除は、その時点で VM ゲスト に割り当てられているボリュームに 対しては効果がありません (以前と変わらず利用できます) 。

一方、 iSCSI や SCSI 、 LVM グループやネットワークで公開されているディレクトリ の場合は、プールが削除されるとアクセス不可能になります。ボリュームそれ自身が 削除されなくても、 VM ホストサーバ ではそれらの資源に対してアクセスする権利がなくなる ためです。

iSCSI/SCSI ターゲット上やネットワークで公開されているディレクトリでは、 新しいプールを同じ設定で作成したり、ホスト側のシステムからマウントしたり アクセスしたりすることで、再度アクセスできるようになります。

LVM グループをベースにしたプールの場合は、 LVM グループの設定が消去されるため、 ホストシステム上では存在が消去されてしまいます。設定は復元することはできず、 プール上に存在していた全てのボリュームは失われてしまいます。

7.1.2.2. ストレージプールへのボリュームの追加

Virtual Machine Manager では、マルチパスや iSCSI 、 SCSI のプールを除く全てのストレージプールに 対して、ボリュームを作成することができます。これらのプール上のボリュームは LUN と等価なもので、 libvirt から変更することはできません。

  1. 新しいボリュームは、ストレージマネージャを利用して作成することができるほか、 VM ゲスト に対して新しいデバイスを追加する際にも作成することができます。 いずれの場合でも、 Storage Pool を選択して New Volume を選択します。

  2. まずはイメージの Name (名前) を指定し、イメージの形式を 選択します (なお、 SUSE では raw, qcow2, qed イメージ形式をサポートしています) 。イメージの形式は、 LVM グループベースのプールの場合には設定不要です。

    さらに Max Capacity (最大容量) を指定し、初期状態で 割り当てる領域サイズを指定します。これらの値に対して異なる値を設定すると、 それは スパース イメージファイルと呼ばれる形式になり、 必要に応じてサイズを拡張するタイプのボリュームを作成します。

  3. あとは Finish を押すと、ボリュームの作成が始まります。

7.1.2.3. ストレージプールからのボリュームの削除

ボリュームの削除は、ストレージマネージャでのみ実施することができます。 削除したいボリュームを選んで Delete Volume を選んで ください。あとは Yes を押して確認を行なうと、実際の 削除が行なわれます。なお、この機能を利用する際には特に注意を払ってください!

[Warning]ボリューム削除の際の確認について

ボリュームの削除は、有効な VM ゲスト や無効な VM ゲスト で使用されているか どうかに関わらず行なうことができます。削除されたボリュームを復元する手段は ありません。

VM ゲスト でボリュームが使用されているかどうかは、 ストレージマネージャ内の Used By 列で判断することができます。

7.2. virsh を利用したストレージの管理

virsh を利用することで、コマンドラインからもストレージを 管理することができます。なお、 SUSE ではストレージプールの作成機能はサポート していません。そのため、本章ではプールの開始や停止、削除のほか、ボリューム 管理の機能に限定して説明しています。

プールやボリュームの管理に使用する virsh の全サブコマンドは、 それぞれ virsh help pool または virsh help volume のコマンドを実行することで表示することができます。

7.2.1. プールとボリュームの一覧表示

現在利用可能な全てのプールを表示するには、下記のコマンドを実行します。 無効化されているプールも表示したい場合は、 --all オプションを 追加してください:

virsh pool-list --details

特定のプールに関する詳細を表示するには、 pool-info サブコマンドを利用します:

virsh pool-info プール

既定では、プールごとにボリュームを一覧表示できます。あるプールから提供されて いる全てのボリュームを表示するには、下記のコマンドを実行します:

virsh vol-list --details プール

現時点の virsh コマンドでは、特定のボリュームがゲストで 使用されているかどうかを判断することはできません。下記の手順を利用すること で、 VM ゲスト で使用されている全てのプールと、そこから提供されている ボリュームを表示することができます。

手順7.1 VM ホストサーバ で使用されている全ストレージボリュームの一覧表示

  1. まずは XSLT スタイルシートを下記の内容で作成します。たとえば ~/libvirt/guest_storage_list.xsl などのファイル名で保存します:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="text"/>
      <xsl:template match="text()"/>
      <xsl:strip-space elements="*"/>
      <xsl:template match="disk">
        <xsl:text>  </xsl:text>
        <xsl:value-of select="(source/@file|source/@dev|source/@dir)[1]"/>
        <xsl:text>&#10;</xsl:text>
      </xsl:template>
    </xsl:stylesheet>
  2. 下記のコマンドをシェル内で実行します。なお以下の例は、全てのゲストの XML 定義が既定の場所 (/etc/libvirt/qemu) に存在 している場合の例です。また、 xsltproc プログラムは libxslt パッケージ内に あります。

    SSHEET="$HOME/libvirt/guest_storage_list.xsl"
    cd /etc/libvirt/qemu
    for FILE in *.xml; do
      basename $FILE .xml 
      xsltproc $SSHEET $FILE
    done

7.2.2. プールの開始と停止、および削除

virsh のサブコマンドを利用することで、プールの開始や 停止、削除などを行なうことができます。下記の例では、それぞれ POOL の部分をプール名または UUID に置き換えて 実行してください:

プールの停止
virsh pool-destroy POOL
[Note]プールの状態と接続されたボリュームの影響関係

プールから VM ゲスト に割り当てられたボリュームは、そのプールの状態 (Active (有効) または Inactive (無効)) に関わらず、常に利用可能な状態になります。プールの状態は、リモートからの 管理で、 VM ゲスト にボリュームを割り当てられるかどうかだけに影響します。

プールの削除
virsh pool-delete POOL
[Warning]ストレージプールの削除

ローカルの ファイルシステムディレクトリや ローカルパーティション、ローカルディスクをベースにしたプールの 削除は、その時点で VM ゲスト に割り当てられているボリュームに 対しては効果がありません (以前と変わらず利用できます) 。

一方、 iSCSI や SCSI 、 LVM グループやネットワークで公開されている ディレクトリの場合は、プールが削除されるとアクセス不可能になります。 ボリュームそれ自身が削除されなくても、 VM ホストサーバ ではそれらの資源に 対してアクセスする権利がなくなるためです。

iSCSI/SCSI ターゲット上やネットワークで公開されているディレクトリでは、 新しいプールを同じ設定で作成したり、ホスト側のシステムからマウントしたり アクセスしたりすることで、再度アクセスできるようになります。

LVM グループをベースにしたプールの場合は、 LVM グループの設定が消去されるため、 ホストシステム上では存在が消去されてしまいます。設定は復元することはできず、 プール上に存在していた全てのボリュームは失われてしまいます。

プールの開始
virsh pool-start POOL
プールの自動開始設定
virsh pool-autostart POOL

VM ホストサーバ を再起動した際、自動的に開始するようにマークしたプールだけ を自動的に開始します。

プールの自動開始解除
virsh pool-autostart POOL --disable

7.2.3. ストレージプールへのボリュームの追加

virsh では 2 種類の方法でストレージプールを作成する ことができます。 1 つは XML の定義から作成する方法で、 vol-createvol-create-from を 利用して行ないます。もう 1 つは vol-create-as を 利用してコマンドラインパラメータから作成する方法です。前者の方法は SUSE でサポートしていませんので、ここでは vol-create-as のサブコマンドについて説明します。

既存のプールにボリュームを追加するには、下記のコマンドを実行します:

virsh vol-create-as POOL1NAME2 12G --format3raw|qcow2|qed4 --allocation 4G5

1

ボリュームを追加すべき先のプール名を指定します。

2

ボリューム名を指定します。

3

イメージのサイズを指定します。この例では 12 ギガバイトを指定して います。それぞれ k,M,G,T の接尾辞を付けることで、キロバイト、メガバイト、 ギガバイト、テラバイトの意味になります。

4

ボリュームの形式を指定します。 SUSE では現在、 raw, qcow2, qed の各形式をサポートしています。

5

残りは任意指定のパラメータです。 virsh の既定では、 必要に応じてサイズの大きくなるスパースイメージファイルを作成します。 このパラメータでは、割り当てるべき領域を指定しています (この例では 4 ギガバイトを指定しています) 。それぞれ k,M,G,T の接尾辞を付けること で、キロバイト、メガバイト、ギガバイト、テラバイトの意味になります。

このパラメータを指定しないと、初期状態では領域を割り当てないスパース イメージファイルを作成することになります。また、非スパース型の ボリュームを作成したい場合は、このパラメータをボリュームのサイズと 一致 (この例では 12G) させてください。

7.2.3.1. 既存のボリュームの複製

プールにボリュームを追加する際のもう 1 つの方法として、既存のボリューム を複製する、という方法があります。複製したボリュームは、元のボリュームと 同じプール内に作成されます。

vol-clone 既存のボリュームの名前1新しいボリュームの名前2 --pool POOL3

1

複製元の既存のボリューム名を指定します。

2

新しいボリューム名を指定します。

3

任意指定のパラメータです。 libvirt ではプールを自動的に 判断しますが、これがうまく行かない場合は、 このパラメータを指定してください。

7.2.4. ストレージプールからのボリュームの削除

プールからボリュームを恒久的に削除するには、 vol-delete のサブコマンドを利用します:

virsh vol-delete NAME --pool POOL

--pool は任意指定です。 libvirt ではプールを自動的に 判断しますが、これがうまく行かない場合は、このパラメータを指定してください。

[Warning]No Checks Upon Volume Deletion

ボリュームの削除は、有効な VM ゲスト や無効な VM ゲスト で使用されているか どうかに関わらず行なうことができます。削除されたボリュームを復元する手段は ありません。

VM ゲスト でボリュームが使用されているかどうかを判断するには、 手順7.1「VM ホストサーバ で使用されている全ストレージボリュームの一覧表示」 をご覧ください。

7.3. virtlockd を利用したディスクファイルとブロックデバイスの施錠

ブロックデバイスやディスクファイルに対する施錠 (ロック) を設定することで、 複数の VM ゲストからブロックデバイスやディスクファイルに書き込まれるような 事態を避けることができます。それ以外にも、同じ VM ゲスト を 2 度起動して しまうような事態や、別々の仮想マシンに対して同じディスクを追加してしまう ような事態を避けることもできます。この仕組みにより、誤った設定によって 仮想マシンのディスクイメージを破壊するリスクを減らすことができます。

施錠処理は virtlockd と呼ばれる デーモンが制御します。このデーモンは libvirtd デーモンとは別に動作する ため、 libvirtd がクラッシュした場合や、 libvirtd を再起動したような 場合であっても、施錠を維持することができます。また、 virtlockd 自身を更新したような場合にも、自分 自身を再実行することができますので、この場合にも施錠を維持することができます。 このような仕組みが備わっていますので、 virtlockd の更新を適用した場合であっても、 VM ゲスト を再起動する必要は ありません

7.3.1. 施錠の有効化

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

  1. /etc/libvirt/qemu.conf ファイルを編集し、下記の ように値を設定します:

    lock_manager = "lockd"
  2. 下記のコマンドを実行し、 virtlockd デーモンを起動します:

    rcvirtlockd start
  3. 下記のコマンドを実行して、 libvirtd を再起動します:

    rclibvirtd restart
  4. システムの起動時に自動的に virtlockd を開始するように設定します:

    insserv virtlockd

7.3.2. 施錠の設定

既定では、 virtlockd はお使いの VM ゲスト に設定されたすべてのディスクを、自動的に施錠するように設定されて います。また、既定の設定では "直接的な" 施錠領域を使用するように設定されて います。これは、 VM ゲストの <disk> デバイスに設定された、 実際のファイルパスに対して施錠を行なう、という意味です。たとえば、 VM ゲスト の <disk> デバイス内に下記のような設定が書かれている場合、 /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 を再読み込みさせる必要が あります:

rcvirtlockd reload
[Note]ディスク施錠の設定範囲について

SUSE Linux Enterprise 11 SP3 では、施錠は全体 (全ての仮想ディスク) に対して設定されます。 個別のディスクに対して施錠の可否を設定する機能は、将来リリースされる 予定です。

7.3.2.1. 間接施錠領域の有効化

virtlockd の既定の設定では、 直接 施錠領域を使用するようになっています。これは仮想 マシンの <disk> デバイス内に設定された、実際のファイルパスに対して 施錠を行なう、という設定です。実際のファイルパスが、必ずしもすべての ホストからアクセスできるような構成でないような場合は、 virtlockd間接 施錠領域 を使用するように設定することもできます。この設定では、間接施錠領域用の ディレクトリ内に、ディスクファイルのパスから作られたハッシュファイルを 作成して施錠を確立します。そのため、実際のディスクファイルのパス ではなく、ハッシュファイルに対して施錠を設定することになります。間接 施錠領域は、ディスクファイルを含むファイルシステムが、 fcntl() による施錠に対応していないような場合にも 有用な仕組みです。間接施錠領域は、 file_lockspace_dir という設定で 指定することができます:

file_lockspace_dir = "/MY_LOCKSPACE_DIRECTORY"

7.3.2.2. LVM や iSCSI ボリュームに対する施錠の有効化

LVM や iSCSI ボリューム上に配置されていて、複数のホストで共有されている 仮想ディスクに対して施錠を実施したい場合は、パス (既定値) ではなく UUID で施錠を実施する必要があります。また、施錠領域のディレクトリは、 ボリュームを共有する全てのホストからアクセス可能な、共有ファイルシステム 上に配置する必要があります。 LVM や iSCSI をお使いの場合は、下記の オプションを指定してください:

lvm_lockspace_dir = "/MY_LOCKSPACE_DIRECTORY"
iscsi_lockspace_dir = "/MY_LOCKSPACE_DIRECTORY"

openSUSE KVM を利用した仮想化 13.1