鲲鹏服务器+银河麒麟系统安装KVM
服务器配置
[root@test ~]# free -htotal used free shared buff/cache available
Mem: 509Gi 28Gi 153Gi 4.2Gi 327Gi 426Gi
Swap: 4.0Gi 0B 4.0Gi
[root@test ~]#
[root@test ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 255G 0 255G 0% /dev
tmpfs 255G 64K 255G 1% /dev/shm
tmpfs 255G 4.1G 251G 2% /run
tmpfs 255G 0 255G 0% /sys/fs/cgroup
/dev/mapper/klas-root 391G 35G 357G 9% /
tmpfs 255G 20M 255G 1% /tmp
/dev/sdb2 1014M 259M 756M 26% /boot
/dev/sdb1 599M 7.1M 592M 2% /boot/efi
tmpfs 51G 640K 51G 1% /run/user/0
tmpfs 51G 0 51G 0% /run/user/991
/dev/sda1 15T 307G 15T 3% /data
[root@test ~]# uname -a
Linux 160-10 4.19.90-89.11.v2401.ky10.aarch64 #1 SMP Thu Apr 25 18:20:10 CST 2024 aarch64 aarch64 aarch64 GNU/Linux
[root@test ~]#
[root@test ~]# cat /etc/kylin-release
Kylin Linux Advanced Server release V10 (Halberd)
[root@test ~]#
[root@test ~]# lscpu
架构: aarch64
CPU 运行模式: 64-bit
字节序: Little Endian
CPU: 64
在线 CPU 列表: 0-63
每个核的线程数: 1
每个座的核数: 32
座: 2
NUMA 节点: 2
厂商 ID: HiSilicon
BIOS Vendor ID: HiSilicon
型号: 0
型号名称: Kunpeng-920
BIOS Model name: HUAWEI Kunpeng 920 5220
步进: 0x1
Frequency boost: disabled
CPU 最大 MHz: 2600.0000
CPU 最小 MHz: 200.0000
BogoMIPS: 200.00
L1d 缓存: 4 MiB
L1i 缓存: 4 MiB
L2 缓存: 32 MiB
L3 缓存: 64 MiB
NUMA 节点0 CPU: 0-31
NUMA 节点1 CPU: 32-63
Vulnerability Gather data sampling: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Not affected
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
标记: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm ssbs
检查是否支持虚拟化,执行以下密令
# 检查是否存在KVM内核设备文件。这个文件是用户空间程序(如QEMU)与内核KVM模块交互的接口。
[root@test ~]# ls -l /dev/kvm
crw-rw-rw- 1 root kvm 10, 232 8月 20 16:33 /dev/kvm
[root@test ~]#
# 检查KVM内核模块是否已加载到系统中。/sys/module/是一个虚拟文件系统,包含了当前已加载模块的信息。
[root@test ~]# ls /sys/module/kvm
parameters uevent
[root@test ~]#
# 在系统启动日志中过滤出与KVM相关的信息。dmesg命令用于打印内核环缓冲区的内容,其中包含了系统启动和运行过程中的各种硬件和驱动信息。
[root@test ~]# dmesg | grep kvm
[ 0.930298] kvm [1]: Hisi ncsnp: enabled
[ 0.930394] kvm [1]: 16-bit VMID
[ 0.930395] kvm [1]: IPA Size Limit: 48bits
[ 0.930419] kvm [1]: GICv4 support disabled
[ 0.930420] kvm [1]: vgic-v2@9b020000
[ 0.930432] kvm [1]: GIC system register CPU interface enabled
[ 0.930813] kvm [1]: vgic interrupt IRQ1
[ 0.931220] kvm [1]: VHE mode initialized successfully
解释:
Hisi ncsnp: enabled: 指出华为鲲鹏(HiSilicon)处理器的某些特性(可能是Nested Security NPcontext)已启用。
16-bit VMID: 虚拟机标识符(VMID)为16位。VMID用于在ARM架构的TLB(转换后备缓冲区)中区分不同虚拟机的地址空间。
IPA Size Limit: 48bits: 这是极其重要的一条信息。它表明KVM支持客户机(虚拟机)的物理地址空间(IPA)最大为48位。这意味着单个虚拟机最大可以支持 256TB 的物理内存。这完全满足了绝大多数应用场景的需求。
GICv4 support disabled: 虚拟中断控制器(GIC)的v4版本支持被禁用。v4版本提供了更好的直接注入中断性能(如支持LPIs),但可能由于硬件或软件兼容性原因未启用。使用v2或v3版本完全足够。
vgic-v2@9b020000: 虚拟GIC(vGIC)的版本为v2,其基地址为 0x9b020000。vGIC是KVM/ARM中模拟中断控制器的关键组件。
GIC system register CPU interface enabled: 非常重要。这表明CPU使用系统寄存器(而非内存映射寄存器)来访问GIC中断控制器。这是现代ARMv8架构的标准和高效方式,对于KVM的正常工作至关重要。
vgic interrupt IRQ1: vGIC使用了系统的1号中断请求线。
VHE mode initialized successfully: 这是最关键的一条信息。VHE(Virtualization Host Extensions)是ARMv8.1及以上架构提供的一项硬件加速特性。它允许内核直接在EL2(虚拟化层)运行,极大地减少了世界切换的开销,提升了虚拟化的性能。这条消息表明您的鲲鹏920处理器支持并已成功启用VHE模式,KVM将能以最高性能运行。
安装
yum -y install qemu libvirt virt-manager virt-install
启动服务
systemctl start libvirtd
systemctl enable libvirtd
创建虚机
图形化创建虚机参看
在图形化界面运行virt-manager
准备镜像
wget -b https://archive.kernel.org/centos-vault/altarch/7.9.2009/isos/aarch64/CentOS-7-aarch64-Everything-2009.iso
wget -b https://archive.kernel.org/centos-vault/altarch/7.9.2009/isos/aarch64/CentOS-7-aarch64-Minimal-2009.iso
wget -b https://archive.kernel.org/centos-vault/altarch/7.9.2009/isos/aarch64/CentOS-7-aarch64-NetInstall-2009.iso
启停虚机
virsh shutdown <虚拟机名称> # 关闭虚拟机
virsh start <虚拟机名称> # 启动虚拟机
KVM 常用命令手册
一、虚拟机生命周期管理 (virsh)
命令 | 说明 | 示例 |
---|---|---|
virsh list | 列出正在运行的虚拟机 | virsh list |
virsh list --all | 列出所有虚拟机(含关闭的) | virsh list --all |
virsh start <domain> | 启动虚拟机 | virsh start centos8 |
virsh shutdown <domain> | 优雅关闭虚拟机(发送ACPI信号) | virsh shutdown centos8 |
virsh destroy <domain> | 强制关闭虚拟机(相当于拔电源,慎用!) | virsh destroy centos8 |
virsh reboot <domain> | 重启虚拟机 | virsh reboot centos8 |
virsh suspend <domain> | **暂停(挂起)**虚拟机 | virsh suspend centos8 |
virsh resume <domain> | 恢复被暂停的虚拟机 | virsh resume centos8 |
virsh autostart <domain> | 设置虚拟机随宿主机自启 | virsh autostart centos8 |
virsh autostart --disable <domain> | 禁用虚拟机自启 | virsh autostart --disable centos8 |
二、虚拟机配置与信息查询
命令 | 说明 | 示例 |
---|---|---|
virsh dominfo <domain> | 查看虚拟机基本信息 | virsh dominfo centos8 |
virsh dumpxml <domain> | 导出虚拟机XML配置(用于备份或修改) | virsh dumpxml centos8 > centos8.xml |
virsh define <file.xml> | **根据XML文件定义(注册)**虚拟机 | virsh define /path/to/centos8.xml |
virsh undefine <domain> | 删除虚拟机定义(不删除磁盘文件) | virsh undefine centos8 |
virsh edit <domain> | 编辑虚拟机XML配置 | virsh edit centos8 |
virsh vcpuinfo <domain> | 查看虚拟机VCPU信息 | virsh vcpuinfo centos8 |
virsh domblklist <domain> | 列出虚拟机连接的磁盘设备 | virsh domblklist centos8 |
三、虚拟磁盘管理 (qemu-img)
命令 | 说明 | 示例 |
---|---|---|
qemu-img create | 创建新的磁盘镜像文件 | qemu-img create -f qcow2 /images/centos8.qcow2 20G |
qemu-img info | 查看磁盘镜像详细信息 | qemu-img info /images/centos8.qcow2 |
qemu-img convert | 转换磁盘镜像格式(如 raw -> qcow2) | qemu-img convert -f raw -O qcow2 input.img output.qcow2 |
qemu-img resize | 调整磁盘镜像大小(危险!需先在VM内调整文件系统) | qemu-img resize centos8.qcow2 +5G |
qemu-img snapshot | 管理磁盘镜像的快照(创建、列出、删除) | qemu-img snapshot -c snapshot1 centos8.qcow2 |
常用磁盘格式:
-f raw
:原始格式,性能好,不支持快照和动态扩容。-f qcow2
(推荐):QEMU copy-on-write格式,支持快照、压缩、加密和动态扩容。
四、虚拟网络管理
命令 | 说明 | 示例 |
---|---|---|
virsh net-list --all | 列出所有虚拟网络 | virsh net-list --all |
virsh net-info <network> | 查看指定网络信息 | virsh net-info default |
virsh net-dumpxml <network> | 导出虚拟网络XML配置 | virsh net-dumpxml default > default_net.xml |
virsh net-start <network> | 启动一个虚拟网络 | virsh net-start default |
virsh net-destroy <network> | 停止一个虚拟网络 | virsh net-destroy default |
virsh net-autostart <network> | 设置虚拟网络随libvirt自启 | virsh net-autostart default |
五、控制台与连接
命令 | 说明 | 示例 |
---|---|---|
virsh console <domain> | 通过串行控制台连接到虚拟机(需在VM内配置console) | virsh console centos8 |
virt-viewer <domain> | 打开虚拟机的图形化控制台(SPICE/VNC) | virt-viewer centos8 |
六、快照管理 (virsh)
警告: 快照功能在 qcow2
格式上工作良好,但生产环境需谨慎使用,过多快照可能影响性能。
命令 | 说明 | 示例 |
---|---|---|
virsh snapshot-create-as <domain> <name> | 创建快照 | virsh snapshot-create-as centos8 snap1 |
virsh snapshot-list <domain> | 列出所有快照 | virsh snapshot-list centos8 |
virsh snapshot-revert <domain> <snapshotname> | 恢复到某个快照状态 | virsh snapshot-revert centos8 snap1 |
virsh snapshot-delete <domain> <snapshotname> | 删除快照 | virsh snapshot-delete centos8 snap1 |
总结与核心工具
virsh
:最重要的命令,用于管理虚拟机的整个生命周期和配置。qemu-img
:用于管理虚拟磁盘,创建、转换、扩容都靠它。virt-manager
:图形化工具,适合初学者直观地创建和管理虚拟机。
鲲鹏 (aarch64) 平台特别提示
- 创建虚拟机时,如需使用VNC等图形界面,请注意显卡模型的选择(如使用Virtio视频设备)。
- 在服务器版系统上,可完全通过命令行 (
virsh
,virt-install
) 进行管理。