如何確定正在運行的 QEMU 虛擬機器的名稱?

如何確定正在運行的 QEMU 虛擬機器的名稱?

我想確定我開始使用的 QEMU VM 的名稱:

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

(根據GuixSD虛擬機器安裝指南)。我希望確定虛擬機器名稱的原因是這樣我可以使用該savevm命令保存其機器狀態(類似於 VirtualBox 虛擬機器的方式)。我嘗試過使用:

virsh -c qemu:///system list

但這會回來:

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

同樣運行:

ps -ef | grep qemu-system-x86_64

(每這個 AskUbuntu 答案)沒有幫助,因為我用來啟動虛擬機器的命令。如果有某種相關性的話,我正在運行 Gentoo Linux 作為我的主機作業系統。

答案1

virsh是操作libvirt虛擬化管理框架的 CLI 工具。在該框架中,您可以使用任何支援的虛擬機管理程式來定義虛擬機,包括libvirtqemuxen透過virtualbox管理介面。

libvirt提供了高於諸如qemu.有了它,你就不會qemu直接開始了。相反,將從一些允許與 互動的特殊選項libvirt開始。qemuqemu

例如,在我的系統上,libvirt使用其虛擬機器的以下參數啟動 qemu:

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

其中大部分是虛擬機器的虛擬硬體的規範,但您也會看到:

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

libvirt它指定一個可以與之互動的通道qemu(使用一些基於 JSON 的機器協定)

但你不會直接使用它。您可以發出virsh類似的命令virsh shutdownvirsh會將這些傳輸到libvirtd守護進程,守護進程又會qemu使用該通道將其轉換為特定指令。

但就您而言,您沒有使用libvirt.您尚未使用virt-managervirt-install(或virsh define/create) 定義虛擬機器。相反,您qemu自己手動啟動。

libvirt,如果已安裝,則不知道該虛擬機器。因此嘗試virsh與它互動是沒有意義的。

你開始的方式qemu,你沒有指定任何特定的監視器與之互動的通道,因此您將獲得預設值。

預設情況下,您通常會得到雪迪龍圖形控制台。

在其中,您可以輸入Ctrl+Alt+2以獲取人類監控介面。那是一個命令列介面。你會看到一個

 (qemu) 

提示您可以在其中輸入命令。試著help總結一下。

如果你給了一個姓名到您的虛擬機-name,您可以使用info name那裡的命令檢索它。

這就是您運行savevmqemu 命令的地方。但要使用該savevm命令,據我所知,您必須至少將一個qcow2磁碟映像附加到虛擬機,但這似乎不適合您的情況。

若要掛起並儲存虛擬機器的狀態,您可以執行下列操作(在提示字元下(qemu)):

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

這將掛起虛擬機器並將壓縮狀態儲存到檔案中。然後,您可以透過在命令列中quit新增 來將虛擬機器從已儲存的狀態還原。-incoming 'exec:gunzip</path/to/savestate.gz'qemu-system

如果您熟悉 qemu,您可以做很多事情,但如果您想讓您的生活更輕鬆,您可能會使用 qemu 的管理包裝器,例如 libvirt。

相關內容