1. 项目缘起:为何要在统信UOS ARM上跑麒麟V10 ARM虚拟机?
最近在折腾国产化软硬件环境,手头有一台基于飞腾或鲲鹏处理器的ARM架构主机,预装了统信UOS桌面版。有个需求挺有意思:需要在UOS系统里,再安装一个银河麒麟V10 SP3的ARM版虚拟机。这听起来像是“套娃”,但在实际工作中,这种场景并不少见。比如,你手头只有一台UOS的机器,但需要测试一个专门为麒麟V10环境打包的软件;或者,你想在隔离的环境里学习、验证麒麟系统的某些特性,又不想影响宿主机的稳定。直接装双系统太麻烦,虚拟机就成了最灵活的选择。
然而,这条路走起来并不像在x86平台上用VMware装个Windows那么简单。ARM架构的虚拟化生态、可用的虚拟化软件、以及两个不同国产系统间的兼容性,都是需要仔细琢磨的坑。网上相关的完整教程比较零散,大多只讲了一半,或者默认你已经有了一套成熟的x86虚拟化经验。所以,我把自己从零开始,在统信UOS ARM系统上成功部署银河麒麟V10 ARM虚拟机的全过程,包括工具选型、避坑要点和优化技巧,整理成这篇详尽的指南。无论你是开发者、运维还是国产化系统的爱好者,这篇“手把手”的实录都能帮你省下大量摸索的时间。
2. 核心工具选型:为什么是QEMU/KVM而非VMware?
在x86世界,VMware Workstation Pro几乎是桌面虚拟化的代名词。但在ARM架构的Linux桌面环境下,情况就完全不同了。首先,VMware Workstation没有官方发布的ARM Linux版本。虽然网络热词里有“vmware16安装麒麟v10”,但那通常指的是在x86宿主上安装麒麟x86虚拟机,或者通过一些非常规的转译层运行,在纯ARM环境下基本不可行且性能极差。
因此,我们的目光必须转向Linux原生且支持ARM架构的虚拟化方案。主流的有两个:VirtualBox和QEMU/KVM。
- VirtualBox:Oracle有提供ARM64的测试版。但在统信UOS的软件仓库里,通常没有预打包的ARM版本,需要手动从官网下载deb包安装,过程繁琐,且对UOS系统的兼容性是个未知数,驱动和扩展包的支持也不完善。
- QEMU/KVM:这是Linux内核原生支持的虚拟化框架。KVM(Kernel-based Virtual Machine)提供内核级别的虚拟化支持,而QEMU是一个通用的机器模拟器,两者结合能实现高效的全虚拟化。最重要的是,它完全开源,与Linux内核深度集成,在ARM架构上的支持非常成熟。统信UOS作为基于Debian的发行版,可以很方便地通过apt包管理器安装完整的QEMU-KVM套件。
所以,QEMU/KVM是我们的不二之选。它可能没有VMware那样华丽的图形化管理界面,但通过命令行和简单的配置文件,我们能获得更直接、更底层的控制力,并且性能损耗也更小。接下来的所有操作都将围绕QEMU/KVM展开。
注意:在统信UOS上,你需要确保拥有sudo权限来安装软件和配置系统。
3. 宿主环境准备:统信UOS ARM上的必要配置
在开始创建虚拟机之前,我们必须确保宿主系统(统信UOS)已经为虚拟化做好了准备。这个过程主要分为三步:检查虚拟化支持、安装软件包、配置网络。
3.1 检查CPU虚拟化支持
虽然ARM架构的虚拟化支持(ARM Virtualization Extensions)在飞腾、鲲鹏等主流服务器CPU上都是标配,但为了保险起见,我们还是检查一下。
打开终端,输入以下命令:
lsmod | grep kvm如果输出中包含kvm字样,说明KVM内核模块已经加载。如果没有输出,可以尝试手动加载并检查CPU特性:
sudo modprobe kvm sudo modprobe kvm_arm # 对于ARM架构,通常是kvm_arm cat /proc/cpuinfo | grep -i virt你应该能看到CPU特性里包含virt相关的标志。如果这一步失败,可能需要检查BIOS/UEFI设置中是否开启了虚拟化支持(虽然对于ARM服务器/台式机,默认通常是开启的)。
3.2 安装QEMU-KVM及相关工具
统信UOS的软件源通常配置好了。我们通过apt命令安装全套工具:
sudo apt update sudo apt install -y qemu-system-arm qemu-utils libvirt-daemon-system libvirt-clients virt-manager bridge-utils这里解释一下各个包的作用:
qemu-system-arm:QEMU的ARM系统模拟器核心。qemu-utils:包含qemu-img等重要的磁盘镜像管理工具。libvirt-daemon-system&libvirt-clients:Libvirt服务端和客户端。Libvirt是一个管理虚拟化平台的工具包,提供了统一的API,能让virt-manager这样的图形工具工作。virt-manager:一个基于图形界面的虚拟机管理器,对于不熟悉命令行的用户来说非常友好,可以简化很多操作。bridge-utils:用于配置网络桥接的工具,这是让虚拟机获得和宿主机同网段IP的关键。
安装完成后,将当前用户加入libvirt和kvm用户组,以便无需root权限管理虚拟机:
sudo usermod -a -G libvirt,kvm $USER执行此命令后,你需要注销并重新登录,或者重启系统,才能使组权限生效。这是很多人会忽略的一步,导致后续运行virt-manager时权限不足。
3.3 配置桥接网络(关键步骤)
默认的NAT网络能让虚拟机访问外网,但外部网络无法直接访问虚拟机,对于需要将虚拟机作为独立服务器测试的场景不方便。桥接网络可以让虚拟机像一台真实的物理机一样接入局域网。
查看当前网络接口:
ip addr记下你正在上网的网卡名称,比如
enp3s0或eth0。编辑Netplan网络配置文件(UOS通常使用Netplan):
sudo vim /etc/netplan/01-netcfg.yaml假设你的原配置是这样的(使用DHCP):
network: version: 2 ethernets: enp3s0: dhcp4: true我们需要将其修改为桥接配置。修改前,请务必备份原文件!修改后内容类似如下:
network: version: 2 ethernets: enp3s0: dhcp4: no # 物理网卡不再直接获取IP bridges: br0: # 新建一个桥接接口br0 interfaces: [enp3s0] # 将物理网卡enp3s0加入桥接 dhcp4: yes # 桥接接口通过DHCP获取IP parameters: stp: false # 在简单网络中可关闭生成树协议 forward-delay: 0重要提示:如果你使用的是静态IP,配置会更复杂,需要将IP、网关、DNS等信息配置在
br0下,而不是enp3s0下。错误配置会导致宿主机断网!建议初次尝试在可接受断网风险的环境下进行,或者先使用NAT网络完成安装,再配置桥接。应用网络配置:
sudo netplan apply如果配置正确,执行
ip addr应该能看到br0接口获得了IP地址,而enp3s0接口没有IP地址。
4. 获取与准备银河麒麟V10 ARM版安装镜像
这是整个流程的基石,用错了镜像,后面所有努力都是白费。
4.1 确认镜像架构与版本
你必须下载银河麒麟桌面操作系统 V10 SP1 及以上版本的 ARM64 (aarch64) 架构安装镜像。文件通常命名为Kylin-Desktop-V10-SP1-Release-Build01-20210518-arm64.iso之类的格式。务必确认是arm64或aarch64,而不是x86_64或mips64el。
官方镜像可以从银河麒麟官网的下载频道获取,可能需要注册账号。请支持正版软件。
4.2 创建虚拟机磁盘镜像
虚拟机需要一块虚拟硬盘。我们使用qemu-img命令创建一个QCOW2格式的磁盘镜像文件。QCOW2格式支持稀疏文件(用多少占多少空间)、快照等高级功能,比RAW格式更节省空间且灵活。
在终端中,选择一个空间充足的目录(比如~/VMs),执行:
mkdir -p ~/VMs/kylin-v10-arm cd ~/VMs/kylin-v10-arm qemu-img create -f qcow2 kylin-v10-disk.qcow2 50G这条命令创建了一个名为kylin-v10-disk.qcow2、初始大小为50GB的QCOW2格式虚拟磁盘。注意,它一开始并不会立刻占用50GB的物理空间,而是随着虚拟机内数据的写入而动态增长。
5. 使用virt-manager图形化创建与安装虚拟机
对于大多数用户,使用virt-manager图形界面是最直观的方式。它底层调用Libvirt和QEMU,但屏蔽了复杂的命令行参数。
启动virt-manager:在UOS的应用菜单中搜索“虚拟系统管理器”并打开,或者在终端输入
virt-manager。新建虚拟机:点击左上角“文件”->“新建虚拟机”。
- 步骤1:本地安装介质。选择“本地安装介质”,点击“浏览”,找到你下载的银河麒麟ARM版ISO文件。系统类型通常能自动识别为“Linux”和“Generic default”。
- 步骤2:内存和CPU。根据宿主机的资源分配。建议内存至少4096 MB(4GB),CPU核心至少2个。对于ARM虚拟机,CPU型号选择“host”(如果支持)或“cortex-a57”、“cortex-a72”这类通用的ARMv8-A模型。“host”模式性能最好,但兼容性可能有问题,如果安装或启动时报错,可以换用通用模型。
- 步骤3:启用存储。选择“选择或创建自定义存储”,点击“浏览”,找到并选择我们刚才创建的
kylin-v10-disk.qcow2文件。 - 步骤4:命名与网络。给虚拟机起个名字,如“KylinV10-ARM”。网络选择是关键:在点击“完成”前,点击“网络选择”旁边的“自定义配置”。在弹出窗口中,将“网络源”从默认的“NAT”改为我们之前创建的桥接网络“br0”。这样虚拟机就能获得局域网IP了。
- 步骤5:完成创建。勾选“在安装前自定义配置”,然后点击“完成”。
自定义硬件(关键调整):在最后的配置界面,有几个重要设置需要检查:
- 固件:对于ARM架构的UEFI启动,我们需要指定一个固件文件。点击“引导选项”,在“固件”下拉菜单中,通常选择“UEFI”。但QEMU需要具体的固件文件。对于ARM,常用的是
edk2-aarch64-code.fd或QEMU_EFI.fd。你需要在系统中查找或下载这个文件。在UOS中,可以尝试安装ovmf包:sudo apt install ovmf,然后固件路径可能为/usr/share/OVMF/OVMF_CODE.fd(注意,这是x86的,ARM的可能需要单独下载)。一个更简单的方法是暂时使用“BIOS”启动(如果选项里有),或者先不修改,如果无法启动再回来解决此问题。 - 显示协议:将“视频”模型从默认的“Cirrus”或“VGA”改为“virtio”。
virtio是一种半虚拟化驱动,能显著提升图形和磁盘IO性能。但需要客户机(银河麒麟)安装时或安装后加载对应驱动。如果安装时界面黑屏,可以暂时改回“VGA”先完成安装。 - 磁盘总线:同样,将“磁盘”的总线类型从默认的“IDE”或“SATA”改为“VirtIO”以获得最佳磁盘性能。
- 网络设备:确保模型是“virtio-net-pci”。这是virtio的网络设备,性能优于默认的“rtl8139”。
- 固件:对于ARM架构的UEFI启动,我们需要指定一个固件文件。点击“引导选项”,在“固件”下拉菜单中,通常选择“UEFI”。但QEMU需要具体的固件文件。对于ARM,常用的是
开始安装:配置完成后,点击“开始安装”。虚拟机窗口会打开,并从ISO镜像启动,进入银河麒麟V10的图形化安装界面。之后的安装过程就和在物理机上安装麒麟系统几乎一模一样了:选择语言、时区、键盘布局、创建用户、分区(建议选择“清除整个磁盘并安装”即可,它会自动处理虚拟磁盘)、等待安装完成。
6. 安装后优化与驱动问题解决
安装完成重启后,虚拟机可能能正常进入系统,但可能会遇到两个典型问题:显示分辨率不正确和网络性能不佳。这是因为默认的通用驱动没有发挥virtio设备的性能。
6.1 安装virtio驱动与增强工具
在QEMU-KVM环境中,为了获得接近物理机的性能,需要在客户机(银河麒麟)内安装virtio驱动和qemu-guest-agent。
- 挂载驱动镜像:首先,我们需要将包含virtio驱动磁盘的ISO镜像挂载到虚拟机。在
virt-manager中关闭虚拟机,打开其硬件配置,点击“添加硬件”,选择“存储”,设备类型选“CDROM”,然后点击“浏览”。这里需要一个virtio-win或针对Linux的virtio驱动ISO。对于Linux客户机,驱动通常已经内置在内核中。但为了安装qemu-guest-agent,我们可以直接使用宿主机的软件源。 - 启动虚拟机并安装工具:启动银河麒麟虚拟机,打开终端。
- 安装必要软件包:
sudo apt update # 银河麒麟的软件源可能名称不同,可能需要先配置源。可以参考网络热词中的“kylin v10 sp3 yum源”,但注意麒麟V10桌面版通常使用apt(Debian系)。 # 如果apt update报错,需要先配置正确的软件源,通常安装镜像自带源。 sudo apt install -y qemu-guest-agent spice-vdagentqemu-guest-agent:这是一个运行在客户机内的守护进程,允许宿主机执行一些命令,如安全关机、获取IP信息等,并能改善一些交互体验。spice-vdagent:用于SPICE显示协议的剪贴板共享、鼠标集成和自适应分辨率调整。即使我们没用SPICE协议,安装它也无害。
- 启用服务并重启:
sudo systemctl enable qemu-guest-agent sudo systemctl start qemu-guest-agent sudo reboot
6.2 解决显示分辨率与图形性能问题
如果安装后桌面分辨率锁定在较低值(如1024x768)且无法调整,这是因为缺少合适的图形驱动。
- 检查显示服务:在虚拟机内,可以尝试安装
xserver-xorg-video-qxl或xserver-xorg-video-vmware(后者有时兼容性好),但针对QEMU的virtio-gpu,可能需要更特定的驱动。对于较新的麒麟系统,内核可能已包含virtio_gpu驱动。 - 修改GRUB引导参数:有时,添加内核参数可以强制识别显示模式。编辑
/etc/default/grub文件:
找到sudo vim /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT这一行,在引号内的参数末尾添加video=efifb:off video=vesafb:off video=xen-fb:off。修改后类似:
保存后,更新GRUB配置并重启:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=efifb:off video=vesafb:off video=xen-fb:off"sudo update-grub sudo reboot - 使用virt-manager的VNC/Spice客户端:确保在
virt-manager的显示设置中,使用“Spice server”或“VNC server”作为监听方式,并使用virt-viewer或remote-viewer客户端连接,通常能获得更好的图形体验和自动分辨率调整。
6.3 网络与共享文件夹配置
- 网络:如果按照前文配置了桥接网络
br0,虚拟机重启后应该能通过DHCP自动获取到与宿主机同网段的IP,使用ip addr命令查看。 - 共享文件夹:这是虚拟机与宿主机交换文件最方便的方式。这需要通过9p virtio filesystem实现。首先在宿主机创建一个共享目录,如
~/share_to_kylin。然后关闭虚拟机,在virt-manager的硬件配置中添加硬件,选择“文件系统”:- 驱动:
virtio-9p - 源路径:宿主机的目录(如
/home/你的用户名/share_to_kylin) - 目标路径:一个挂载标签,如
hostshare启动虚拟机后,需要在麒麟系统内手动挂载:
为了方便,可以将这行挂载命令添加到sudo mkdir -p /mnt/hostshare sudo mount -t 9p -o trans=virtio,version=9p2000.L hostshare /mnt/hostshare/etc/fstab中实现开机自动挂载:hostshare /mnt/hostshare 9p trans=virtio,version=9p2000.L 0 0 - 驱动:
7. 常见问题排查与性能调优
即便按照步骤操作,也可能会遇到各种问题。这里汇总几个典型场景的排查思路。
7.1 虚拟机无法启动,卡在UEFI/固件界面
这是ARM虚拟机最常见的问题之一。症状是启动后不是进入麒麟的GRUB,而是停在一个黑白文字的UEFI Shell或固件设置界面。
- 原因与解决:根本原因是缺少或未正确指定UEFI固件文件。如前文所述,QEMU需要
edk2-aarch64-code.fd这样的ARM UEFI固件。- 方案A(推荐):在Ubuntu/Debian系系统中,安装
qemu-efi-aarch64包:sudo apt install qemu-efi-aarch64。安装后,固件文件通常位于/usr/share/qemu-efi-aarch64/QEMU_EFI.fd。然后在virt-manager的“引导选项”中,将“固件”设置为“自定义”,并填入这个路径。 - 方案B:如果找不到,可以尝试从网络下载预编译的
edk2-aarch64-code.fd,并在配置中指定。 - 方案C(临时):如果只是为了测试安装,可以在创建虚拟机时,在“自定义配置”的“概述”中,将“芯片组”从“默认”改为“i440fx”(这是x86的,不推荐)或直接尝试使用“BIOS”引导(如果选项可用)。但这可能影响系统兼容性。
- 方案A(推荐):在Ubuntu/Debian系系统中,安装
7.2 安装过程中或启动后图形界面黑屏/花屏
- 排查步骤:
- 检查显示模型:在虚拟机配置中,将“视频”模型从“virtio”暂时改回通用的“VGA”或“Cirrus”,然后重启。如果能正常显示,说明是virtio-gpu驱动问题。可以先这样完成系统安装,进入系统后再尝试安装或启用
virtio_gpu驱动。 - 调整显存大小:在“视频”配置中,增加“显存”大小,例如从16MB增加到32MB或64MB。
- 使用串口控制台安装:如果图形界面始终无法工作,可以退而求其次,使用文本模式安装。在
virt-manager的“显示”设置中,取消勾选“自动连接”,然后添加一个“串口”硬件,重定向到pty。启动虚拟机后,在virt-manager的“查看”菜单中,选择“串口1”,就可以看到文本安装界面了。银河麒麟安装程序通常支持文本模式。
- 检查显示模型:在虚拟机配置中,将“视频”模型从“virtio”暂时改回通用的“VGA”或“Cirrus”,然后重启。如果能正常显示,说明是virtio-gpu驱动问题。可以先这样完成系统安装,进入系统后再尝试安装或启用
7.3 虚拟机内部网络不通(桥接模式)
- 排查步骤:
- 检查宿主机桥接:在宿主机执行
ip addr show br0,确认br0接口有正确的IP地址。 - 检查虚拟机网卡:在虚拟机内执行
ip addr,查看ens3或eth0等网卡是否获得了IP(如果是DHCP)。如果没有,尝试sudo dhclient ens3。 - 检查防火墙:宿主机和虚拟机的防火墙可能阻止了桥接流量。在宿主机上,可以暂时禁用防火墙测试:
sudo ufw disable(如果使用UFW)。在麒麟虚拟机内,检查其防火墙设置。 - 检查Netplan配置:确认宿主机
/etc/netplan/下的配置文件语法正确,没有缩进错误。可以用sudo netplan --debug apply来调试。
- 检查宿主机桥接:在宿主机执行
7.4 性能调优建议
- CPU与内存:根据宿主机资源合理分配。对于轻量级应用,2核4GB是起步配置。如果需要运行数据库或中间件,建议4核8GB以上。
- 磁盘IO:务必使用VirtIO磁盘总线和QCOW2格式。如果追求极致IO性能,并且宿主机是SSD,可以考虑使用“raw”格式镜像,但会预先占用全部指定空间。
- 文件系统:在虚拟机内部,对于虚拟磁盘的分区,使用
ext4或xfs文件系统即可。如果宿主机文件系统是Btrfs或ZFS,可能会因为COW(写时复制)特性对QCOW2镜像的性能有复杂影响,一般问题不大。 - 关闭不必要的服务:在虚拟机内,关闭不需要的桌面特效、索引服务等,可以释放资源。
整个流程走下来,虽然步骤比在x86上繁琐一些,但每一步都有其道理。成功在统信UOS ARM宿主机上跑起银河麒麟V10 ARM虚拟机后,你就拥有了一个高度灵活、隔离的国产化系统测试与开发环境。无论是验证软件兼容性,还是搭建复杂的多节点模拟环境,这套方案都提供了一个可靠的基础。最关键的是,通过命令行和配置文件的深入理解,你对Linux虚拟化的掌控力会远超过仅仅点击图形界面按钮。