适用于: openEuler 22.03 SP4 ARM64(aarch64)架构服务器
安装流程总览
环境检查 → 安装软件包 → 配置网络 → 启动服务 → 验证环境 → 创建虚拟机
一、环境检查
1.1 系统信息确认
查看系统架构(必须是aarch64)
uname -m
查看系统版本
cat /etc/openEuler-release
查看CPU信息
lscpu | grep -E "Architecture|CPU\(s\)|Model name"

1.2 虚拟化支持检查
检查虚拟化扩展
lscpu | grep Virtualization
检查KVM设备
ls -l /dev/kvm
如果/dev/kvm不存在,加载KVM模块
modprobe kvm
lsmod | grep kvm

1.3 查看网卡信息
查看所有网络接口
ip link show
查看网卡详细信息
nmcli device status
记录物理网卡名称(后面配置Bond需要,下图是我已经做过聚合的网卡,可忽略,不影响后续配置,只记住物理网卡名就行)
示例: enp125s0f0, enp125s0f1

二、软件包安装(一键完成)
2.1 核心虚拟化组件安装
更新系统
dnf update -y
安装虚拟化组
dnf groupinstall "Virtualization Host" -y
安装核心组件
dnf install -y \
qemu-kvm \
qemu-img \
qemu-system-aarch64 \
libvirt \
libvirt-client \
libvirt-daemon \
libvirt-daemon-driver-qemu \
virt-install \
virt-manager \
virt-viewer \
libguestfs-tools
安装ARM64 UEFI固件
dnf install -y edk2-aarch64
安装网络工具
dnf install -y \
bridge-utils \
NetworkManager \
net-tools
安装Web管理界面
dnf install -y \
cockpit \
cockpit-machines \
cockpit-storaged \
cockpit-networkmanager
安装VNC服务器
dnf install -y tigervnc-server
安装监控工具
dnf install -y htop iotop sysstat bash-completion
启动libvirtd
systemctl enable --now libvirtd
systemctl status libvirtd
三、网络配置(Bond+Bridge高可用)
3.1 配置说明
架构: 物理网卡(enp125s0f0 + enp125s0f1) → Bond0(主备) → Bridge(br0) → 虚拟机
优势: 网卡冗余 + 虚拟机直连物理网络
3.2 清理旧配置(如有)
查看现有连接
nmcli connection show
停止并删除旧的连接(根据实际情况调整)
for uuid in (nmcli -t -f UUID,DEVICE connection show \| grep ':-\*' | cut -d: -f1); do
echo "Deleting $uuid"
nmcli connection delete $uuid
done
3. 3 创建 Bond 聚合
假设你使用 模式 802.3ad (LACP) 或 mode=balance-rr (轮询),可以根据交换机支持选择。
创建 bond0
nmcli connection add type bond ifname bond0 con-name bond0 mode 802.3ad
添加物理网口到 bond0
nmcli connection add type bond-slave ifname enp125s0f0 master bond0
nmcli connection add type bond-slave ifname enp125s0f1 master bond0
设置 bond0 IP (静态为例)
nmcli connection modify bond0 ipv4.addresses 192.168.10.3/24
nmcli connection modify bond0 ipv4.gateway 192.168.10.1
nmcli connection modify bond0 ipv4.dns "8.8.8.8 114.114.114.114"
nmcli connection modify bond0 ipv4.method manual
nmcli connection modify bond0 ipv6.method ignore
启动 bond
nmcli connection up bond0
如果交换机不支持 LACP,可以使用 mode=balance-rr 或 mode=active-backup。
3. 4 在 Bond 上创建桥接 br0
创建桥接 br0,绑定到 bond0
nmcli connection add type bridge ifname br0 con-name br0
nmcli connection modify br0 bridge.stp no # 禁用生成树,可选
nmcli connection modify br0 ipv4.addresses 192.168.10.3/24
nmcli connection modify br0 ipv4.gateway 192.168.10.1
nmcli connection modify br0 ipv4.method manual
nmcli connection modify br0 ipv6.method ignore
将 bond0 作为桥接接口
nmcli connection add type bridge-slave ifname bond0 master br0
启动桥接
nmcli connection up br0

