飞行日志
常用链接
韭菜搞钱
三省吾身
无问东西
从入门到放弃
知行合一
🎣使用指北-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 配置。在线上有许多不同的教程可以进一步了解这些概念。
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 镜像,你可以运行: