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 savevm
Befehl 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
virsh
ist das CLI-Tool zum Bedienen des libvirt
Virtualisierungsmanagement-Frameworks. In diesem Framework definieren Sie virtuelle Maschinen mit einem der unterstützten Hypervisoren, indem Sie über die Verwaltungsschnittstelle , , libvirt
einbinden .qemu
xen
virtualbox
libvirt
bietet eine Abstraktionsebene über Dingen wie qemu
. Damit würden Sie nicht qemu
direkt beginnen. Stattdessen libvirt
würden Sie mit einigen speziellen Optionen beginnen qemu
, die eine Interaktion mit ermöglichen qemu
.
Auf meinem System habe ich beispielsweise libvirt
qemu 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 libvirt
interagiert werden kann qemu
(mithilfe einiger JSON-basierterMaschineProtokoll)
Aber Sie würden das nicht direkt verwenden. Sie würden virsh
Befehle wie eingeben virsh shutdown
. virsh
würden diese an den libvirtd
Daemon ü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-manager
oder virt-install
(oder ) definiert. Stattdessen haben Sie sie selbst manuell virsh define/create
gestartet .qemu
libvirt
, wenn es installiert ist, hat es keine Kenntnis von dieser VM. Es hat also keinen Sinn, zu versuchen, virsh
damit 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 help
es mit einer Zusammenfassung.
Wenn Sie eineNamezu Ihrer VM mit -name
, können Sie es mit dem info name
dortigen Befehl abrufen.
Dort würden Sie Ihren savevm
QEMU-Befehl ausführen. Aber um den savevm
Befehl zu verwenden, muss meines Wissens nach mindestens ein qcow2
Disk-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 quit
die VM aus diesem gespeicherten Zustand wiederherstellen, indem Sie -incoming 'exec:gunzip</path/to/savestate.gz'
Ihrer qemu-system
Befehlszeile 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.