qemu startet Quest nicht mit Disk-Image auf tmpfs

qemu startet Quest nicht mit Disk-Image auf tmpfs

Ich habe einen 32-Bit-Windows 2k3r3-Gast (Terminalserver) mit 4 GB Gast-RAM und Swapping.

Ich habe ein separates Disk-Image für den Gast-Swapping und die temporären Verzeichnisse der Benutzer erstellt.

Ich habe genügend RAM im Hostsystem und möchte Festplatten-E/A sparen, indem ich dieses Image nach tmpfs verschiebe, aber der Gast startet nicht mit dieser Fehlermeldung:

qemu-kvm: -drive file=/mnt/tmpfs/vh1-tmp.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=none: Disk-Imag konnte nicht geöffnet werden│ 4098 qemu 20 0 4949M 4146M 5496 S 28.5 17.2 1h00:31 /usr/bin/qemu-kvm -name vh1 -S -M pc-1.3 -cpu kvm64 -enable- e /mnt/tmpfs/vh1-tmp.qcow2: Ungültiges Argument

Host-System:

#uname -a
Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP Freitag, 31. Mai 2013, 20:21:23 UTC x86_64 x86_64 x86_64 GNU/Linux

srv-vh1:/mnt/tmpfs # virsh-Version
Kompiliert mit der Bibliothek: libvirt 1.0.2
Verwendete Bibliothek: libvirt 1.0.2
API verwenden: QEMU 1.0.2
Ausführender Hypervisor: QEMU 1.3.0

srv-vh1:/mnt/tmpfs # frei
             insgesamt genutzte freie gemeinsam genutzte Puffer im Cache
Speicher: 24627548 5084724 19542824 0 60640 138792
-/+ Puffer/Cache: 4885292 19742256
Tausch: 8384444 0 8384444

srv-vh1:/mnt/tmpfs # cat /etc/mtab | grep tmpfs
devtmpfs /dev devtmpfs rw, Relatime, Größe = 12296608k, Nr. Inodes = 3074152, Modus = 755 0 0
tmpfs /dev/shm tmpfs rw,relative Zeit 0 0
tmpfs /run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,mode=755 0 0
tmpfs /mnt/tmpfs tmpfs rw,relative Zeit 0 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs /tmp tmpfs rw,relative Zeit 0 0
tmpfs /var/lock tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /var/run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0

srv-vh1:/mnt/tmpfs # df
Dateisystem 1K-Blöcke verwendet Verfügbar Verwendet% Einhängepunkt
devtmpfs 12296608 68 12296540 1% /Entwickler
tmpfs 12313772 0 12313772 0% /dev/shm
tmpfs 12313772 6772 12307000 1 % /Lauf
/dev/md1 454131992 218835836 212227596 51% /
tmpfs 12313772 0 12313772 0% /sys/fs/cgroup
tmpfs 12313772 192 12313580 1% /mnt/tmpfs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs 12313772 20 12313752 1% /tmp
tmpfs 12313772 6772 12307000 1% /var/Sperre
tmpfs 12313772 6772 12307000 1 % /var/Lauf

srv-vh1:/mnt/tmpfs # virsh pool-info tmpfs
Name: tmpfs
UUID: 6287028a-9faf-f762-20de-d36d63657be3
Status: in Arbeit
Persistent: ja
Autostart: ja
Kapazität: 11,74 GiB
Anzahl der Teilnehmer: 0,00
Verfügbar: 11,74 GiB

srv-vh1:/mnt/tmpfs # ls -la
insgesamt 196
drwxrwxrwt 2 root root 60. Sept. 9, 11:42 .
drwxrwxr-x 4 qemu qemu 4096 8. Sept. 19:39 ..
-rw-rw-rw- 1 root root 197120 9. Sept. 11:42 tserver-tmp.qcow2

Was mache ich falsch ?

Antwort1

Wenn Sie cache=NONE für eine Disk-Image-Datei auf einem Host-Dateisystem festlegen, das Direct IO nicht unterstützt, gibt Virt-Manager derzeit anscheinend eine nicht sehr hilfreiche Fehlermeldung aus, die besagt: „Irgendwas, irgendwas ... Ungültiges Argument“ und weigert sich, die Gast-VM zu starten.

Ein Beispiel für ein solches Dateisystem, das Direct IO nicht unterstützt, ist tmpfs. Ein anderes Dateisystem, bei dem Sie Direct IO optional deaktivieren können, ist GlusterFS (von dem ich noch nie gehört hatte, bevor ich auf dasselbe Problem wie Sergei stieß und den Fehler untersuchte). Bei tmpfs scheint die fehlende Unterstützung von Direct IO derzeit eine technische Einschränkung oder ein Designkonflikt zu sein, und ich weiß nicht, ob dies in Zukunft behoben werden kann/wird.

In meinem Fall hatte ich eine 3,6 GB große Ramdisk für eine Win7Pro-Gast-VM unter CentOS7 eingerichtet und im Virt-Manager cache=NONE für die Ramdisk eingestellt. Die anderen Optionen, die das tmpfs-img verwendete, waren virtio und raw. Die VM weigerte sich, mit demselben/ähnlichen Fehler zu starten, der besagte: „... Ungültiges Argument“.

Technische Einzelheiten und Anmerkungen direkt vom Redhat-Ingenieur und -Entwickler, der den Patch für die Funktion cache=NONE codiert und Virt-Manager (Daniel Berrange) verwaltet (?), finden Sie in der Diskussion unter dem folgenden Link:

https://bugs.launchpad.net/nova/+bug/959637

Um Daniel von der URL oben zu zitieren: " > konnte Disk-Image /mnt/vmstore/instances/instance-0000001a/disk nicht öffnen: Ungültiges Argument

bedeutet wahrscheinlich, dass das Dateisystem kein Direct IO unterstützt. Soweit ich weiß, sollten alle Dateisysteme außer tmpfs dies unterstützen.."

Außerdem fährt Daniel fort: „- Was wir dann also tun wollen, ist, [....] zu prüfen, ob das Speichervolumen Direct IO unterstützt. Wenn ja, verwenden Sie cache=none, andernfalls greifen Sie auf cache=writethrough zurück, das kein Direct I/O verwendet, aber dennoch absturzsicher ist.“

In meinem Fall konnte ich überprüfen, dass die Einstellung cache=NONE für die tmpfs-img-Datei die VM NICHT startete und den Fehler wie besprochen anzeigte. Die VM konnte erfolgreich gestartet werden, wenn der Cache entweder auf „Standard“ oder explizit auf „Write-through“ eingestellt war. „Write-back“ macht keinen Sinn, da dieses Dateisystem sowohl entbehrlich ist als auch sich sowieso vollständig im RAM befand, also habe ich Write-back offensichtlich nicht verwendet.

Hoffentlich hilft das!

Antwort2

Warum geben Sie dem Gast nicht einfach mehr RAM, sodass er nicht tauschen muss?

srv-vh1:/mnt/tmpfs # ls -la
total 196
drwxrwxrwt 2 root root     60 сен  9 11:42 .
drwxrwxr-x 4 qemu qemu   4096 сен  8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен  9 11:42 tserver-tmp.qcow2

Ich stelle fest, dass Sie den Ordnerbesitzer auf qemu:qemu eingestellt haben. Wenn Sie qemu als anderer Benutzer ausführen, möchten Sie möglicherweise den Besitzer der Image-Datei von root auf qemu ändern.

Antwort3

Es ist ein Fehler. tmpfs unterstützt dies nicht cache=none.

verwandte Informationen