基于openEuler平台的虚拟机操作

本文详细介绍了虚拟机的管理,包括生命周期、状态转换、配置修改、查询信息、安全启动、热迁移等。重点讨论了热迁移的共享存储、非共享存储和加密传输方式,以及CPU、内存、设备资源的管理和优化。此外,还提到了监控工具vmtop的使用,帮助进行虚拟化问题定位和性能调优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

管理虚拟机

虚拟机生命周期

虚拟机状态
  • 未定义(undefined):虚拟机未定义或未创建,即libvirt认为该虚拟机不存在。
  • 关闭状态(shut off):虚拟机已经被定义但未运行,或者虚拟机被终止。
  • 运行中(running):虚拟机处于运行状态。
  • 暂停(paused):虚拟机运行被挂起,其运行状态被临时保存在内存中,可以恢复到运行状态。
  • 保存(saved):与暂停(paused)状态类似,其运行状态被保存在持久性存储介质中,可以恢复到运行状态。
  • 崩溃(crashed):通常是由于内部错误导致虚拟机崩溃,不可恢复到运行状态。
状态转换

在这里插入图片描述

虚拟机标识

在libvirt中,每一个虚拟机实例都称作一个“domain”,每一个domain都有唯一标识,通过Name(名称)、UUID(通用唯一识别码)、Id(运行标识)表示。

管理命令

使用virsh命令工具管理虚拟机生命周期

virsh <operate> <obj> <options>

各参数含义如下:

  • operate:管理虚拟机生命周期对应操作,例如创建、销毁、启动等。
  • obj:命令操作对象,如指定需要操作的虚拟机。
  • options:命令选项,该参数可选。

在线修改虚拟机配置

虚拟机创建之后用户可以修改虚拟机的配置信息,称为在线修改虚拟机配置。在线修改配置以后,新的虚拟机配置文件会被持久化,并在虚拟机关闭、重新启动后生效。

  1. 使用virsh edit打开虚拟机名称为openEulerVM对应的XML配置文件。
# virsh edit openEulerVM
  1. 修改虚拟机配置文件。
  2. 保存虚拟机配置文件并退出。
  3. 关闭虚拟机。
# virsh shutdown openEulerVM
  1. 启动虚拟机使配置修改生效。
# virsh start openEulerVM

查询虚拟机信息

libvirt提供了一套命令行工具用于查询虚拟机的相关信息。

查询主机上的虚拟机信息
  • 查询主机上处于运行和暂停状态的虚拟机列表。
# virsh list
  • 查询主机上已经定义的所有虚拟机信息列表。
# virsh list --all
查询虚拟机基本信息

Libvirt组件提供了一组查询虚拟机状态信息的命令,包括虚拟机运行状态、设备信息或者调度属性等。
在这里插入图片描述

登录虚拟机

使用VNC密码登录
  1. 查询虚拟机使用的VNC端口号。例如名称为openEulerVM的虚拟机
# virsh vncdisplay openEulerVM
:3
  1. 打开VncViewer软件,输入主机IP和端口号。格式为“主机IP:端口号”,例如:“10.133.205.53:3”
  2. 单击“确定”输入VNC密码(可选),登录到虚拟机VNC进行操作

#####配置VNC-TLS登录

虚拟机安全启动

安全启动(Secure Boot)就是利用公私钥对启动部件进行签名和验证。安全启动的作用是检测设备启动阶段固件(Fireware)以及软件是否被篡改,防止恶意软件侵入和修改。安全启动验签顺序:UEFI BIOS->shim->grub->vmlinuz(依次验签通过并加载)。

安全启动流程

在这里插入图片描述

热迁移虚拟机

介绍

当虚拟机在物理机上运行时,物理机可能存在资源分配不均,造成负载过重或过轻的情况。另外,物理机存在硬件更换、软件升级、组网调整、故障处理等操作。虚拟机热迁移技术可以在业务连续前提下,完成负载均衡或上述操作,提升用户体验和工作效率。
虚拟机热迁移通常是将整个虚拟机的运行状态完整保存下来,同时可以快速恢复到原有的甚至不同的硬件平台上。openEuler支持共享存储热迁移非共享存储热迁移两种方式。

热迁移操作

前提条件
  • 进行热迁移之前要确保源端和目的端主机之间的网络是互通的,并且源端和目的获得资源权限是对等的,即两端同时能够访问到相同的存储资源和网络资源。
  • 在执行虚拟机热迁移前应当对虚拟机进行健康检查,并确保目的端主机有足够的CPU、内存和存储资源。
