我想确定我开始使用的 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 工具。在该框架中,您可以使用任何支持的虚拟机管理程序来定义虚拟机,包括libvirt
、qemu
、xen
通过virtualbox
管理接口。
libvirt
提供了高于诸如qemu
.有了它,你就不会qemu
直接开始了。相反,将从一些允许与 交互的特殊选项libvirt
开始。qemu
qemu
例如,在我的系统上,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 shutdown
。virsh
会将这些传输到libvirtd
守护进程,守护进程又会qemu
使用该通道将其转换为特定指令。
但就您而言,您没有使用libvirt
.您尚未使用virt-manager
或virt-install
(或virsh define/create
) 定义虚拟机。相反,您qemu
自己手动启动。
libvirt
,如果已安装,则不知道该虚拟机。因此尝试virsh
与它交互是没有意义的。
你开始的方式qemu
,你没有指定任何特定的监视器与之交互的通道,因此您将获得默认值。
默认情况下,您通常会得到雪迪龙图形控制台。
在其中,您可以输入Ctrl+Alt+2以获取人类监控界面。那是一个命令行界面。你会看到一个
(qemu)
提示您可以在其中输入命令。尝试help
总结一下。
如果你给了一个姓名到您的虚拟机-name
,您可以使用info name
那里的命令检索它。
这就是您运行savevm
qemu 命令的地方。但要使用该savevm
命令,据我所知,您必须至少将一个qcow2
磁盘映像附加到虚拟机,但这似乎不适合您的情况。
要挂起并保存虚拟机的状态,您可以执行以下操作(在提示符下(qemu)
):
migrate "exec:gzip>/path/to/savedstate.gz"
这将挂起虚拟机并将压缩状态保存到文件中。然后,您可以通过在命令行中quit
添加 来将虚拟机从保存的状态恢复。-incoming 'exec:gunzip</path/to/savestate.gz'
qemu-system
如果您熟悉 qemu,您可以做很多事情,但如果您想让您的生活更轻松,您可能会使用 qemu 的管理包装器,例如 libvirt。