QEMU参数与使用
1. 基础参数
1.1 -h
或 --help
qemu-system-x86_64 -h
含义:
显示 QEMU 的帮助信息,列出所有支持的命令行选项和参数。这是了解 QEMU 功能的最直接方式
1.2 -M
qemu-system-x86_64 -M pc
qemu-system-aarch64 -M virt
含义:
指定模拟的机器类型。不同的架构支持不同的机器类型。
pc
:模拟标准的 x86_64
个人电脑,适用于运行 Windows
、Linux
等操作系统。
virt
:模拟 ARM
架构的虚拟化平台,常用于嵌入式开发。
q35
:模拟更现代的 x86_64
架构,支持更多高级功能。
1.3 -m
qemu-system-x86_64 -m 2048
含义:
为虚拟机分配内存大小。单位可以是 MB 或 GB(如 -m 2G
表示 2GB 内存)。
默认值: 128MB
建议: 根据虚拟机运行的操作系统和应用程序需求分配足够的内存。
1.4 -smp
qemu-system-x86_64 -smp 4
含义:
指定虚拟机的 CPU 核心数。
默认值: 1 核
建议: 根据宿主机的 CPU 核心数和虚拟机的需求分配核心数。例如,如果宿主机有 8 核,可以为虚拟机分配 2-4 核。
2. 存储设备参数
2.1 -hda
qemu-system-x86_64 -hda disk.img
含义:
指定第一个硬盘镜像文件,用于加载虚拟机的主硬盘镜像文件。-hda
是硬盘设备的别名,通常用于 IDE 硬盘。
2.2 -cdrom
qemu-system-x86_64 -cdrom ubuntu.iso
用途: 常用于加载操作系统安装镜像(如 ISO 文件),指定光盘镜像文件,以便从光盘启动虚拟机。
2.3 -drive
qemu-system-x86_64 -drive file=disk.img,format=raw
qemu-system-x86_64 -drive file=disk.qcow2,format=qcow2,if=virtio
含义:
更灵活地配置存储设备,支持多种格式和选项。
file=<镜像文件>
:指定镜像文件路径。
format=<格式>
:指定镜像文件格式,如 raw
、qcow2
等。
raw
:原始格式,简单高效,但不支持快照。
qcow2
:支持快照和动态扩展,适合开发和测试。
if=<接口类型>
:指定存储设备的接口类型,如 ide
、virtio
等。
ide
:传统 IDE 接口,兼容性好。
virtio
:高性能虚拟化接口,适用于虚拟机。
2.4 -boot
qemu-system-x86_64 -boot order=dc
含义:
指定虚拟机的启动顺序。
order=<设备顺序>
:定义启动设备的优先级。
d
:光盘(CD-ROM)。
c
:硬盘(HDD)。
n
:网络(PXE 启动)。
示例: -boot order=dc
表示先从光盘启动,如果光盘不可用,则从硬盘启动。
3. 网络参数
3.1 -net
或 -netdev
qemu-system-x86_64 -net nic -net user
-net nic
:添加一个虚拟网卡(默认是 e1000
网卡)。
-net user
:使用用户模式网络,提供 NAT 功能,虚拟机可以访问外部网络,但外部无法访问虚拟机。
用途: 适用于简单的网络需求,如虚拟机访问互联网。
3.2 -net bridge
qemu-system-x86_64 -net nic -net bridge,br=br0
含义:
配置桥接网络,允许虚拟机与宿主机共享网络接口。
br=<网桥名称>
:指定宿主机的网桥设备(如 br0
)。
用途: 适用于需要高性能网络的场景,虚拟机可以直接与外部网络通信。
4. 显示和交互参数
4.1 -nographic
qemu-system-x86_64 -nographic
含义:
禁用图形界面,所有输出通过终端显示。
4.2 -serial
qemu-system-x86_64 -serial stdio
含义:
配置串口设备。
stdio
:将串口设备重定向到标准输入输出(终端)。
4.3 -monitor
qemu-system-x86_64 -monitor stdio
含义:
配置 QEMU 的监控接口,用于管理虚拟机。可以在运行时动态修改虚拟机的配置,如添加设备、保存快照等。
stdio
:将监控接口重定向到标准输入输出,允许用户通过终端发送命令管理虚拟机。
5. 其他高级参数
5.1 -snapshot
qemu-system-x86_64 -drive file=disk.img -snapshot
含义:
以快照模式运行虚拟机,适用于临时测试。所有写入操作不会修改原始镜像文件,避免了修改原始镜像文件。
5.2 -enable-kvm
qemu-system-x86_64 -enable-kvm
含义:
启用 KVM 加速功能(仅限 Linux)。通过 KVM 提供硬件加速,可以显著提高虚拟机性能。
前提条件: 宿主机必须支持硬件虚拟化(如 Intel VT-x
或 AMD-V
)。
5.3 -kernel
和 -initrd
qemu-system-aarch64 -kernel vmlinuz -initrd initrd.img -append "root=/dev/vda1"
含义:
用于启动 Linux 内核和初始化 RAM 盘。
-kernel <内核文件>
:指定 Linux 内核文件。
-initrd <初始化 RAM 盘文件>
:指定初始化 RAM 盘文件。
-append "<启动参数>"
:传递启动参数给内核,如 root=/dev/vda1
指定根文件系统。
6.表格说明
参数 | 含义 |
---|---|
-h 或 --help | 显示 QEMU 的帮助信息 |
-M <machine> | 指定模拟的机器类型 |
-m <size> | 分配虚拟机的内存大小 |
-smp <count> | 指定虚拟机的 CPU 核心数 |
-hda <file> | 指定第一个硬盘镜像文件 |
-cdrom <file> | 指定光盘镜像文件 |
-drive <options> | 配置存储设备 |
-boot <options> | 指定启动顺序 |
-net <options> 或 -netdev <options> | 配置虚拟机的网络设备 |
-nographic | 禁用图形界面,仅通过串口输出 |
-serial <device> | 配置串口设备 |
-monitor <device> | 配置 QEMU 的监控接口 |
-snapshot | 以快照模式运行虚拟机 |
-enable-kvm | 启用 KVM 加速功能 |
-kernel <file> | 指定 Linux 内核文件 |
-initrd <file> | 指定初始化 RAM 盘文件 |
-append "<options>" | 向内核传递启动参数 |
7. 参数组合示例
示例 1:启动一个带有 ISO 文件的虚拟机
qemu-system-x86_64 -M pc -m 2048 -cdrom ubuntu.iso -boot order=d
解释:
-M pc
:模拟标准 x86_64
个人电脑。
-m 2048
:分配 2048MB
内存。
-cdrom ubuntu.iso
:将 ubuntu.iso
作为光盘设备。
-boot order=d
:从光盘启动。
示例 2:启动一个 ARM 架构的虚拟机
qemu-system-aarch64 -M virt -kernel vmlinuz -initrd initrd.img -drive file=arm_disk.img,format=raw -append "root=/dev/vda1"
解释:
-M virt
:模拟 ARM 架构的虚拟化平台。
-kernel vmlinuz
:指定 Linux 内核文件。
-initrd initrd.img
:指定初始化 RAM 盘文件。
-drive file=arm_disk.img,format=raw
:指定硬盘镜像文件。
-append "root=/dev/vda1"
:传递启动参数给内核。
示例 3:无图形界面运行虚拟机
qemu-system-x86_64 -nographic -serial stdio -drive file=disk.img
解释:
-nographic
:禁用图形界面。
-serial stdio
:将串口设备重定向到终端。
-drive file=disk.img
:指定硬盘镜像文件。
示例 4:使用 KVM 加速运行虚拟机
qemu-system-x86_64 -enable-kvm -m 2048 -drive file=disk.img,format=qcow2 -smp 4
解释:
-enable-kvm
:启用 KVM 加速。
-m 2048
:分配 2048MB 内存。
-drive file=disk.img,format=qcow2
:指定硬盘镜像文件,支持快照功能。
-smp 4
:分配 4 个 CPU 核心。
8. 注意事项
镜像格式选择:
raw
格式:简单高效,但不支持快照。
qcow2
格式:支持快照和动态扩展,适合开发和测试。
性能优化:
使用 -enable-kvm(Linux)
或 -cpu host
(其他平台)可以显著提高性能。
网络配置:
用户模式网络 -net user
适合简单场景,但性能较差。
桥接模式 -net bridge
适合需要高性能网络的场景。