热迁移操作(共享存储)
  1. 确定是否为共享存储。
# virsh domblklist <VMInstanse>
 Target   Source
--------------------------------------------
sda      /dev/mapper/open_euleros_disk
sdb      /mnt/nfs/images/openeuler-test.qcow2

如果虚拟机的所有存储设备都在远端共享存储之上,则说明该虚拟机为共享存储虚拟机,否则为非共享存储虚拟机。
2. 执行如下命令,进行虚拟机热迁移。

# virsh migrate --live --unsafe openEulerVM qemu+ssh://<destination-host-ip>/system
  1. 热迁移完成后命令返回,虚拟机在目的端主机正常运行。
热迁移操作(非共享存储)
  1. 首先,先查询虚拟机存储设备列表,确保虚拟机使用的是非共享存储。
# virsh domblklist <VMInstanse>

执行热迁移之前需要在目的端主机相同磁盘目录下创建一个虚拟磁盘文件,注意磁盘的格式和大小必须保持一致。

# qemu-img create -f qcow2 /mnt/sdb/openeuler/openEulerVM.qcow2 20G
  1. 在源端使用virsh migrate命令来执行热迁移,迁移的时候会将存储也一并迁移到目的端。
# virsh migrate --live  --unsafe --copy-storage-all --migrate-disks sda \
openEulerVM qemu+ssh://<dest-host-ip>/system
  1. 热迁移完成后命令返回,虚拟机在目的端主机行正常运行,存储设备也被迁移到目的主机上。

热迁移操作(加密传输)



管理系统资源

openEuler 虚拟化使用libvirt命令来管理虚拟机的系统资源。

管理虚拟CPU

CPU份额

虚拟化环境下,同一主机上的多个虚拟机竞争使用物理CPU。CPU份额表示一个虚拟机竞争物理CPU计算资源的能力大小总和。通过调整CPU份额来保证虚拟机CPU计算资源服务质量。

  • 查看虚拟机的当前CPU份额
$ virsh schedinfo <VMInstance>
  • 在线修改:修改处于running状态的虚拟机的当前CPU份额
$ virsh schedinfo <VMInstance> --live cpu_shares=<number>

修改后立即生效,但重启后失效

  • 持久化修改:在libvirt内部配置中修改虚拟机的CPU份额
$ virsh schedinfo <VMInstance> --config cpu_shares=<number>

不会立即生效,下次启动后一直生效

绑定QUMU进程至物理CPU

QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内,从而保证了运行不同业务的虚拟机不会干扰到邻位虚拟机。
通过virsh emulatorpin命令可以绑定QEMU主进程到物理CPU。

  • 查看QEMU进程当前绑定的物理CPU范围
$ virsh emulatorpin openEulerVM
  • 在线绑定:修改处于running状态的虚拟机对应的QEMU进程的绑定关系
$ virsh emulatorpin openEulerVM --live 2-3

绑定到物理CPU2、3

  • 持久化绑定:在libvirt内部配置中修改虚拟机对应的QEMU进程的绑定关系
$ virsh emulatorpin openEulerVM --config 0-3,^1

绑定到物理CPU0、2、3

调整虚拟CPU绑定关系

把虚拟机的vCPU绑定在物理CPU上,即vCPU只在绑定的物理CPU上调度,在特定场景下达到提升虚拟机性能的目的。
通过virsh vcpupin命令可以调整vCPU和物理CPU的绑定关系。

  • 查看虚拟机的当前vCPU绑定信息
$ virsh vcpupin openEulerVM
  • 在线调整:修改处于running状态的虚拟机的当前vCPU绑定关系
$ virsh vcpupin openEulerVM  --live 0 2-3

将vCPU0绑定在物理CPU2、3上

  • 持久化调整:在libvirt内部配置中修改虚拟机的vCPU绑定关系
$ virsh vcpupin openEulerVM --config 0 0-3,^1

将vCPU0绑定在物理CPU0、2、3上

CPU热插

在线增加(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响虚拟机正常运行的方案。

  1. 如果热插CPU后需要自动上线热插的CPU,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-cpu.rules,并在其中定义udev规则,内容参考如下:
# automatically online hot-plugged cpu
ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}="1"
  1. 利用virsh工具进行虚拟机CPU热插操作。例如给虚拟机openEulerVM热插CPU到6,且在线生效的参考命令如下:
virsh setvcpus openEulerVM 6 --live

管理虚拟内存

NUMA简介

传统的多核运算使用SMP(Symmetric Multi-Processor)模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器。SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加处理器并不能获得更高的性能。
NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个“节点”(NODE), 每个节点分配一块本地存储器空间。所有节点中的处理器都可以访问全部的物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。

配置Host-NUMA

通过虚拟机XML配置文件为虚拟机指定主机的NUMA节点,使虚拟机内存分配在指定的NUMA节点上。本特性一般与vCPU绑定一起使用,从而避免vCPU远端访问内存,以提高性能。

  • 查看host的NUMA拓扑结构
$ numactl -H
  • 在虚拟机XML配置文件中添加numatune字段,创建并启动虚拟机
    <numatune> <memory mode="strict" nodeset="0"/> </numatune>
配置Guest-NUMA

openEuler提供了Guest NUMA特性,在虚拟机内部呈现出NUMA拓扑结构。配置Guest NUMA时可以指定vNode的内存在HOST上的分配位置,实现内存的分块绑定,同时配合vCPU绑定,使vNode上的vCPU和内存在同一个物理NUMA node上。

内存热插

当前openEuler版本支持在线给虚拟机添加内存,当虚拟机出现物理内存不足又无法关闭虚拟机的时候,可以使用此特性增加虚拟机的物理内存资源。

  1. 如果热插内存后需要自动上线热插的内存,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-memory.rules,并在其中定义udev规则,内容参考如下:
# automatically online hot-plugged memory
ACTION=="add", SUBSYSTEM=="memory", ATTR{state}="online"
  1. 根据需要热插的内存大小和虚拟机Guest NUMA Node创建内存描述xml文件。
<memory model='dimm'>
  <target>
  <size unit='MiB'>1024</size>
  <node>0</node>
  </target>
</memory>
  1. 使用virsh attach-device命令为虚拟机热插内存。
# virsh attach-device openEulerVM memory.xml --live

管理设备

管理虚拟磁盘

虚拟磁盘类型主要包含virtio-blk、virtio-scsi、vhost-scsi等。virtio-blk模拟的是一种block设备,virtio-scsi和vhost-scsi模拟的是一种scsi设备。

  • 挂载virtio-scsi磁盘(重启后失效)
 $ virsh attach-device <VMInstance> <attach-device.xml>
  • 卸载virtio-scsi磁盘
$ virsh detach-device <VMInstance> <detach-device.xml>

管理虚拟网卡

虚拟网卡类型主要包含virtio-net、vhost-net、vhost-user等。

  • 挂载vhost-net网卡(重启后失效)
 $ virsh attach-device <VMInstance> <attach-device.xml>
  • 卸载vhost-net网卡
 $ virsh detach-device <VMInstance> <detach-device.xml>

配置虚拟串口

Linux虚拟机串口控制台,即虚拟机串口连接到宿主机的一个伪终端设备。提供虚拟串口,来达到虚拟机与宿主机之间互相通信的目的。通过在虚拟机的XML配置文件中增加相应串口的配置项,可以实现虚拟机与宿主机之间的互相通信。

  • 在虚拟机的XML配置文件中"devices"节点下添加如下所示的虚拟串口配置项
    <serial type='pty'>
    </serial>
    <console type='pty'>
      <target type='serial'/>
    </console>
  • 使用virsh console命令连接到正在运行的虚拟机的pty串口。
$ virsh console <VMInstance>
  • 如果要确保没有遗漏任何串口消息,请在启动虚拟机时使用–console选项连接到串口。
$ virsh start --console <VMInstance>

管理虚拟机可维护性

虚拟机NMI Watchdog

NMI Watchdog是一种用来检测Linux出现hardlockup(硬死锁)的机制。通过产生NMI不可屏蔽中断,从而在Linux内核关闭中断的代码区间也能打断代码的执行,进一步检测内核是否出现硬死锁。
针对ARM架构虚拟机配置NMI Watchdog的操作步骤如下:

  1. 在虚拟机的引导配置文件grub.cfg中添加如下参数:nmi_watchdog=1 pmu_nmi_enable hardlockup_cpu_freq=auto irqchip.gicv3_pseudo_nmi=1 disable_sdei_nmi_watchdog
  2. 检查虚拟机内部PMU Watchdog是否加载成功,如果加载成功,内核dmesg日志打印类似如下内容
[2.1173222] NMI watchdog: CPU0 freq probed as 2399999942 HZ.

工具使用指南

vmtop使用指南

