Lokalen Virt-Manager-Speicherpool erstellen

Lokalen Virt-Manager-Speicherpool erstellen

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 '/'

Fehler beim Erstellen des Pools

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.

  1. 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.

  2. 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-helperund 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.

  3. 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 -aBefehl ausführen

$ sudo mount -a

Mögliche Probleme:

  1. Der Emulator verfügt möglicherweise nicht über Suchberechtigungen für den Pfad „/media/username/Shared/kvm/Disk.qcow2“.
  2. 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:

  1. Sie geben typeund an name, aber hiername ist kein Pfad. Beispiel:test
  2. Nächster Schritt, Target Pathhierdurch erhalten Sie den vorgeschlagenen Pfad /var/lib/libvirt/images/**test**. Simple **change**/var/lib/libvirt/images to 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.

verwandte Informationen