🎣使用指北-015-qemu进阶

type
status
date
slug
summary
tags
category
icon
password

前言

本文翻译自 Gentoo 的官方 Wiki,主要介绍了 Qemu 的选项,为那些对 qemu 选项感到迷惑的人提供参考。
本文介绍一些可用于配置 QEMU 虚拟机的选项。有关当前 QEMU 安装的最新选项,请在终端上运行与你架构相匹配的 qemu 程序,如 qemu-system-aarch64。

名词

guest:客户机
host:宿主机
VM:虚拟机

1. 显示选项

有几个可用选项可用于指定要在 QEMU 中使用的显示类型。
  • display sdl - 通过 SDL 显示视频输出(通常在单独的图形窗口中)。
  • display curses - 通过诅咒显示视频输出。
  • display none - 不显示视频输出。此选项与该选项不同。有关更多信息,请参见手册页。-nographic
  • display gtk - 在GTK窗口中显示视频输出。这可能是大多数用户正在寻找的选项。
  • display vnc=127.0.0.1:<X> - 在显示器 X 上启动 VNC 服务器(接受显示编号的参数 (X))。用 X 代替显示的编号(然后 0 将侦听 5900,1 将侦听 5901,依此类推)。
例如,要让 QEMU 将显示内容发送到 GTK 窗口,请将以下选项添加到列表中:

2. 机器

  • matche type=q35,accel=kvm - 现代芯片组 (PCIe, AHCI 等)和硬件虚拟化加速;
  • object rng-ramdom,id=rng0,filename=/dev/unramdom -device virtio-rng-pci,rng=rng0 - 主机随机生成器的直通。解决由于熵缺少导致 Debian VM 等启动慢的问题。

3. 处理器

  • cpu <CPU> - 指定要模拟的 CPU 体系结构,可以选择 qemu-system-x86 -cpu ? 查看。
  • cpu host- (推荐)模拟主机处理器。
  • smp <NUMBER> - 指定允许 guest 使用的核心数。该数字可以大于主系统上的可用内核数,也可以用满所有核心,如 -smp $(nproc)

4. 内存

  • m MEMORY - 指定内存量,默认使用 128MB,例如:-m 256M, -m 2G。

5. 硬盘

  • hda IMAGE.img - 设置虚拟硬盘驱动器并为其使用指定的镜像文件。
  • drive - 虚拟硬盘驱动器的高级配置:
  • 非常快速 Virtio SCSI 模拟块设备、本机命令队列。您至少需要为每个块设备提供一个控制器(controller)并配对。如:virtio-scsi -drive -device scsi-hd
  • drive file=IMAGE.img,if=virtio - 设置一个特定的镜像,并使用虚拟的 Virtio 来驱动。
  • drive file=/dev/sdXY,cache=none,if=virtio - 设置一个特定的磁盘分区,并使用虚拟的 Virtio 来驱动。
  • drive id=disk,file=IMAGE.img,if=none -device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 - 为 ICH-9 AHCI 控制器设置一个模拟层,并且使用特定的镜像。AHCI 模拟器支持 NCQ,因此多路读写非常优秀。

6. 可选驱动器

  • cdrom IMAGE.iso - 设置虚拟 CDROM 驱动器,使用指定的镜像。
  • cdrom /dev/cdrom - 设置虚拟 CDROM 驱动器,指定 host 的设备。
  • drive - CDROM 驱动的高级配置:
  • drive file=IMAGE.iso,media=cdrom - 设置虚拟 CDROM 驱动器,使用指定的镜像,使用这个格式你可以指定多个镜像。

7. 启动顺序

  • boot c - 从第一块虚拟磁盘启动
  • boot d - 从第一虚拟 CD-ROM 驱动器启动
  • boot n - 从虚拟网络启动

8. 显卡

QEMU 可以模拟多种显卡:
  • vga cirrus - 一种简单的显卡,每一种 guest 系统已经内置;
  • vga std - 支持分辨率大于等于 1280x1024x16,Linux,Windows XP 以及新的 guest 以及内置该驱动;
  • vga vmware - VMware SVGA-II,一种更强的显卡,需要在 Linux 中安装x11-drivers/xf86-video-vmware,在 Windows XP 或者更新的机器中安装VMware Tools 。
  • vga qxl - 使用 SPICE 技术的更强显卡。
为了在同样色深下获取更强性能,你需要在虚拟机中启动它。

8.1. 虚拟机屏幕分辨率大于 1920x1024

客户端的默认图形内存不足以以更高的分辨率(例如4K)运行。为了克服此限制,请将以下设备选项添加到命令行:
进入客户端上的桌面后,可以保存和更改更高的分辨率。

9. PCI 直通