vmtop 是运行在宿主机host上的用户态工具。使用vmtop可以实时动态地查看虚拟机资源的使用情况,例如CPU占用率、内存占用率、vCPU陷入陷出次数等。因此,可以使用vmtop作为虚拟化问题定位和性能调优的工具。
vmtop是一款命令行工具,直接以命令行的方式运行 vmtop 即可。 另外,vmtop还提供了不同可选选项,用于查询不同信息。

语法格式
vmtop [选项]
选项说明
  • d: 设置显示刷新的时间间隔,单位:秒
  • H: 显示虚拟机的线程信息
  • n: 设置显示刷新的次数,刷新完成后退出
  • b: Batch模式显示,可以用于重定向到文件
  • h: 显示帮助信息
  • v: 显示版本
  • p: 监控指定id的虚拟机
快捷键

在vmtop运行状态下使用的快捷键

  • H: 显示或关闭虚拟机线程信息,默认显示该信息
  • up/down: 向上/向下移动显示的虚拟机列表
  • left/right: 向左/向右移动显示的信息,从而显示因屏幕宽度被隐藏的列
  • f: 进入监控项编辑模式,选择要开启的监控项
  • q: 退出vmtop进程
<think>嗯,用户问的是如何在openEuler上打开虚拟机。首先,我需要确认用户指的是启动已经存在的虚拟机还是创建新的。不过通常情况下,用户可能已经安装了虚拟机管理工具,比如QEMU/KVM,或者使用libvirt的virt-manager这样的图形界面工具。 首先,openEuler是基于Linux的发行版,所以大部分操作应该和常见的Linux系统类似。可能需要检查是否安装了相关的虚拟化软件包。例如,QEMU/KVM和libvirt是常用的组合。如果用户没有安装,可能需要先指导他们安装这些软件包。 然后,用户可能需要知道如何启动虚拟机。如果使用命令行,virsh命令可以用来管理虚拟机。比如,列出所有虚拟机,然后启动指定的虚拟机。如果用户使用的是图形界面工具,比如virt-manager,那步骤会不同,需要打开virt-manager,找到虚拟机并启动。 另外,需要提醒用户确保他们的系统支持虚拟化,并且在BIOS中启用了虚拟化技术(如Intel VT-x或AMD-V)。还有,检查KVM模块是否加载,可以通过lsmod | grep kvm来查看。 可能用户还会遇到权限问题,比如没有加入libvirt组,导致无法管理虚拟机。这时候需要指导用户将当前用户加入libvirt组,并重新登录。 总结下来,步骤大概是:1. 安装虚拟化软件;2. 检查虚拟化支持;3. 使用命令行或图形工具启动虚拟机。同时要注意权限问题。</think>在openEuler操作系统中打开虚拟机,可以通过以下两种主要方式实现: --- ### **方式一:使用命令行工具(virsh)** 1. **确认虚拟化环境已就绪** ```bash # 检查KVM模块是否加载 lsmod | grep kvm # 若未加载则手动加载 sudo modprobe kvm_intel # Intel处理器 sudo modprobe kvm_amd # AMD处理器 ``` 2. **列出已存在的虚拟机** ```bash sudo virsh list --all ``` 输出示例: ``` Id Name State -------------------------- - centos7 shut off ``` 3. **启动虚拟机** ```bash sudo virsh start <虚拟机名称> # 例如:sudo virsh start centos7 ``` 4. **连接虚拟机控制台** ```bash sudo virsh console <虚拟机名称> ``` --- ### **方式二:使用图形化工具(virt-manager)** 1. **安装虚拟化管理套件** ```bash sudo dnf install virt-manager libvirt-client qemu-kvm ``` 2. **启动虚拟化管理器** ```bash virt-manager ``` 3. **操作步骤** - 在左侧列表选择虚拟机 - 点击工具栏的"▶"按钮启动虚拟机 - 双击虚拟机进入交互界面 --- ### **注意事项** 1. **权限问题** ```bash # 将当前用户加入libvirt组 sudo usermod -aG libvirt $USER # 重启服务并重新登录 sudo systemctl restart libvirtd ``` 2. **验证虚拟化支持** ```bash # 检查CPU虚拟化支持 egrep -c '(vmx|svm)' /proc/cpuinfo # 输出大于0表示支持 ``` 3. **服务状态检查** ```bash sudo systemctl status libvirtd ``` --- ### **补充说明** - 如果尚未创建虚拟机,需先通过`virt-install`命令或virt-manager向导创建 - 虚拟机配置文件默认路径:`/etc/libvirt/qemu/` - 建议关闭SELinux或将模式改为`permissive`以避免权限冲突
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值