openEuler 22.03 ARM64 KVM虚拟化安装
适用于: 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://repo.openeuler.openatom.cn/openEuler-22.03-LTS-SP4/ISO/aarch64/openEuler-22.03-LTS-SP4-aarch64-dvd.iso
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
