1. 项目概述:Ubuntu20.04与QEMU的黄金组合
在开发者和系统管理员的工作流中,Ubuntu20.04 LTS(长期支持版)凭借其稳定性和完善的软件生态成为Linux发行版的首选。而QEMU作为开源的硬件虚拟化工具,能够模拟完整计算机系统,从x86到ARM架构无所不包。当这两者相遇,就构成了一个强大的虚拟化开发环境——无论是测试多机集群、调试内核代码,还是运行不同架构的软件,这套组合都能游刃有余。
我最早接触这个组合是在为嵌入式项目交叉编译时,需要在本地快速验证ARM架构的可执行文件。相比重量级的VMware或VirtualBox,QEMU轻量且支持更多架构,配合Ubuntu20.04的原生KVM加速,性能损失可以控制在5%以内。下面我就从实战角度,带你完成从系统安装到虚拟化环境部署的全过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与Ubuntu20.04安装
2.1 制作启动盘与基础安装
首先需要准备一个至少4GB的U盘(建议USB3.0以上)和Ubuntu20.04的ISO镜像。官方镜像可以从ubuntu.com下载,国内用户建议选择阿里云或清华大学的镜像站以提升下载速度。使用Rufus(Windows)或dd命令(Mac/Linux)制作启动盘时,务必选择"GPT分区+UEFI"模式,这是现代硬件的最佳兼容方案。
安装过程中的几个关键选择:
- 分区方案:新手建议选择"清除磁盘并安装Ubuntu",有经验的用户可以使用手动分区。我的工作站通常采用:EFI分区(512MB)、swap交换分区(内存的1.5倍)、/根分区(至少50GB)、/home分区(剩余空间)
- 时区设置:选择"Shanghai"会自动配置正确的时区信息
- 用户创建:建议勾选"自动登录"方便开发环境使用,但生产环境请保持密码保护
注意:如果安装后出现GRUB引导问题,可以尝试在BIOS中关闭Secure Boot选项。部分NVIDIA显卡机型需要添加
nomodeset内核参数才能正常安装。
2.2 初始系统配置
安装完成后,首先执行系统更新:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git curl wget
推荐安装的必备工具:
bash复制# 网络工具包
sudo apt install -y net-tools openssh-server
# 开发环境
sudo apt install -y python3-pip python3-venv
# 中文支持(可选)
sudo apt install -y language-pack-zh-hans fonts-noto-cjk
配置SSH服务实现远程访问:
bash复制sudo systemctl enable ssh
sudo ufw allow 22/tcp
3. QEMU虚拟化环境部署
3.1 QEMU核心组件安装
Ubuntu20.04官方源中的QEMU版本较旧(4.2版),建议通过PPA安装最新稳定版:
bash复制sudo add-apt-repository ppa:jacob/virtualisation
sudo apt update
sudo apt install -y qemu qemu-kvm qemu-system libvirt-daemon-system
验证安装是否成功:
bash复制qemu-system-x86_64 --version
# 应显示类似 QEMU emulator version 6.2.0 的输出
3.2 KVM加速配置
检查CPU是否支持虚拟化:
bash复制egrep -c '(vmx|svm)' /proc/cpuinfo
# 返回值大于0表示支持
将当前用户加入kvm和libvirt组:
bash复制sudo usermod -aG kvm $(whoami)
sudo usermod -aG libvirt $(whoami)
验证KVM是否正常工作:
bash复制sudo virt-host-validate
# 所有项目应显示为PASS状态
3.3 创建第一个QEMU虚拟机
以安装Ubuntu20.04客户机为例,首先下载ISO镜像到~/iso目录:
bash复制mkdir -p ~/iso && cd ~/iso
wget https://releases.ubuntu.com/20.04/ubuntu-20.04.6-desktop-amd64.iso
创建20GB的qcow2动态磁盘:
bash复制qemu-img create -f qcow2 ubuntu20.qcow2 20G
启动安装过程(带KVM加速):
bash复制qemu-system-x86_64 \
-enable-kvm \
-m 4096 \
-smp 4 \
-hda ubuntu20.qcow2 \
-cdrom ~/iso/ubuntu-20.04.6-desktop-amd64.iso \
-boot d \
-display gtk
参数说明:
-m 4096:分配4GB内存-smp 4:使用4个CPU核心-display gtk:使用GTK图形界面(可选vnc或none用于无头模式)
4. 高级配置与性能优化
4.1 网络配置方案
默认的用户模式网络(NAT)简单但性能有限,推荐以下两种方案:
- 桥接模式(需要主机网卡支持):
bash复制sudo apt install -y bridge-utils
sudo nano /etc/netplan/01-netcfg.yaml
添加桥接配置:
yaml复制network:
version: 2
renderer: networkd
bridges:
br0:
interfaces: [enp3s0]
dhcp4: yes
- TAP设备(更高性能):
bash复制sudo ip tuntap add dev tap0 mode tap
sudo ip link set tap0 up
sudo ip link set tap0 master br0
在QEMU启动命令中添加网络参数:
bash复制-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
-device virtio-net-pci,netdev=net0
4.2 存储性能优化
使用virtio-scsi控制器配合writeback缓存模式:
bash复制-drive file=ubuntu20.qcow2,if=none,id=disk0,cache=writeback \
-device scsi-hd,drive=disk0
对于IO密集型应用,建议采用裸设备映射:
bash复制qemu-img create -f raw ubuntu20.raw 20G
sudo chown $USER:$USER ubuntu20.raw
4.3 图形加速方案
SPICE协议提供更好的图形性能:
bash复制sudo apt install -y spice-vdagent
qemu-system-x86_64 \
-vga qxl \
-spice port=5900,addr=127.0.0.1,disable-ticketing=on \
-device virtio-serial-pci \
-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
-chardev spicevmc,id=spicechannel0,name=vdagent
远程连接使用:
bash复制remote-viewer spice://127.0.0.1:5900
5. 跨架构模拟实战
5.1 ARM64系统模拟
安装交叉编译工具链和依赖:
bash复制sudo apt install -y gcc-aarch64-linux-gnu qemu-system-arm
下载ARM64镜像:
bash复制wget https://cdimage.ubuntu.com/ubuntu/releases/20.04/release/ubuntu-20.04.6-preinstalled-server-arm64.img.xz
unxz ubuntu-20.04.6-preinstalled-server-arm64.img.xz
启动命令:
bash复制qemu-system-aarch64 \
-m 2048 \
-cpu cortex-a57 \
-M virt \
-nographic \
-pflash /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
-drive if=none,file=ubuntu-20.04.6-preinstalled-server-arm64.img,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=net0 \
-device virtio-net-device,netdev=net0
5.2 RISC-V环境搭建
添加RISC-V工具链:
bash复制sudo apt install -y gcc-riscv64-linux-gnu qemu-system-riscv
启动Fedora RISC-V镜像:
bash复制qemu-system-riscv64 \
-nographic \
-machine virt \
-m 2048 \
-kernel fw_jump.elf \
-device virtio-blk-device,drive=hd0 \
-drive file=fedora.raw,format=raw,id=hd0 \
-append "root=/dev/vda1 rw console=ttyS0"
6. 常见问题排查指南
6.1 性能问题排查
- KVM未启用症状:
bash复制dmesg | grep kvm
# 若无输出或显示禁用,需检查BIOS虚拟化设置
- 磁盘IO瓶颈检查:
bash复制sudo apt install -y iotop
sudo iotop -o
- CPU亲和性设置(针对多核主机):
bash复制taskset -pc 0-3 $(pgrep qemu-system)
6.2 网络连接问题
- 端口转发配置示例:
bash复制-netdev user,id=net0,hostfwd=tcp::2222-:22
- 防火墙规则检查:
bash复制sudo iptables -L -n -v
sudo ufw status verbose
6.3 图形显示异常
- 解决SDL显示问题:
bash复制-display sdl,gl=on
- 无头模式远程访问:
bash复制qemu-system-x86_64 \
-vnc :0 \
-daemonize
使用vncviewer连接localhost:5900
7. 自动化部署方案
7.1 使用libvirt管理虚拟机
安装virt-manager图形界面:
bash复制sudo apt install -y virt-manager
通过XML定义虚拟机:
xml复制<domain type='kvm'>
<name>ubuntu20</name>
<memory unit='GiB'>4</memory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/path/to/ubuntu20.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
</devices>
</domain>
定义并启动虚拟机:
bash复制virsh define ubuntu20.xml
virsh start ubuntu20
7.2 云镜像快速部署
下载Ubuntu云镜像:
bash复制wget https://cloud-images.ubuntu.com/releases/20.04/release/ubuntu-20.04-server-cloudimg-amd64.img
生成cloud-init配置:
bash复制cat > user-data << EOF
#cloud-config
password: ubuntu
chpasswd: { expire: False }
ssh_pwauth: True
EOF
cloud-localds seed.img user-data
启动命令:
bash复制qemu-system-x86_64 \
-drive file=ubuntu-20.04-server-cloudimg-amd64.img,if=virtio \
-drive file=seed.img,if=virtio \
-net user,hostfwd=tcp::2222-:22 \
-net nic
这套环境我已经在多台开发机和服务器上部署过,最久的一台稳定运行了600多天。对于需要频繁测试不同系统配置的开发者,建议将QEMU启动命令写成脚本,配合tmux或screen实现会话持久化。当需要测试网络服务时,可以使用我提供的TAP网络方案,实测网络吞吐能达到物理机的90%以上。
