Ich möchte einSpeicherpoolfür virt-manager's qcow2 imagesin meinem Home-Verzeichnisaber ich bekomme eine seltsame Fehlermeldung:
Error creating pool: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'
Fragen
- Ist es überhaupt möglich, den Speicherpool in meinem Home-Verzeichnis zu haben?
- Benötige ich spezielle Berechtigungen für den Virt-Manager, um auf das Verzeichnis zugreifen zu können?
Vollständiger Fehler-Traceback
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 '/'
Antwort1
Sie können Pools erstellen, dabei müssen Sie jedoch einige Dinge beachten.
Der "Name" muss unbedingt frei von Sonderzeichen wie '/' sein. Wenn Sie einen /tmp/test-Pool erstellen möchten, können Sie ihn "prüfen" (bei Schritt 1 von 2) und geben Sie ihm den Pfad "/tmp/test" (bei Schritt 2 von 2) und es wird funktionieren.
apparmor wird Sie stoppen, wenn Sie zu ungewöhnlich vorgehen. Es gibt eine begrenzte Anzahl von Pfaden, die standardmäßig zulässig sind. Wenn Sie diese irgendwann verlassenVirt-AA-Helferkann nicht mehr auf die Dateien zugreifen. Dies wäre jedoch erforderlich, damit der Zugriff für das benutzerdefinierte Profil pro Gast zugelassen werden kann. Sehen Sie sich die vorhandenen Regeln an
/etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
und fügen Sie benutzerdefinierte Regeln hinzu ./etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper
Weitere Informationen hierzu finden Sie unter /etc/apparmor.d/local/README.Einige Pooltypen können noch nicht von apparmor verarbeitet werden. Der Standardpooltyp von virt-manager ist "dir" und das ist in Ordnung. Aber es gibt fortgeschrittenere Typen wie "LVM-Gruppen", für diese Typen können Apparmor-Regeln nicht spontan für den Gast erstellt werden (siehe Fehler hierzu), in diesen Fällen müssen Sie die benötigten zusätzlichen Pfade durch Ändern zulassen
/etc/apparmor.d/abstractions/libvirt-qemu
.
Antwort2
Ja, Sie können einen Pool für Ihr Home-Verzeichnis erstellen. Sie haben wahrscheinlich versucht, einen Pool mit dem Namen „/home/matthias/virtual-guests/virt-manager“ zu erstellen, der die Symbole „/“ enthält. Geben Sie in Zukunft beim Erstellen eines Pools einen Namen ohne das Symbol „/“ ein.
Möglicherweise müssen Sie in Zukunft eine QCOW2-Datei (Disk-Image-Datei) auf einer anderen Partition erstellen. Lesen Sie dazu die SCHRITTE in diesemFÜHRUNG.
Vielleicht finden Sie auch Folgendes nützlichFÜHRUNG.
Antwort3
Erstellen einer qcow2-Disk-Image-Datei auf einer anderen Partition
Diese Anleitung wurde auf Ubuntu 22.04 LTS, 22.10, 23.04, 23.10 getestet.
Automatisches Verknüpfen eines Verzeichnisses mit einem Block (automatisches Einhängen der Partition)
1. Neue Verzeichnisse erstellen
$ sudo mkdir /media/username
$ sudo mkdir /media/username/Shared
$ sudo mkdir /media/username/Shared/kvm
Wichtig!Verzeichnisname kvm mit Kleinbuchstaben.
2. Führen Sie den Befehl blkid aus, um Informationen zu verfügbaren Blockgeräten anzuzeigen. Sie benötigen einen universell eindeutigen Bezeichner (UUID).
$ sudo blkid
Das Ergebnis sollte ungefähr so aussehen:
/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. Bearbeiten Sie die fstab-Datei.
$ sudo nano /etc/fstab
Fügen Sie der fstab-Datei die folgenden beiden Zeilen mit der richtigen UUID hinzu:
# Shared
UUID=abababab-abab-abab-abab-abababababab /media/username/Shared ext4 defaults 0 2
Das Endergebnis sollte ungefähr so aussehen:
# <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
Befehl ausführen
$ sudo mount -a
Mögliche Probleme:
- Der Emulator verfügt möglicherweise nicht über Suchberechtigungen für den Pfad „/media/username/Shared/kvm/Disk.qcow2“.
- Fehler beim Starten der Domäne: Auf die Speicherdatei „/media/username/Shared/kvm/Disk.qcow2“ (als uid:10101, gid:101) kann nicht zugegriffen werden: Berechtigung verweigert
5. Beheben Sie Berechtigungsprobleme
$ 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'
Ändern des Standardspeicherpools für libvirt
6. Liste der aktuellen Pools
$ virsh pool-list
Sie sollten den folgenden Text erhalten:
Name State Autostart
-------------------------------------------
default active yes
7. Zerstören Sie den Standardpool.
$ virsh pool-destroy default
Sie sollten den folgenden Text erhalten: Pool-Standard zerstört
8. Den Pool aufheben
$ virsh pool-undefine default
Sie sollten den folgenden Text erhalten: Der Pool-Standard wurde nicht definiert.
9. Definieren Sie einen neuen Pool mit dem Namen „default“
$ virsh pool-define-as --name default --type dir --target /media/username/Shared/kvm
Sie sollten den folgenden Text erhalten: Pool-Standard definiert
10. Stellen Sie den Pool so ein, dass er beim Start der Libvirt-Daemons gestartet wird
$ virsh pool-autostart default
Sie sollten den folgenden Text erhalten: Pool default marked as autostarted
11. Starten Sie den Pool
$ virsh pool-start default
Sie sollten den folgenden Text erhalten: Pool-Standard gestartet
12. Überprüfen Sie den Zustand des Pools
$ virsh pool-list
Sie sollten den folgenden Text erhalten:
Name State Autostart
-------------------------------------------
default active yes
Beim Erstellen virtueller Maschinen speichert Virtual Machine Manager jetzt qcow2-Dateien im Verzeichnis /media/username/Shared/kvm.
Erstellen eines neuen Gastcomputers oder einer qcow2-Datei
13. Führen Sie virt-manager aus
$ virt-manager
14. Erstellen Sie ein Disk-Image für die virtuelle Maschine oder erstellen Sie eine neue Maschine.
Antwort4
In meinem Fall war es ein Fehler - nicht besonders offensichtlich. Ich habe versucht, einen Speicherpool im Verzeichnis zu erstellen, alsodir:Filesystem Directory
Es gibt 2 Schritte:
- Sie geben
type
und anname
, aber hiername
ist kein Pfad. Beispiel:test
- Nächster Schritt,
Target Path
hierdurch erhalten Sie den vorgeschlagenen Pfad/var/lib/libvirt/images/**test**. Simple **change**
/var/lib/libvirt/imagesto whatever you want. Example:
/libvirt-images-pool2/(which will result in
/libvirt-images-pool2/test```
Hinweis: Möglicherweise müssen Sie an den Eigentumsrechten und Berechtigungen herumfummeln, aber ich glaube, dass Libvirt diese behebt, sobald Sie auf „Fertig“ klicken.
Hoffe, es hilft jemandem.