使用QEMU/KVM创建虚拟机完整指南
概述
QEMU/KVM是Linux系统中的主流虚拟化解决方案,提供高性能的硬件虚拟化能力。本文档详细介绍使用QEMU和KVM创建和管理虚拟机的完整流程,包括磁盘创建、虚拟机安装和配置优化。
核心原理
KVM(基于内核的虚拟机)是Linux内核的虚拟化基础设施,QEMU提供硬件模拟和设备模拟。二者结合可以实现接近物理机的性能:
- KVM:提供CPU和内存虚拟化
- QEMU:模拟各种硬件设备
- Libvirt:提供虚拟机管理API和工具
前提条件
1. 硬件要求
- 支持虚拟化技术的CPU(Intel VT-x或AMD-V)
- 足够的内存和存储空间
- 支持虚拟化的BIOS设置(需在BIOS中启用VT-x/AMD-V)
2. 软件要求
bash
# 检查CPU是否支持虚拟化
egrep -c '(vmx|svm)' /proc/cpuinfo
# 检查KVM内核模块是否加载
lsmod | grep kvm
# CentOS/RHEL安装KVM相关软件
yum install qemu-kvm libvirt virt-install bridge-utils -y
# Ubuntu/Debian安装KVM相关软件
apt install qemu-kvm libvirt-daemon-system virtinst bridge-utils -y3. 服务启动
bash
# 启动libvirt服务
systemctl start libvirtd
systemctl enable libvirtd
# 检查libvirt服务状态
systemctl status libvirtd
# 将用户添加到libvirt组(可选)
usermod -a -G libvirt $(whoami)磁盘管理
1. 创建磁盘镜像
bash
# 创建30GB的qcow2格式磁盘
qemu-img create -f qcow2 /kvm_dir/kylin-vm-verify4.qcow2 30G
# 查看磁盘信息
qemu-img info /kvm_dir/kylin-vm-verify4.qcow22. 磁盘格式说明
| 格式 | 说明 | 特点 |
|---|---|---|
raw | 原始格式 | 性能最好,但功能有限 |
qcow2 | QEMU镜像格式 | 支持快照、压缩和加密 |
vmdk | VMware格式 | 与VMware兼容 |
vhd | Hyper-V格式 | 与Hyper-V兼容 |
3. 调整磁盘大小
bash
# 扩展磁盘到50GB
qemu-img resize /kvm_dir/kylin-vm-verify4.qcow2 +20G
# 磁盘格式转换
qemu-img convert -f raw -O qcow2 source.img target.qcow2网络配置
1. 桥接网络设置
bash
# 创建桥接网卡
brctl addbr br0
brctl addif br0 eth0
# 为桥接网卡分配IP
dhclient br0
# 或者静态配置
ifconfig br0 192.168.1.100 netmask 255.255.255.0 up2. NAT网络设置
bash
# 创建NAT网络(默认已存在)
virsh net-list --all
# 启动默认网络
virsh net-start default
virsh net-autostart default虚拟机创建
1. 使用virt-install创建虚拟机
bash
# 创建虚拟机并启动安装
virt-install \
--name kylin-vm-verify4 \
--memory 4096 \
--vcpus 4 \
--os-type=linux \
--os-variant=kylin10 \
--disk path=/kvm_dir/kylin-vm-verify4.qcow2,format=qcow2,bus=virtio \
--cdrom /root/Kylin-Server-V10_U1-Release-Build02-20210729-GFB-arm64.iso \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0,port=5906,password=shxy@000 \
--boot uefi \
--noautoconsole2. 参数详解
| 参数 | 说明 | 示例值 |
|---|---|---|
--name | 虚拟机名称 | kylin-vm-verify4 |
--memory | 内存大小(MB) | 4096 |
--vcpus | CPU核心数 | 4 |
--os-type | 操作系统类型 | linux |
--os-variant | 操作系统变体 | kylin10 |
--disk | 磁盘配置 | path=/kvm_dir/xxx.qcow2,format=qcow2,bus=virtio |
--cdrom | 安装介质路径 | /root/xxx.iso |
--network | 网络配置 | bridge=br0,model=virtio |
--graphics | 图形配置 | vnc,listen=0.0.0.0,port=5906,password=xxx |
--boot | 启动方式 | uefi |
3. 从现有磁盘启动虚拟机
bash
# 从已有磁盘启动虚拟机
virt-install \
--name kylin-vm-verify4 \
--memory 4096 \
--vcpus 4 \
--import \
--disk path=/kvm_dir/kylin-vm-verify4.qcow2,format=qcow2,bus=virtio \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0,port=5906,password=shxy@000虚拟机管理
1. 使用virsh管理虚拟机
bash
# 列出所有虚拟机
virsh list --all
# 启动虚拟机
virsh start kylin-vm-verify4
# 关闭虚拟机
virsh shutdown kylin-vm-verify4
# 强制关闭虚拟机
virsh destroy kylin-vm-verify4
# 暂停虚拟机
virsh suspend kylin-vm-verify4
# 恢复虚拟机
virsh resume kylin-vm-verify4
# 删除虚拟机
virsh undefine kylin-vm-verify42. 虚拟机配置修改
bash
# 编辑虚拟机配置
virsh edit kylin-vm-verify4
# 修改内存大小
virsh setmaxmem kylin-vm-verify4 8G
virsh setmem kylin-vm-verify4 6G
# 添加磁盘
virsh attach-disk kylin-vm-verify4 /kvm_dir/additional_disk.qcow2 vdb --live
# 添加网络接口
virsh attach-interface kylin-vm-verify4 bridge br0 --model virtio --live3. 虚拟机快照管理
bash
# 创建快照
virsh snapshot-create-as kylin-vm-verify4 --name "snap1" --description "First snapshot"
# 列出快照
virsh snapshot-list kylin-vm-verify4
# 恢复快照
virsh snapshot-revert kylin-vm-verify4 --snapshotname "snap1"
# 删除快照
virsh snapshot-delete kylin-vm-verify4 --snapshotname "snap1"性能优化
1. CPU优化
xml
<!-- 在虚拟机XML配置中优化CPU -->
<cpu mode='host-passthrough' check='partial'>
<feature policy='require' name='vmx'/>
</cpu>
<!-- 设置CPU拓扑 -->
<cpu>
<topology sockets='2' cores='2' threads='1'/>
</cpu>2. 内存优化
xml
<!-- 启用大页内存 -->
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<memoryBacking>
<hugepages>
<page size='2048' unit='KiB'/>
</hugepages>
</memoryBacking>3. 磁盘I/O优化
xml
<!-- 使用virtio磁盘控制器 -->
<controller type='virtio-serial' index='0' ports='16'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</controller>
<!-- 磁盘缓存策略 -->
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none' io='native'/>
<source file='/kvm_dir/kylin-vm-verify4.qcow2'/>
</disk>4. 网络优化
xml
<!-- 使用virtio网络设备 -->
<interface type='bridge'>
<mac address='52:54:00:71:b1:b6'/>
<source bridge='br0'/>
<model type='virtio'/>
<driver name='vhost'/>
<tune>
<sndbuf size='256'/>
<rcvbuf size='256'/>
</tune>
</interface>高级功能
1. 虚拟机克隆
bash
# 克隆虚拟机
virt-clone --original kylin-vm-verify4 --name kylin-vm-clone --file /kvm_dir/kylin-vm-clone.qcow2
# 克隆磁盘
virt-clone --original-xml /etc/libvirt/qemu/kylin-vm-verify4.xml --auto-clone2. 虚拟机迁移
bash
# 准备迁移(源主机)
virsh migrate --live --p2p --tunnelled --unsafe kylin-vm-verify4 qemu+tcp://目标主机IP/system
# 接收迁移(目标主机)
virsh migrate --incoming qemu+tcp://本地IP/system3. 虚拟机自动启动
bash
# 设置虚拟机自动启动
virsh autostart kylin-vm-verify4
# 查看自动启动设置
virsh list --autostart故障排查
1. 常见错误及解决
错误1:虚拟机启动失败
bash
# 检查虚拟机日志
journalctl -u libvirtd -f
# 检查虚拟机详情
virsh dominfo kylin-vm-verify4
# 检查XML配置
virsh dumpxml kylin-vm-verify4错误2:网络连接问题
bash
# 检查桥接网络状态
brctl show
# 检查虚拟网络接口
virsh domiflist kylin-vm-verify4错误3:性能问题
bash
# 查看虚拟机资源使用
virsh domstats --cpu --block
top -p $(virsh list | awk '/running/ {print $2}')2. 日志分析
bash
# libvirt守护进程日志
journalctl -u libvirtd -b
# QEMU进程日志
virsh domxml-from-native kylin-vm-verify4 qemu-argv | grep '\-d\|\-D'
# 查看KVM内核消息
dmesg | grep -i kvm注意事项
⚠️ 安全提醒:
- 限制虚拟机访问宿主机敏感资源
- 定期更新虚拟化软件
- 使用SELinux/AppArmor增强虚拟化安全
⚠️ 性能提示:
- 为虚拟机分配适当的资源,避免过度分配
- 使用virtio设备驱动提高性能
- 在SSD上存储虚拟机磁盘
⚠️ 维护建议:
- 定期备份虚拟机磁盘和配置
- 监控宿主机资源使用情况
- 使用集中管理工具管理大量虚拟机
总结
QEMU/KVM提供了强大的虚拟化解决方案,通过合理配置可以实现接近物理机的性能。创建虚拟机需要注意磁盘格式、网络配置和资源分配。通过virt-install、virsh等工具可以方便地管理虚拟机生命周期,结合性能优化和监控可以构建稳定高效的虚拟化环境。