3. 5 验证网络状态
查看 bond 状态cat /proc/net/bonding/bond0
查看桥接状态
bridge link
ip addr show br0
测试网络,ping网关
ping -c 3 192.168.10.1

四、服务启动和配置
4.1 启动核心服务
启动libvirt服务
systemctl start libvirtd
systemctl enable libvirtd
启动日志服务
systemctl start virtlogd
systemctl enable virtlogd
检查服务状态
systemctl status libvirtd --no-pager
4.2 配置存储池(使用/home目录)
创建存储目录结构
mkdir -p /home/kvm/images # 虚拟机磁盘存储
mkdir -p /home/kvm/iso # ISO镜像存储
mkdir -p /home/kvm/nvram # UEFI NVRAM存储
mkdir -p /home/kvm/backup # 备份目录
设置权限
chmod 755 /home/kvm
chmod 755 /home/kvm/images
chmod 755 /home/kvm/iso
chmod 755 /home/kvm/nvram
chmod 755 /home/kvm/backup
设置SELinux上下文(如果启用了SELinux)
setenforce 0 2>/dev/null || true
chcon -R -t virt_image_t /home/kvm 2>/dev/null || true
停止并删除旧的default存储池(如果存在)
virsh pool-destroy default 2>/dev/null || true
virsh pool-undefine default 2>/dev/null || true
定义新的default存储池(指向/home/kvm/images)
virsh pool-define-as default dir --target /home/kvm/images
启动存储池
virsh pool-start default
设置开机自启
virsh pool-autostart default
创建ISO存储池(可选)
virsh pool-define-as iso dir --target /home/kvm/iso
virsh pool-start iso
virsh pool-autostart iso
virsh pool-list --all
virsh pool-info default
ls -lh /home/kvm/
4.3 启动Cockpit Web界面
启动Cockpit
systemctl start cockpit.socket
systemctl enable cockpit.socket
检查状态
systemctl status cockpit.socket --no-pager
显示访问地址
echo "Cockpit访问: https://$(hostname -I | awk '{print $1}'):9090"

