ローカル virt-manager ストレージ プールを作成する

ローカル virt-manager ストレージ プールを作成する

私はストレージプールvirt-manager の qcow2 イメージ用私のホームディレクトリしかし奇妙なエラーが発生します:

Error creating pool: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

プールの作成中にエラーが発生しました

質問

  • ホームディレクトリにストレージプールを置くことは可能ですか?
  • virt-manager がディレクトリにアクセスするには特別な権限が必要ですか?

完全なエラートレースバック

Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/createpool.py", line 442, in _async_pool_create poolobj = self._pool.install(create=True, meter=meter, build=build) File "/usr/share/virt-manager/virtinst/storage.py", line 531, in install raise RuntimeError(_("Could not define storage pool: %s") % str(e)) RuntimeErError creating pool: Could not define storage poror: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

答え1

プールを作成することはできますが、考慮すべき点がいくつかあります。

  1. 「名前」には、'/' のような特殊文字は含まれません。/tmp/test プールを作成する場合は、次のように名前を付けます。テスト「(ステップ 1/2)にパスを付与します。/tmp/テスト「(ステップ2/2) とすれば動作します。

  2. あまりに珍しいパスを選んだ場合、apparmorがあなたを阻止します。デフォルトで許可されているパスは限られており、ある時点でこれらから外れると仮想AAヘルパーファイルにアクセスできなくなります。ただし、ゲストごとのカスタム プロファイルへのアクセスを許可するには、これが必要になります。 の既存のルールを確認し/etc/apparmor.d/usr.lib.libvirt.virt-aa-helper、カスタム ルールを追加します/etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper 。詳細については、/etc/apparmor.d/local/README を参照してください。

  3. 一部のプールタイプはまだapparmorで処理できません。virt-managerのデフォルトのプールタイプは「ディレクトリ「それで問題ありません。しかし、より高度なタイプとして「LVM グループこれらのタイプのApparmorルールは、ゲストに対してオンザフライで作成できません(これに関するバグを見る) の場合、 を変更して必要な追加パスを許可する必要があります/etc/apparmor.d/abstractions/libvirt-qemu

答え2

はい、ホーム ディレクトリのプールを作成できます。おそらく、「/」記号を含む「/home/matthias/virtual-guests/virt-manager」という名前のプールを作成しようとしたのでしょう。今後、プールを作成するときは、「/」記号なしの名前を入力してください。

将来的に別のパーティションにQCOW2ファイル(ディスクイメージファイル)を作成する必要があるかもしれません。この手順を参照してください。ガイド.
また、こちらも役に立つかもしれませんガイド

答え3

別のパーティションにqcow2ディスクイメージファイルを作成する

このガイドは、Ubuntu 22.04 LTS、22.10、23.04、23.10 でテストされました。

ディレクトリをブロックに自動的にリンクする(パーティションの自動マウント)

1. 新しいディレクトリを作成する

$ sudo mkdir /media/username
$ sudo mkdir /media/username/Shared
$ sudo mkdir /media/username/Shared/kvm

重要!ディレクトリ名 kvm は小文字です。

2. blkidコマンドを実行して、利用可能なブロックデバイスに関する情報を表示します。UUID(Universally Unique Identifier)が必要になります。

$ sudo blkid

結果は次のようになります。

/dev/sda1: LABEL="Ubuntu" UUID="azazazaz-azaz-azaz-azaz-azazazazazaz" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Ubuntu" PARTUUID="a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1"
/dev/sda2: LABEL="Shared" UUID="abababab-abab-abab-abab-abababababab" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Shared" PARTUUID="a2a2a2a2-a2a2-a2a2-a2a2-a2a2a2a2a2a2"

3. fstab ファイルを編集します。

$ sudo nano /etc/fstab

fstab ファイルに正しい UUID を含む次の 2 行を追加します。

# Shared
UUID=abababab-abab-abab-abab-abababababab       /media/username/Shared        ext4    defaults        0       2

最終結果は次のようになります。

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p3 during installation
UUID=azazazaz-azaz-azaz-azaz-azazazazazaz /               ext4    errors=remount-ro 0       1
# Shared
UUID=abababab-abab-abab-abab-abababababab       /media/username/Shared        ext4    defaults        0       2

4.mount -aコマンドを実行する

$ sudo mount -a

考えられる問題:

  1. エミュレータにはパス '/media/username/Shared/kvm/Disk.qcow2' の検索権限がない可能性があります
  2. ドメインの起動エラー: ストレージ ファイル '/media/username/Shared/kvm/Disk.qcow2' にアクセスできません (uid:10101、gid:101): アクセス権が拒否されました

5. 権限の問題を修正する

$ sudo chown root:root '/media'
$ sudo chmod 775 '/media'

$ sudo chown root:root '/media/username'
$ sudo chmod 775 '/media/username'

$ sudo chown username:username '/media/username/Shared'
$ sudo chmod 775 '/media/username/Shared'

$ sudo chown username:username '/media/username/Shared/kvm'
$ sudo chmod 777 '/media/username/Shared/kvm'

libvirt のデフォルトのストレージプールを変更する

6. 現在のプールを一覧表示する

$ virsh pool-list

次のテキストが表示されます。

Name                 State      Autostart 
-------------------------------------------
default              active     yes 

7. デフォルトのプールを破棄します。

$ virsh pool-destroy default

次のテキストが表示されます: プールのデフォルトが破棄されました

8. プールの定義を解除する

$ virsh pool-undefine default

次のテキストが表示されます: プールのデフォルトが未定義です

9. 「default」という名前の新しいプールを定義します。

$ virsh pool-define-as --name default --type dir --target /media/username/Shared/kvm

次のテキストが表示されます: プールのデフォルトが定義されました

10. libvirtデーモンが起動したときにプールが起動するように設定する

$ virsh pool-autostart default

次のテキストが表示されます: プールのデフォルトが自動開始としてマークされています

11. プールを始める

$ virsh pool-start default

次のテキストが表示されます: プールのデフォルトが開始されました

12. プールの状態を確認する

$ virsh pool-list

次のテキストが表示されます。

Name                 State      Autostart 
-------------------------------------------
default              active     yes 

これで、仮想マシンを作成するときに、Virtual Machine Manager は qcow2 ファイルを /media/username/Shared/kvm ディレクトリに保存します。

新しいゲストマシンまたはqcow2ファイルの作成

13. virt-managerを実行する

$ virt-manager

14. 仮想マシンのディスク イメージを作成するか、新しいマシンを作成します。

答え4

私の場合は間違いでした。特に明白なことではありません。ディレクトリにストレージプールを作成しようとしていたので、dir:Filesystem Directory

2 つの手順があります。

  1. typeと を指定しますnameが、ここではname パスではない。 例:test
  2. 次のステップでは、推奨パス/var/lib/libvirt/images /libvirt-images-pool2/ /libvirt-images-pool2/testTarget Pathが表示されます。/var/lib/libvirt/images/**test**. Simple **change**to whatever you want. Example:(which will result in

注: 所有権と権限を調整する必要があるかもしれませんが、完了をクリックすると libvirt によって修正されると思います。

誰かの役に立つことを願います。

関連情報