搜索 K
主题
主题
受控内容
该页面需要完成登录认证后才能查看。
虚拟机用于本地调试、环境模拟和固件验证,不需要真实硬件即可运行和测试目标系统。
图形界面,Windows/Linux 日常开发最常用,开箱即用。Player 免费版够用。
| 需求 | 推荐 |
|---|---|
| Windows 日常开发测试 | VMware Workstation Player |
| Windows 跑 Linux 命令 | WSL2 |
| Windows 跑容器 | Docker Desktop |
| macOS 日常开发测试 | Parallels Desktop / VMware Fusion |
| macOS 跑容器 | OrbStack / Docker Desktop / Podman |
| 需要模拟 ARM / MIPS 设备 | QEMU |
| Linux 本机最高性能 | KVM |
| Linux 跑容器 | Docker / Podman |
| 现场 Linux 服务器多虚机管理 | Proxmox VE |
| 企业 VMware 生态 | ESXi |
| Windows 内置虚拟机 | Hyper-V |
| 需要 GPU / USB / PCIe 直通 | KVM / PVE / ESXi |
| 快速跑个 Linux 测试命令 | QEMU user mode |
| 秒启动隔离环境跑服务 | Docker / Podman |
| 类型 | 宿主系统 | 设备直通 | 异构模拟 | Web 管理 | 费用 | |
|---|---|---|---|---|---|---|
| VMware Workstation | Type 2 | Win / Linux | 有限(USB) | ✗ | ✗ | Player 免费 / Pro 付费 |
| VMware Fusion | Type 2 | macOS | 有限(USB) | ✗ | ✗ | 个人免费 / Pro 付费 |
| Parallels Desktop | Type 2 | macOS | USB | ✗ | ✗ | 付费 |
| VirtualBox | Type 2 | Win / macOS / Linux | USB | ✗ | ✗ | 免费 |
| Hyper-V | Type 1 | Win (Pro/Ent) | PCIe / GPU / USB | ✗ | ✗ | 系统自带 |
| KVM | Type 1 | Linux | PCIe / GPU / USB | ✗ | ✗ | 免费 |
| QEMU | 模拟器 | 全平台 | 可配合 KVM | ✓(ARM/MIPS/...) | ✗ | 免费 |
| Proxmox VE | Type 1 | 裸机 | PCIe / GPU / USB | ✗ | ✓ | 免费 |
| ESXi | Type 1 | 裸机 | PCIe / GPU / USB | ✗ | ✓ | 免费基础版 |
| 类型 | 宿主系统 | 启动速度 | 隔离级别 | GUI | 典型场景 | |
|---|---|---|---|---|---|---|
| WSL2 | 轻量 VM | Win 10+ | 秒级 | 内核隔离 | ✗ | Linux 命令行开发 |
| Docker | 容器 | Win / macOS / Linux | 秒级 | 进程隔离 | ✗ | 跑服务、编译、CI |
| Podman | 容器 | Win / macOS / Linux | 秒级 | 进程隔离(rootless) | ✗ | 安全容器、Docker 替代 |
| OrbStack | 轻量 VM | macOS | USB | ✗ | ✗ | 个人免费 / 商业付费 |
容器 vs 虚拟机:容器共享宿主内核,启动快、开销小,但不支持内核级调试(驱动开发、内核模块测试)。需要完整内核隔离时用虚拟机。
Windows Subsystem for Linux 2,在 Windows 内跑真实 Linux 内核,秒启动,文件互通。
wsl --install
# 默认安装 Ubuntu,重启后可用wsl --install -d Debian
wsl --install -d Ubuntu-24.04
wsl --list --online # 查看可用发行版dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 重启后设置 WSL2 为默认
wsl --set-default-version 2# 进入 WSL
wsl
# 指定发行版
wsl -d Debian
# Windows ↔ WSL 文件互访
# WSL 中访问 Windows:/mnt/c/Users/xxx
# Windows 中访问 WSL:\\wsl$\Ubuntu\home
# 网络端口互通
# WSL 中启动的服务,Windows 可直接通过 localhost 访问网络:WSL2 默认 NAT 模式,Windows 通过 localhost 访问 WSL 服务。从 WSL 访问 Windows 局域网设备直接可用。
USB 设备:WSL2 默认不能直接访问 USB 设备,需要 usbipd-win:
# Windows 端安装 usbipd
winget install usbipd
# 列出 USB 设备
usbipd list
# 绑定设备(需要管理员)
usbipd bind --busid 1-1
# 挂载到 WSL
usbipd attach --wsl --busid 1-1# WSL 内验证
lsusb
dmesg | grep ttyUSBWSL2 底层使用 Hyper-V 的轻量虚拟机(Utility VM),但不需要完整开启 Hyper-V 功能。
VirtualMachinePlatform,不要求 Hyper-V 功能容器方案,秒启动隔离环境,适合跑服务、编译、测试、CI。
Docker 在不同平台上的底层实现不同,影响性能和资源占用。
| 后端 | 平台 | 底层 | 资源占用 | 说明 |
|---|---|---|---|---|
| Docker Engine | Linux | 原生内核 | 最低 | 直接跑在宿主内核,无虚拟化开销 |
| Docker Desktop (WSL2) | Windows | WSL2 轻量 VM | 中 | 默认后端,用 WSL2 跑 Linux 内核 |
| Docker Desktop (Hyper-V) | Windows | Hyper-V VM | 高 | 旧版后端,现已被 WSL2 替代 |
| Docker Desktop (Apple VM) | macOS | Apple 虚拟化框架 | 中 | macOS 专属后端 |
| OrbStack | macOS | Apple 虚拟化框架 | 极低 | 替代 Docker Desktop,CPU/内存占用远低 |
选择建议:Linux 直接用 Docker Engine;macOS 优先 OrbStack;Windows 用 Docker Desktop (WSL2 后端)。
# 安装 Docker Engine
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 运行容器
docker run -it ubuntu bash
docker run -d -p 8080:80 nginx# 安装 Docker Desktop
# https://www.docker.com/products/docker-desktop/
# 运行容器
docker run -it ubuntu bash
docker run -d -p 8080:80 nginxDocker 的开源替代,无需 daemon,支持 rootless 运行,更安全。
# 安装
apt install podman # Debian/Ubuntu
dnf install podman # RHEL/CentOS/Fedora
# 用法和 Docker 几乎一样(可以 alias docker=podman)
podman run -it ubuntu bash
podman run -d -p 8080:80 nginx# 安装 Podman Desktop
# https://podman-desktop.io/downloads
# 或命令行
podman machine init
podman machine start
podman run -it ubuntu bash| Docker | Podman | |
|---|---|---|
| Daemon | 需要 dockerd | 无 daemon |
| Root 权限 | 默认 root | 支持 rootless |
| Docker Compose | ✓ | ✓(podman-compose) |
| GUI | Docker Desktop | Podman Desktop |
| 企业支持 | Docker Inc. | Red Hat |
| 兼容性 | 最广泛 | Docker CLI 兼容 |
选择建议:
容器内使用 GPU,适合 AI 推理、CUDA 编译、图形渲染等场景。
Docker 官方支持 NVIDIA GPU 直通,需要 NVIDIA Container Toolkit。
1. 安装 NVIDIA 驱动(宿主机)
# 确认驱动和 GPU
nvidia-smi2. 安装 NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -sL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt update
apt install -y nvidia-container-toolkit
systemctl restart dockercurl -sL https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
tee /etc/yum.repos.d/nvidia-container-toolkit.repo
yum install -y nvidia-container-toolkit
systemctl restart docker3. 运行 GPU 容器
# 验证 GPU 可用
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
# 指定 GPU(只用第 0 张)
docker run --rm --gpus device=0 nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
# 指定多张 GPU
docker run --rm --gpus device=0,1 nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
# 限制 GPU 显存(实验性)
docker run --rm --gpus all \
-e NVIDIA_VISIBLE_DEVICES=0 \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi4. Docker Compose 中使用 GPU
services:
ai:
image: nvidia/cuda:12.4.0-base-ubuntu22.04
command: nvidia-smi
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]Podman 也支持 NVIDIA GPU,通过 --device 和环境变量:
# Podman 使用 NVIDIA GPU
podman run --rm \
--device /dev/dri \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi也可使用 nvidia-container-toolkit 提供的 nvidia-container-runtime:
podman run --rm --runtime nvidia \
-e NVIDIA_VISIBLE_DEVICES=all \
nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smiAMD GPU 通过 ROCm 和 /dev/dri 设备映射实现容器内使用。
# 暴露 DRI 设备
docker run --rm \
--device /dev/dri \
-e HSA_OVERRIDE_GFX_VERSION=10.3.0 \
rocm/pytorch:latest \
python -c "import torch; print(torch.cuda.is_available())"
# 或使用 ROCm 官方镜像
docker run --rm \
--device /dev/dri \
--group-add=video \
--cap-add=SYS_PTRACE \
rocm/pytorch:latest rocm-smiHSA_OVERRIDE_GFX_VERSION 需要根据实际 GPU 架构设置,常见值:
| GPU | GFX_VERSION |
|---|---|
| RX 6800/6900 | 10.3.0 |
| RX 7600/7700/7800/7900 | 11.0.0 |
| RX 9070 | 12.0.1 |
Intel GPU 通过 /dev/dri 设备映射 + Compute Runtime 实现。
# Intel Arc / 集显
docker run --rm \
--device /dev/dri \
--group-add=video \
intel/oneapi-hpckit:latest \
/opt/intel/oneapi/compiler/latest/bin/icpx --version
# SYCL / oneAPI 推理
docker run --rm \
--device /dev/dri \
intel/intel-extension-for-pytorch:latest \
python -c "import torch; print(torch.xpu.is_available())"| NVIDIA | AMD | Intel | |
|---|---|---|---|
| 方案 | NVIDIA Container Toolkit | ROCm + /dev/dri | Compute Runtime + /dev/dri |
| 安装复杂度 | 低(一行安装 toolkit) | 中(需配置环境变量) | 中 |
| 生态 | 最成熟 | ROCm 生态 | oneAPI 生态 |
| 典型场景 | CUDA 推理/训练 | ROCm 推理/训练 | SYCL / OpenVINO 推理 |
| Podman 支持 | ✓ | ✓ | ✓ |
macOS 上替代 Docker Desktop 的轻量方案,基于 Apple 虚拟化框架,CPU 和内存占用远低于 Docker Desktop。
# 下载安装
# https://orbstack.dev/
# 或 Homebrew
brew install orbstackdocker runlocalhost 直接访问| OrbStack | Docker Desktop | |
|---|---|---|
| CPU 占用 | 极低(空闲几乎 0%) | 较高(常驻 1-5%) |
| 内存占用 | 最低 ~50MB | 最低 ~500MB |
| 启动速度 | < 2 秒 | 5-10 秒 |
| Docker CLI | ✓ | ✓ |
| Docker Compose | ✓ | ✓ |
| Linux VM | ✓ | ✗(只有 Docker) |
| 费用 | 个人免费 / 商业付费 | 个人免费 / 商业付费 |
# 安装后直接使用 docker 命令
orb start # 启动(秒启动)
docker run -it ubuntu bash
docker compose up -d
# 管理 Linux VM
orb list # 列出 VM
orb create ubuntu # 创建 Ubuntu VM
orb ssh ubuntu # SSH 连接
orb stop --all # 停止全部Windows Pro/Enterprise 内置的 Type 1 虚拟机管理程序,不需要额外安装软件。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
# 重启后生效控制面板 → 程序 → 启用或关闭 Windows 功能 → 勾选 Hyper-V → 确定 → 重启# 创建虚拟机
New-VM -Name "test" -MemoryStartupBytes 2GB -NewVHDPath "C:\VM\test.vhdx" -NewVHDSizeBytes 20GB
# 启动 / 停止
Start-VM -Name "test"
Stop-VM -Name "test"
# 快照
Checkpoint-VM -Name "test" -SnapshotName "snap1"
# 连接控制台(GUI)
vmconnect.exe localhost testHyper-V 和 VMware / VirtualBox 共存可能出问题:
如果 VMware/VirtualBox 运行异常,尝试关闭 Hyper-V:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
# 重启VMware Workstation(Windows/Linux)和 VMware Fusion(macOS)是同一产品线,功能对应,操作方式一致。
VMware Tools 是 VMware 官方提供的增强工具包,安装后获得:
不装 VMware Tools:只能用低分辨率,鼠标需手动释放,不能复制粘贴,体验很差。
| VMware Tools(官方闭源) | open-vm-tools(开源) | |
|---|---|---|
| 来源 | VMware 官方打包 | 社区维护,各大发行版官方仓库 |
| 安装方式 | 菜单安装 → 挂载 ISO → 手动编译 | apt install open-vm-tools |
| 更新方式 | 手动重新安装 | 包管理器自动更新 |
| 功能 | 全部功能 | 核心功能齐全,缺少数次要特性 |
| 推荐 | 仅当开源版本不工作时 | 优先选择 |
结论:Linux 虚拟机优先装
open-vm-tools,省心且自动更新。只有遇到兼容性问题时才回退到官方闭源版本。Windows 虚拟机只能用官方 VMware Tools。
apt install open-vm-tools open-vm-tools-desktop
systemctl enable --now open-vm-toolsyum install open-vm-tools open-vm-tools-desktop
systemctl enable --now open-vm-toolspacman -S open-vm-tools
systemctl enable --now vmtoolsd1. VMware 菜单 → VM → Install VMware Tools
2. 虚拟机内挂载 ISO:
mount /dev/cdrom /mnt
tar xzf /mnt/VMwareTools-*.tar.gz -C /tmp
sudo /tmp/vmware-tools-distrib/vmware-install.pl
3. 重启1. VMware 菜单 → VM → Install VMware Tools
2. 虚拟机内打开"此电脑",双击光驱运行安装程序
3. 选择 Typical → 安装完成 → 重启# Win7 需要旧版 VMware Tools,新版不兼容
# 下载 ISO:
# https://pan.feidu.fit/开发/常用工具/vmware_tools_w7_x64.iso
1. 下载 ISO 后挂载到虚拟机光驱
2. 虚拟机内打开光驱运行安装程序
3. 安装完成 → 重启安装后逐项验证:
| 功能 | 验证方法 |
|---|---|
| 高分辨率 | 调整窗口大小,分辨率自动跟随 |
| 鼠标释放 | 鼠标直接移出窗口,不需要 Ctrl+Alt |
| 剪贴板 | 宿主复制文本,虚拟机粘贴 |
| 拖放 | 从宿主桌面拖文件到虚拟机 |
| 共享文件夹 | ls /mnt/hgfs/ (Linux)或资源管理器网络位置(Windows) |
| 时间同步 | date 对比宿主时间 |
共享文件夹不生效时手动挂载:
vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other3D 加速不可用:
open-vm-tools 默认不包含 3D 驱动,如需 3D 加速(桌面特效、GUI 渲染),安装官方 VMware Tools 或在 .vmx 中加 mks.enable3d = "TRUE"。
共享文件夹为空:
确保 VMware 设置中启用了共享文件夹,且虚拟机内 vmhgfs-fuse 可用:
# 检查模块
modprobe vmhgfs
lsmod | grep vmhgfs
# 手动挂载
vmhgfs-fuse .host:/shared /mnt/hgfs -o allow_other剪贴板不工作:
需要同时安装 open-vm-tools-desktop(包含剪贴板和拖放组件):
apt install open-vm-tools-desktop升级内核后工具失效:
DKMS 模块在内核更新后自动重新编译,如果没装 DKMS:
apt install dkms
# 或重装
apt install --reinstall open-vm-tools-dkmsVirtualBox Guest Additions 是 VirtualBox 官方增强工具包,功能类似 VMware Tools。
不装 Guest Additions:低分辨率、鼠标需手动释放、不能复制粘贴。
# Debian/Ubuntu — 官方仓库版本,自动更新
apt install virtualbox-guest-additions-iso virtualbox-guest-dkms
modprobe vboxguest1. VirtualBox 菜单 → 设备 → 安装增强功能
2. 虚拟机内挂载 ISO:
mount /dev/cdrom /mnt
sudo /mnt/VBoxLinuxAdditions.run
3. 重启1. VirtualBox 菜单 → 设备 → 安装增强功能
2. 虚拟机内打开"此电脑",双击光驱运行 VBoxWindowsAdditions.exe
3. 安装完成 → 重启| 功能 | 验证方法 |
|---|---|
| 高分辨率 | 调整窗口大小,分辨率自动跟随 |
| 鼠标释放 | 鼠标直接移出窗口 |
| 剪贴板 | 宿主复制文本,虚拟机粘贴 |
| 拖放 | 从宿主桌面拖文件到虚拟机 |
| 共享文件夹 | ls /mnt/shared/ (Linux)或网络位置(Windows) |
| 时间同步 | date 对比宿主时间 |
共享文件夹手动挂载:
mount -t vboxsf shared /mnt/shared内核更新后失效:
需要 DKMS 自动重编译,确保安装了 DKMS:
apt install dkms
# 或重装
dpkg-reconfigure virtualbox-guest-dkms共享文件夹权限不足:
# 将当前用户加入 vboxsf 组
sudo usermod -aG vboxsf $USER
# 重新登录生效3D 加速不可用:
剪贴板不工作:
# 重启剪贴板服务
pkill VBoxClient
VBoxClient --clipboardKVM 系虚拟机没有像 VMware/VirtualBox 那样的单一增强工具包,而是由多个独立组件组合提供等效功能。
| 组件 | 功能 | 替代 VMware Tools 中的 |
|---|---|---|
| virtio 驱动 | 高性能磁盘/网络/内存气球 | vmxnet / pvscsi 驱动 |
| QEMU Guest Agent | 关机/快照/信息查询 | VMware Tools 服务 |
| SPICE vdagent | 剪贴板/自适应分辨率/鼠标 | 剪贴板 + 自动调整 |
| rngd | 宿主熵源注入虚拟机 | 时间同步(部分) |
| acpid | 虚拟机响应关机信号 | 电源管理 |
apt install qemu-guest-agent spice-vdagent virtio-dkms acpid rng-tools
systemctl enable --now qemu-guest-agent
systemctl enable --now spice-vdagentdyum install qemu-guest-agent spice-vdagent virtio-drivers acpid rng-tools
systemctl enable --now qemu-guest-agent
systemctl enable --now spice-vdagentdpacman -S qemu-guest-agent spice-vdagent virtio-dkms acpid rng-tools
systemctl enable --now qemu-guest-agent
systemctl enable --now spice-vdagentd1. 下载 VirtIO 驱动 ISO
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
2. 安装驱动:
- Balloon → vioserial → viostor → NetKVM → QEMU Guest Agent
3. PVE/ESXi:在虚拟机选项中启用 QEMU Guest Agentvirtio 驱动 — 半虚拟化驱动,性能远超模拟设备:
# 确认 virtio 磁盘在用
lsblk -o NAME,ROTA,TYPE | grep virtio
# 确认 virtio 网卡
ethtool -i eth0 | grep driver
# driver: virtio_net| 模拟设备 | virtio 设备 | 性能差距 |
|---|---|---|
| IDE / SATA | virtio-blk / virtio-scsi | 3~5 倍 |
| e1000 / rtl8139 | virtio-net | 2~3 倍 |
| VGA | virtio-gpu | 显著 |
QEMU Guest Agent (qga) — 宿主通过 virtio-serial 通道与虚拟机通信:
# 宿主侧查询虚拟机 IP
virsh domifaddr vm1
# 或
qm agent network-get-interfaces # PVE
# 宿主侧正常关机
virsh shutdown vm1 # 需要 qga,否则只能强制断电PVE 中创建虚拟机时勾选 "QEMU Guest Agent",否则关机按钮等于断电。
SPICE vdagent — SPICE 协议的增强代理:
acpid — 让虚拟机响应 ACPI 电源按钮:
# 没有 acpid 时,宿主发 shutdown 信号虚拟机无反应
# 有 acpid 后,虚拟机正常关机
systemctl enable --now acpidPVE 创建虚拟机时建议在"选项"中启用:
Windows 虚拟机额外步骤:
虚拟机的网络连接方式决定了虚拟机能否被外部访问、能否和宿主互通、能否上网。
| NAT | 桥接(Bridged) | Host-Only | Mirror / 镜像 | |
|---|---|---|---|---|
| 虚拟机能否上网 | ✓(通过宿主 NAT) | ✓(直接用物理网络) | ✗(和宿主互通,不能上网) | ✓ |
| 宿主能否访问虚拟机 | ✗(默认不可) | ✓(同一网段直连) | ✓(虚拟内网互通) | ✓ |
| 外部能否访问虚拟机 | ✗ | ✓(和物理机平等) | ✗ | 看配置 |
| 虚拟机 IP | 虚拟内网 IP(VMnet8 / vboxnet0) | 物理网络真实 IP | 虚拟内网 IP(VMnet1 / vboxnet1) | 和宿主同 IP 或自定义 |
| IP 是否会变 | 不会(虚拟内网固定网段) | 可能变(DHCP 分配) | 不会 | 不会 |
| 典型场景 | 日常开发(只需上网) | 需要被外部访问(服务部署) | 宿主和虚拟机互通,不需要上网 | macOS 虚拟机与宿主共享网络 |
| 需求 | 推荐 |
|---|---|
| 虚拟机只要能上网 | NAT |
| 虚拟机要被局域网其他设备访问 | 桥接 |
| 虚拟机要和宿主互通但不需要上网 | Host-Only |
| 宿主 + 虚拟机互通 + 都能上网 | NAT + Host-Only 双网卡 |
| macOS 虚拟机最简配置 | Mirror |
| 调试现场设备(需要真实网络身份) | 桥接 |
虚拟机通过宿主 NAT 上网,对外显示宿主的 IP,外部无法主动访问虚拟机。最常用的默认模式。
特点:
虚拟机设置 → 网络适配器 → NAT 模式
虚拟网络:VMnet8(NAT)
默认网段:192.168.xxx.0/24设置 → 网络 → 网卡 1 → 连接方式:网络地址转换(NAT)默认交换机(Default Switch) = NAT 模式
虚拟机 → 设置 → 网络适配器 → 默认交换机# 默认就是 NAT(user 模式)
qemu-system-x86_64 -m 2G -hda disk.qcow2
# 虚拟机自动 NAT 上网,宿主不能直接访问默认网络就是 NAT(通过 vmbr0)
虚拟机 → 硬件 → 网络设备 → 桥接 vmbr0
注意:PVE 默认是桥接,不是 NAT虚拟机直接连接物理网络,获得和宿主同网段的真实 IP,外部设备可以直接访问。
特点:
虚拟机设置 → 网络适配器 → 桥接模式
虚拟网络:VMnet0(桥接)
可选自动桥接或指定物理网卡设置 → 网络 → 网卡 1 → 连接方式:桥接网卡
选择要桥接的物理网卡名称新建外部虚拟交换机:
虚拟交换机管理器 → 新建虚拟交换机 → 外部 → 选择物理网卡
虚拟机 → 设置 → 网络适配器 → 选择外部交换机# 需要创建桥接网卡(宿主端)
ip link add name br0 type bridge
ip link set br0 up
ip link set eth0 master br0 # 把物理网卡加入桥
# QEMU 使用桥接
qemu-system-x86_64 -m 2G \
-netdev bridge,id=net0,br=br0 \
-device virtio-net-pci,netdev=net0 \
-hda disk.qcow2默认就是桥接模式(vmbr0 桥接物理网卡)
虚拟机 → 硬件 → 网络设备 → 桥接 vmbr0
如需多网卡:创建多个桥接(vmbr1, vmbr2 ...)WiFi 网卡做桥接有限制:
iw 设置 4addr,否则不能用 bridge# KVM WiFi 桥接(需要无线驱动支持 4addr)
iw dev wlan0 set 4addr on
ip link set wlan0 master br0如果 WiFi 桥接不行,改用 NAT + 端口转发,或用 Host-Only。
虚拟机和宿主组成一个隔离的虚拟内网,不能上网,但宿主和虚拟机可以互相访问。
特点:
虚拟机设置 → 网络适配器 → 仅主机模式
虚拟网络:VMnet1(Host-Only)
默认网段:192.168.xxx.0/24设置 → 网络 → 网卡 1 → 连接方式:仅主机(Host-Only)适配器
选择 VirtualBox Host-Only Ethernet Adapter新建内部虚拟交换机:
虚拟交换机管理器 → 新建虚拟交换机 → 内部
虚拟机 → 设置 → 网络适配器 → 选择内部交换机# 创建 host-only 网络(libvirt)
virsh net-define /dev/stdin <<EOF
<network>
<name>hostonly</name>
<forward mode='none'/>
<ip address='192.168.57.1' netmask='255.255.255.0'>
<dhcp><range start='192.168.57.100' end='192.168.57.200'/></dhcp>
</ip>
</network>
EOF
virsh net-start hostonly
virsh net-autostart hostonly
# 虚拟机使用该网络PVE 无内置 Host-Only,可手动创建隔离网桥:
创建 vmbr1(不桥接任何物理网卡)→
分配 IP 给 vmbr1 →
虚拟机桥接 vmbr1最常用的组合:一块网卡 NAT 上网,一块网卡 Host-Only 让宿主访问。
VMware:
VirtualBox:
# 虚拟机内确认双网卡
ip addr
# eth0: NAT(如 192.168.111.128)
# eth1: Host-Only(如 192.168.56.101)
# 宿主通过 Host-Only IP 访问
ssh user@192.168.56.101macOS 虚拟化框架(Apple Virtualization)和部分新方案支持的网络模式,虚拟机和宿主共享网络栈,IP 相同或自动共享。
特点:
虚拟机 → 设置 → 网络 → 网络模式:共享(Shared)
等效于 Mirror,自动和宿主共享网络默认就是 Mirror 模式
容器和 Linux VM 自动和宿主共享网络
localhost 端口互通NetworkAddress = "shared"
// 虚拟机共享宿主网络栈
// Docker Desktop / OrbStack 底层用的就是这个注意:Mirror 模式下虚拟机没有独立 IP,无法从外部单独访问。如需独立 IP,改用桥接。
虚拟机启动需要固件(Firmware),类似物理机的 BIOS/UEFI。
| Legacy BIOS | UEFI | |
|---|---|---|
| 全称 | Basic Input/Output System | Unified Extensible Firmware Interface |
| 启动方式 | INT 13 中断读 MBR | EFI 分区读引导程序 |
| 磁盘限制 | ≤ 2 TB | 无限制 |
| 启动界面 | 文字菜单 | 图形菜单 + 鼠标 |
| 安全启动 | ✗ | Secure Boot |
| 常见场景 | 旧系统 / 兼容模式 | 现代 OS 默认 |
选择建议:
设置 → 选项 → 高级 → 固件类型
- UEFI:默认(新建向导选 UEFI)
- BIOS:选"传统 BIOS"设置 → 系统 → 主板 → 扩展固件
- UEFI:勾选"启用 EFI"
- BIOS:默认(不勾选)创建虚拟机 → 安装选项 → 固件
- BIOS:默认(Generation 1)
- UEFI:选 Generation 2
注意:Gen 1 和 Gen 2 创建后不可互转# UEFI 需要安装 OVMF 固件
apt install ovmf
# BIOS 模式(默认)
qemu-system-x86_64 -m 2G -hda disk.qcow2
# UEFI 模式
qemu-system-x86_64 -m 2G \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd \
-hda disk.qcow2创建虚拟机 → "OS 类型" 选项卡
- BIOS:SeaBIOS(默认,Legacy BIOS)
- UEFI:OVMF(需勾选"QEMU/Machine"为 q35)
- 注意:UEFI 虚拟机需要 EFI 磁盘(PVE 自动创建)创建虚拟机 → 虚拟机选项 → 引导选项 → 固件
- BIOS:默认
- UEFI:手动选择 EFISecure Boot 是 UEFI 的安全功能,只允许签名过的引导程序启动。调试环境通常需要关闭。
-global driver=cfi.pflash,secure=on设备直通(Passthrough)让虚拟机直接访问物理硬件,性能接近裸机。常见场景:GPU 渲染、USB 串口调试、PCIe 采集卡、加密狗。
| 类型 | 说明 | 性能 |
|---|---|---|
| USB 直通 | 最简单,大多数方案支持 | 略有延迟 |
| PCIe 直通 | 整卡直通,需要 IOMMU | 接近裸机 |
| GPU 直通 | PCIe 直通的特殊情况,需额外配置 | 接近裸机 |
| 串口直通 | 透传宿主机 /dev/ttyUSBx | 等效直连 |
USB 直通:✓(菜单 → VM → Removable Devices)
PCIe 直通:✗(Workstation 不支持)
GPU 直通:✗
串口直通:✓(添加串口设备 → 使用主机端口)USB 直通:✓(需安装 Extension Pack)
PCIe 直通:✗
GPU 直通:✗
串口直通:✓(设置 → 串口 → 启用)USB 直通:✗(需用 Enhanced Session 或 usbipd-win)
PCIe 直通:✓(DDA,需 PowerShell 配置)
GPU 直通:✓(RemoteFX / DDA)
串口直通:✓(命名管道)
启用 DDA 直通:
1. 获取设备 Location Path:Get-PnpDevice | Where-Object {$_.Status -eq "OK"}
2. 解挂设备并分配给 VMUSB 直通:✓(-usb -device usb-host,hostbus=x,hostaddr=y)
PCIe 直通:✓(需要 IOMMU + vfio-pci)
GPU 直通:✓(NVIDIA/AMD 均可)
串口直通:✓(-serial /dev/ttyUSB0)
启用 IOMMU:
1. 宿主内核参数加 intel_iommu=on 或 amd_iommu=on
2. 绑定设备到 vfio-pci 驱动
3. QEMU 启动参数加 -device vfio-pci,host=xx:xx.xUSB 直通:✓(Web 界面 → 硬件 → 添加 → USB 设备)
PCIe 直通:✓(Web 界面 → 硬件 → 添加 → PCI 设备)
GPU 直通:✓(Web 界面操作,支持 NVIDIA/AMD)
串口直通:✓(编辑配置文件添加串口)
前提:宿主内核开启 IOMMU
1. GRUB 加参数:intel_iommu=on iommu=pt
2. update-grub && reboot
3. 检查:dmesg | grep -e DMAR -e IOMMUUSB 直通:✓(vSphere Client → 添加 USB 设备)
PCIe 直通:✓(需在主机配置 → 硬件 → PCI 设备中标记直通)
GPU 直通:✓(标记直通后需重启)
串口直通:✓(添加串口设备)
前提:标记直通设备后必须重启主机1. 宿主开启 IOMMU
# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# AMD CPU 用 amd_iommu=on
update-grub # Debian/Ubuntu
grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS
reboot2. 验证 IOMMU
dmesg | grep -e DMAR -e IOMMU | head
# 应看到 DMAR: Host address width 或 Adding IOMMU device
# 检查 IOMMU 分组
ls /sys/kernel/iommu_groups/3. 绑定设备到 vfio-pci
# 查看设备地址
lspci -nn | grep -i nvidia # 示例:01:00.0
# 查看设备 vendor:device ID
lspci -n -s 01:00.0
# 示例:10de:1b06
# 绑定 vfio-pci
echo "options vfio-pci ids=10de:1b06" > /etc/modprobe.d/vfio.conf
echo "vfio-pci" >> /etc/initramfs-tools/modules # Debian/Ubuntu
update-initramfs -u
reboot4. QEMU 直通启动
qemu-system-x86_64 \
-m 4G \
-enable-kvm \
-device vfio-pci,host=01:00.0 \
-hda disk.qcow24a. PVE 直通
在 PVE Web 界面:虚拟机 → 硬件 → 添加 → PCI 设备 → 选择设备 → 勾选"所有功能"和"ROM-Bar"→ 添加。
NVIDIA 卡报 Code 43 错误:NVIDIA 驱动检测到虚拟机后拒绝工作。
解决:对 QEMU 隐藏虚拟机标识:
# QEMU 参数
-cpu host,kvm=off \
-smbios type=1,manufacturer="LENOVO",product="ThinkPad"PVE:虚拟机 → 硬件 → CPU → 勾选"隐藏 KVM 状态"。
多 GPU 环境:宿主机用一个 GPU 显示,另一个直通给虚拟机。需要确保宿主 GPU 不被 vfio-pci 抢走。
无头(headless)GPU 直通:不需要显示器接在直通 GPU 上,用 Looking Glass 或 Moonlight 远程看画面。
# 安装 ARM 交叉编译和 QEMU
apt install qemu-system-arm gcc-arm-linux-gnueabihf
# 模拟 ARM vexpress(常用嵌入式开发板)
qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-kernel zImage \
-dtb vexpress-v2p-ca9.dtb \
-drive file=rootfs.ext4,if=sd \
-append "console=ttyAMA0 root=/dev/mmcblk0" \
-nographic
# 模拟 ARM64 / AArch64
qemu-system-aarch64 \
-M virt \
-m 1G \
-cpu cortex-a57 \
-kernel Image \
-drive file=rootfs.ext4,if=virtio \
-append "console=ttyAMA0 root=/dev/vda" \
-nographic将宿主机 USB 串口设备直接透传给虚拟机,在虚拟机内用 minicom/picocom 调试。
# 宿主机确认串口设备
ls /dev/ttyUSB*
# QEMU 串口直通
qemu-system-x86_64 \
-m 2G \
-serial /dev/ttyUSB0 \
-hda disk.qcow2
# VMware:添加串口 → 使用主机端口 → /dev/ttyUSB0
# PVE:编辑配置加 serial0: /dev/ttyUSB0调试时频繁修改环境,快照可以随时回退到已知状态。
| 方案 | 快照操作 |
|---|---|
| VMware | 菜单 → VM → Snapshot → Take Snapshot |
| VirtualBox | 菜单 → 机器 → 拍摄快照 |
| Hyper-V | Checkpoint-VM -Name "test" -SnapshotName "snap1" |
| KVM / QEMU | virsh snapshot-create-as vm1 snap1 |
| PVE | Web 界面 → 虚拟机 → 快照 → 拍摄 |
| ESXi | vSphere Client → 快照 → 生成快照 |
| Docker | docker commit / docker save |
| Podman | podman commit / podman save |