注意:这不是用于 GPU,这是完全不同的,可以参考一下链接。
针对 intel 处理器:
针对 AMD 处理器:
找到主机上的 PCI 设备:
记下设备(00:1b.0)和生产商(8086:284b)的 ID。
先与主机解绑:
然后将其绑定到虚拟机上:
  • device pci-assign,host=00:1b.0

10. 网络

默认没有任何 -netdev 选项,就是穿透模式。
提示:穿透模式只允许 TCP 和 UDP 链接,因此使用 ICMP 协议的 ping 命令将无法工作。尝试使用 curl 或者其他 UDP、TCP/IP 软件来测试联通。

10.1. 穿透模式

  • netdev user - QEMU 进程会为每个在虚拟机中的连接创建 TCP 与 UDP 连接。虚拟机无法访问外部网络。
  • device virtio-net,netdev=vmnic -netdev user,id=vmnic - (推荐)使用 VirtiO 穿透支持。
  • netdev user,id=vmnic,hostfwd=tcp:127.0.0.1:9001-:22 - 使用 QEMU 监听 9001 端口,连接那个端口会把转发到虚拟机的22端口。ssh -p 9001 localhost 将会登录到虚拟机中。

10.2. 虚拟网络电缆(TAP)

  • device virtio-net,netdev=vmnic -netdev tap,id=vmnic,ifname=vnet0,script=no - QEMU 在主机上创建了一个新设备,cap 另一端是虚拟机 vnet0

10.3. 网桥

创建 tap 网卡并连接到一个网桥上。请先阅读网桥和 QEMU 关于开启网桥支持的内核配置:

10.3.1. OpenRC

假定已经存在一个可以被虚拟机使用的 tap0,宿主机网卡 eth0。(译者注:以下为Gentoo中演示,不同发行版可以自行调整)
文件 /etc/conf.d/net
客户机和宿主机可以使用相同的子网段。

10.3.2. systemd

创建网桥:/etc/systemd/network/vmbridge.netdev
配置网桥地址:/etc/systemd/network/10-vmbridge.network
文件:/your/path/to/qemu/stuff/addtobridge.sh
在配置 OpenRC 或者 systemd 之后,可以使用 tap 网络运行虚拟机:
当虚拟机启动时,脚本将会创建新的网桥设备,当启动其他的虚拟机设备时,两个设备都在网桥中,因此可以相互通信。

10.4. NAT

下面概述了更高级的网络概念,该概念允许来宾访问外部网络,并且还可以与主机上的有线和无线适配器配合使用。如果需要,还可以在主机上设置 DHCP 服务器,以允许动态客户机 IP 配置。在线上有许多不同的教程可以进一步了解这些概念。
notion image

10.4.1 主机配置

10.4.1.1 创建 TUN/TAP 设备

这些设备允许使用网桥进行通信。QEMU 的默认组是 kvm,确保正确的组被给与控制 TAP 的权限,使能混杂模式(promisc)或许是非必要的。

10.4.1.2 创建网桥

创建网桥并将 TAP 与其绑定。由于只有一个网桥,此处禁用 stp 协议:

10.4.1.3 包转发与 NAT

允许流量转发:

10.4.1.4 速配脚本

10.4.2 客户机配置

旧版本 qemu 配置:
新版本 qemu 配置:

10.5 IPv6

针对 IPv6 网络,可以查看文章:https://wiki.gentoo.org/wiki/QEMU/KVM_IPv6_Support

11. 内置 SMB 服务器

注意:仅在穿透模式下有小。
如果宿主机已经安装了 SMB 服务器,QEMU 可以模拟一个虚拟的 SMB 服务器:
  • smb /usr/local/public - 将宿主机目录映射到虚拟机中,如果是 Windows 访问方法为 \\10.0.2.4\qemu。
自动化的生成 smb.conf 文件,会保存在 /tmp/qemu-smb.pid-0/smb.conf

12. USB

  • usbdevice tablet - (推荐)使用 USB tablet 代替默认的 PS/2 鼠标,因为 tablet 可以捕捉宿主机光标。
  • usbdevice host:VERNDOR-ID:PRODUCT-ID - 穿透一个 USB 设备到虚拟机中,可以使用 lsusb 获取设备的制造商和产品 ID:
08ec 是制造商 ID,2039 是产品 ID。

13. 键盘布局

  • k LAYOUT - 设置键盘布局,例如 de 就是德国键盘布局,推荐在 VNC 连接的时候使用。

14. 快照

  • snapshot - 临时快照设置所有修改到临时文件,而不是硬盘镜像。
  • hda OVERLAY.img - Overlay 快照:保存所有到修改到一个 overlay 镜像,而不是硬盘镜像。原始的镜像将不会被修改,为了创建 overlay 镜像,你可以运行:

15. 参考链接

使用指北-014-qemu入门使用指北-016-git提交规范[转]
飞行日志
常用链接
韭菜搞钱
三省吾身
无问东西
从入门到放弃
知行合一