4.4 配置VNC服务器(可选)
设置VNC密码
vncpasswd
创建启动配置
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
启动 GNOME 桌面环境
exec gnome-session &
EOF
设置权限
chmod +x ~/.vnc/xstartup
启动VNC服务器
vncserver :1
查看VNC进程
vncserver -list
五、防火墙配置
添加libvirt服务
firewall-cmd --permanent --add-service=libvirt
添加Cockpit
firewall-cmd --permanent --add-service=cockpit
添加VNC端口
firewall-cmd --permanent --add-port=5900-5910/tcp
firewall-cmd --permanent --add-port=5901/tcp
添加虚拟机VNC端口范围
firewall-cmd --permanent --add-port=5920-5950/tcp
重载防火墙
firewall-cmd --reload
验证配置
firewall-cmd --list-all
六 、创建第一个虚拟机
7.1 下载ARM64镜像
进入ISO存储目录
cd /home/kvm/iso
下载openEuler ARM64镜像(约4GB)
wget https://mirrors.openanolis.cn/anolis/23.3/isos/GA/aarch64/AnolisOS-23.3-aarch64-dvd.iso
查看下载的镜像
ls -lh /home/kvm/iso/
7.2 准备UEFI固件
NVRAM目录已在存储池配置时创建
/home/kvm/nvram
验证UEFI固件文件存在
ls -lh /usr/share/edk2/aarch64/
复制UEFI固件到NVRAM目录(可选,首次创建虚拟机时会自动生成)
确保 nvram 目录存在
mkdir -p /home/kvm/nvram && \
复制 UEFI 固件文件
cp /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw /home/kvm/nvram/QEMU_EFI.fd && \
检查是否成功
-f /home/kvm/nvram/QEMU_EFI.fd && echo "✓ UEFI固件准备完成" || echo "⚠ 复制固件失败,请检查权限或磁盘空间"
7.3 创建虚拟机(推荐方式)
确保 nvram 目录存在
mkdir -p /home/kvm/nvram
提前创建虚拟机磁盘,这里我使用了两块盘符,一块作为数据盘,一块作为系统盘
qemu-img create -f qcow2 /home/kvm/images/vm01_system.qcow2 500G
qemu-img create -f qcow2 /home/kvm/images/vm01_data.qcow2 10T
生成独立 VARS 文件(对应后续创建的虚拟机,建议前缀相同方便区分)
cp /usr/share/edk2/aarch64/vars-template-pflash.raw /home/kvm/nvram/vm01_VARS.fd
使用桥接网络 + UEFI启动 + /home存储
重点来了,我试了几次都未能成功启动openEuler-22.03-LTS-SP4的系统,无奈暂时放弃安装欧拉,同志可以试试其他欧拉版本
virt-install \
--connect qemu:///system \
--virt-type kvm \
--name vm01 \
--arch aarch64 \
--vcpus 4 \
--memory 4096 \
--os-variant centos8 \
--cdrom /home/kvm/iso/openEuler-22.03-LTS-SP4-aarch64-dvd.iso \
--disk path=/home/kvm/images/vm01_system.qcow2,size=500,format=qcow2,bus=virtio \
--disk path=/home/kvm/images/vm01_data.qcow2,size=10240,format=qcow2,bus=virtio \
--network bridge=br0,model=virtio \
--noautoconsole
已成功安装AnolisOS,照着抄即可,如果失败建议更换其他版本AnolisOS
virt-install \
--connect qemu:///system \
--virt-type kvm \
--name vm02 \
--arch aarch64 \
--vcpus 4 \
--memory 4096 \
--os-variant centos8 \
--cdrom /home/kvm/iso/AnolisOS-23.3-aarch64-dvd.iso \
--disk path=/home/kvm/images/vm02_system.qcow2,size=500,format=qcow2,bus=virtio \
--disk path=/home/kvm/images/vm02_data.qcow2,size=10240,format=qcow2,bus=virtio \
--network bridge=br0,model=virtio \
--noautoconsole

