Wie ermittelt man den Namen einer laufenden virtuellen QEMU-Maschine?

Wie ermittelt man den Namen einer laufenden virtuellen QEMU-Maschine?

Ich möchte den Namen einer QEMU-VM ermitteln, mit der ich gestartet bin:

qemu-system-x86_64 -m 4096 -smp 1 \
  -net user -net nic,model=virtio -boot menu=on \
  -drive file=guixsd-usb-install-0.13.0.x86_64-linux.img \
-drive file=guixsd.img

(gemäß derGuixSD VM-Installationsanleitung). Der Grund für meinen Wunsch, den Namen der VM zu ermitteln, besteht darin, dass ich ihren Maschinenzustand (ähnlich wie bei einer VirtualBox-VM) mit dem savevmBefehl speichern kann. Ich habe Folgendes versucht:

virsh -c qemu:///system list

aber dies gibt zurück:

 Id    Name                           State
----------------------------------------------------

ebenfalls laufend:

ps -ef | grep qemu-system-x86_64

(prodiese AskUbuntu-Antwort) ist aufgrund des Befehls, den ich zum Starten der VM verwendet habe, nicht hilfreich. Falls es irgendwie relevant ist: Ich verwende Gentoo Linux als mein Host-Betriebssystem.

Antwort1

virshist das CLI-Tool zum Bedienen des libvirtVirtualisierungsmanagement-Frameworks. In diesem Framework definieren Sie virtuelle Maschinen mit einem der unterstützten Hypervisoren, indem Sie über die Verwaltungsschnittstelle , , libvirteinbinden .qemuxenvirtualbox

libvirtbietet eine Abstraktionsebene über Dingen wie qemu. Damit würden Sie nicht qemudirekt beginnen. Stattdessen libvirtwürden Sie mit einigen speziellen Optionen beginnen qemu, die eine Interaktion mit ermöglichen qemu.

Auf meinem System habe ich beispielsweise libvirtqemu mit diesen Parametern für eine seiner VMs gestartet:

qemu-system-x86_64  -enable-kvm \
                    -name freebsd11.0 -S \
                    -machine pc-i440fx-wily,accel=kvm,usb=off \
                    -cpu Nehalem \
                    -m 1536 \
                    -realtime mlock=off \
                    -smp 3,sockets=3,cores=1,threads=1 \
                    -uuid 82f3448e-2767-46b1-a7d1-7072184ef924 \
                    -no-user-config \
                    -nodefaults \
                    -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-freebsd11.0/monitor.sock,server,nowait \
                    -mon chardev=charmonitor,id=monitor,mode=control \
                    -rtc base=utc,driftfix=slew \
                    -global kvm-pit.lost_tick_policy=discard \
                    -no-hpet \
                    -no-shutdown \
                    -global PIIX4_PM.disable_s3=1 \
                    -global PIIX4_PM.disable_s4=1 \
                    -boot strict=on \
                    -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 \
                    -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 \
                    -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x6.0x1 \
                    -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x6.0x2 \
                    -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 \
                    -drive file=/home/chazelas/Downloads/FreeBSD-11.0-RC1-amd64.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 \
                    -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
                    -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 \
                    -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:11:8a:53,bus=pci.0,addr=0x3 \
                    -chardev pty,id=charserial0 \
                    -device isa-serial,chardev=charserial0,id=serial0 \
                    -chardev spicevmc,id=charchannel0,name=vdagent \
                    -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 \
                    -spice port=5900,addr=127.0.0.1,disable-ticketing,image-compression=off,seamless-migration=on \
                    -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vgamem_mb=16,bus=pci.0,addr=0x2 \
                    -device intel-hda,id=sound0,bus=pci.0,addr=0x4 \
                    -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
                    -chardev spicevmc,id=charredir0,name=usbredir \
                    -device usb-redir,chardev=charredir0,id=redir0 \
                    -chardev spicevmc,id=charredir1,name=usbredir \
                    -device usb-redir,chardev=charredir1,id=redir1 \
                    -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 \
                    -msg timestamp=on

Das meiste davon sind Spezifikationen der virtuellen Hardware der virtuellen Maschine, aber Sie sehen auch:

-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-freebsd11.0/monitor.sock,server,nowait 
-mon chardev=charmonitor,id=monitor,mode=control

Gibt einen Kanal an, mit dem libvirtinteragiert werden kann qemu(mithilfe einiger JSON-basierterMaschineProtokoll)

Aber Sie würden das nicht direkt verwenden. Sie würden virshBefehle wie eingeben virsh shutdown. virshwürden diese an den libvirtdDaemon übermitteln, der sie wiederum qemuüber diesen Kanal in spezifische Anweisungen übersetzen würde.

In Ihrem Fall verwenden Sie jedoch nicht libvirt. Sie haben keine VM mit virt-manageroder virt-install(oder ) definiert. Stattdessen haben Sie sie selbst manuell virsh define/creategestartet .qemu

libvirt, wenn es installiert ist, hat es keine Kenntnis von dieser VM. Es hat also keinen Sinn, zu versuchen, virshdamit zu interagieren.

So wie Sie angefangen haben qemu, haben Sie keine besonderenMonitorKanal, um damit zu interagieren, Sie erhalten also die Standardeinstellung.

Standardmäßig erhalten Sie normalerweise dieSDLGrafikkonsole.

Darin können Sie eingeben, Ctrl+Alt+2um diemenschlichMonitorschnittstelle. Das ist eine Befehlszeilenschnittstelle. Sie sehen ein

 (qemu) 

Eingabeaufforderung, in der Sie Befehle eingeben können. Versuchen Sie helpes mit einer Zusammenfassung.

Wenn Sie eineNamezu Ihrer VM mit -name, können Sie es mit dem info namedortigen Befehl abrufen.

Dort würden Sie Ihren savevmQEMU-Befehl ausführen. Aber um den savevmBefehl zu verwenden, muss meines Wissens nach mindestens ein qcow2Disk-Image an die VM angeschlossen sein, was bei Ihnen nicht der Fall zu sein scheint.

Um den Zustand der VM anzuhalten und zu speichern, können Sie (an der (qemu)Eingabeaufforderung) Folgendes tun:

migrate "exec:gzip>/path/to/savedstate.gz"

Dadurch wird die VM angehalten und der komprimierte Zustand in einer Datei gespeichert. Anschließend können Sie quitdie VM aus diesem gespeicherten Zustand wiederherstellen, indem Sie -incoming 'exec:gunzip</path/to/savestate.gz'Ihrer qemu-systemBefehlszeile ein hinzufügen.

Wenn Sie sich mit QEMU gut auskennen, können Sie eine ganze Menge tun. Wenn Sie sich das Leben jedoch einfacher machen möchten, verwenden Sie wahrscheinlich Verwaltungs-Wrapper für QEMU, beispielsweise libvirt.

verwandte Informationen