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

相关推荐
Peace2 小时前
【Prometheus】
linux·运维·prometheus
LZZ and MYY4 小时前
RTS 在windows和Linux之间ShareMem
linux·运维·服务器
aningx4 小时前
openSUSE Leap 16.0 运行 sunshine 报错的解决方法
linux
爱学习的徐徐4 小时前
Linux 基础IO
linux·服务器
幽络源小助理4 小时前
Vue3视频播放网站源码 纯前端Vite项目 影视站模板 – 幽络源源码
开源·源码
xiaobobo33304 小时前
面向对象:linux内核中函数转数据的用法
linux·面向对象·隔离·函数指针绑定
姓刘的哦4 小时前
C++软件架构设计思路
linux
ModestCoder_4 小时前
windows/ubuntu解决挂梯子但是codex reconnecting五次的问题
linux·windows·ubuntu
禹凕4 小时前
Linux基础——环境
linux·运维·服务器·ubuntu
好好风格4 小时前
【一行代码】查看本机公网 IP
linux·命令行