查看虚拟机状态
virsh list --all
1️⃣ 查看虚拟机状态
virsh list --all
2️⃣ 连接到安装控制台(文本模式)
virsh console vm01
按 Ctrl+] 退出控制台。
3️⃣ 查看磁盘信息
virsh domblklist vm02
4️⃣ 停止/启动虚拟机
virsh shutdown vm02
virsh start vm02
#如果你希望 通过 VNC 图形界面安装,可以指定端口,例如:不过需要你的电脑安装相关VNC 图形界面操作软件比如MobaXterm.exe等,网上搜很多哈
virt-viewer --connect qemu:///system vm02
八、虚拟机管理
8.1 常用命令
查看所有虚拟机
virsh list --all
启动虚拟机
virsh start vm01
关闭虚拟机
virsh shutdown vm01
强制关闭
virsh destroy vm01
重启
virsh reboot vm01
开机自启
virsh autostart vm01
查看虚拟机信息
virsh dominfo vm01
查看VNC端口
virsh vncdisplay vm01
查看虚拟机IP(需要虚拟机运行且安装guest agent)
virsh domifaddr vm01
编辑虚拟机配置
virsh edit vm01
8.2 连接虚拟机
方式1: VNC客户端
地址: 服务器IP:VNC端口
例如: 192.168.10.3:5902
方式2: 串口控制台
virsh console vm01
方式3: virt-viewer
virt-viewer vm01
方式4: Cockpit Web界面
https://192.168.10.3:9090
九、性能优化
9.1 CPU优化
编辑虚拟机
virsh edit vm01
修改CPU配置
<cpu mode='host-passthrough' check='none'>
<topology sockets='1' cores='4' threads='1'/>
</cpu>
9.2 磁盘IO优化
使用virtio-scsi控制器
--disk path=...,bus=virtio,cache=none,io=native
或在XML中配置
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none' io='native'/>
...
</disk>
9.3 网络优化
使用virtio网卡
--network bridge=br0,model=virtio
启用多队列(提升性能)
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
<driver name='vhost' queues='4'/>
</interface>
十、故障排查
10.1 常见问题
问题1: 虚拟机无法启动
查看详细错误
virsh start vm01
查看日志
tail -50 /var/log/libvirt/qemu/vm01.log
验证UEFI固件
ls -l /usr/share/edk2/aarch64/
问题2: 网络不通
检查网桥
ip addr show br0
bridge link show
检查libvirt网络
virsh net-list --all
virsh net-start br0
检查防火墙
firewall-cmd --list-all
问题3: VNC无法连接
查看VNC端口
virsh vncdisplay vm01
检查防火墙
firewall-cmd --list-ports
检查监听
netstat -tlnp | grep 590
十一、备份和快照
11.1 创建快照
创建快照
virsh snapshot-create-as vm01 snapshot1 "安装完成后的快照"
查看快照列表
virsh snapshot-list vm01
恢复快照
virsh snapshot-revert vm01 snapshot1
删除快照
virsh snapshot-delete vm01 snapshot1
11.2 备份虚拟机
备份单个虚拟机
backup_vm() {
local VM_NAME=$1
local BACKUP_DIR="/home/kvm/backup"
local BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
local VM_BACKUP_DIR="BACKUP_DIR/{VM_NAME}_${BACKUP_DATE}"
echo "备份虚拟机: $VM_NAME"
mkdir -p $VM_BACKUP_DIR
备份配置文件
virsh dumpxml VM_NAME \> VM_BACKUP_DIR/${VM_NAME}.xml
关闭虚拟机(如果运行中)
if virsh list --state-running | grep -q $VM_NAME; then
echo "关闭虚拟机..."
virsh shutdown $VM_NAME
sleep 10
fi
备份磁盘文件
echo "备份磁盘文件..."
cp /home/kvm/images/{VM_NAME}\*.qcow2 VM_BACKUP_DIR/
备份NVRAM文件
if -f /home/kvm/nvram/${VM_NAME}_VARS.fd ; then
cp /home/kvm/nvram/{VM_NAME}_VARS.fd VM_BACKUP_DIR/
fi
压缩备份
echo "压缩备份..."
cd $BACKUP_DIR
tar -czf {VM_NAME}_{BACKUP_DATE}.tar.gz {VM_NAME}_{BACKUP_DATE}
rm -rf {VM_NAME}_{BACKUP_DATE}
echo "✓ 备份完成: BACKUP_DIR/{VM_NAME}_${BACKUP_DATE}.tar.gz"
}
使用示例
backup_vm vm01
恢复虚拟机
restore_vm() {
local BACKUP_FILE=$1
local RESTORE_DIR="/tmp/restore_$"
echo "恢复虚拟机: $BACKUP_FILE"
mkdir -p $RESTORE_DIR
解压备份
tar -xzf BACKUP_FILE -C RESTORE_DIR
恢复磁盘文件
cp $RESTORE_DIR/*/*.qcow2 /home/kvm/images/
恢复NVRAM文件
cp $RESTORE_DIR/*/*.fd /home/kvm/nvram/ 2>/dev/null || true
恢复虚拟机定义
virsh define $RESTORE_DIR/*/*.xml
清理临时目录
rm -rf $RESTORE_DIR
echo "✓ 恢复完成"
}
使用示例
restore_vm /home/kvm/backup/vm01_20250114_120000.tar.gz
管理命令速查
|---------|-------------------------|
| 功能 | 命令 |
| 查看虚拟机 | virsh list --all |
| 启动虚拟机 | virsh start <vm> |
| 关闭虚拟机 | virsh shutdown <vm> |
| 强制关闭 | virsh destroy <vm> |
| 开机自启 | virsh autostart <vm> |
| 查看VNC端口 | virsh vncdisplay <vm> |
| 查看虚拟机信息 | virsh dominfo <vm> |
| 编辑配置 | virsh edit <vm> |
| 查看网络 | virsh net-list --all |
| 查看存储池 | virsh pool-list --all |
技术支持
openEuler官方文档: https://docs.openeuler.org/
KVM/QEMU文档: https://www.linux-kvm.org/
libvirt文档: https://libvirt.org/docs.html