私はストレージプール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
プールを作成することはできますが、考慮すべき点がいくつかあります。
「名前」には、'/' のような特殊文字は含まれません。/tmp/test プールを作成する場合は、次のように名前を付けます。テスト「(ステップ 1/2)にパスを付与します。/tmp/テスト「(ステップ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 を参照してください。一部のプールタイプはまだapparmorで処理できません。virt-managerのデフォルトのプールタイプは「ディレクトリ「それで問題ありません。しかし、より高度なタイプとして「LVM グループこれらのタイプのApparmorルールは、ゲストに対してオンザフライで作成できません(これに関するバグを見る) の場合、 を変更して必要な追加パスを許可する必要があります
/etc/apparmor.d/abstractions/libvirt-qemu
。
答え2
答え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
考えられる問題:
- エミュレータにはパス '/media/username/Shared/kvm/Disk.qcow2' の検索権限がない可能性があります
- ドメインの起動エラー: ストレージ ファイル '/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 つの手順があります。
type
と を指定しますname
が、ここではname
パスではない。 例:test
- 次のステップでは、推奨パス/var/lib/libvirt/images /libvirt-images-pool2/ /libvirt-images-pool2/test
Target Path
が表示されます。/var/lib/libvirt/images/**test**. Simple **change**
to whatever you want. Example:
(which will result in
注: 所有権と権限を調整する必要があるかもしれませんが、完了をクリックすると libvirt によって修正されると思います。
誰かの役に立つことを願います。