Libvirt 迁移标志详解
可参考:https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainMigrateFlags
在虚拟化环境中,迁移是一项重要的功能,Libvirt 提供了一系列标志,用于控制迁移过程中的不同行为。以下是 virDomainMigrateFlags 枚举的详细解释:
-
VIR_MIGRATE_LIVE (1):
- 含义: 在迁移过程中不挂起域,且包含虚拟机的内存状态。如果域内存变化速度比传输速度快,那么迁移将无法收敛。迁移过程中随时可以通过
virDomainSuspend手动暂停域。对应 virsh 中的--live参数。
- 含义: 在迁移过程中不挂起域,且包含虚拟机的内存状态。如果域内存变化速度比传输速度快,那么迁移将无法收敛。迁移过程中随时可以通过
-
VIR_MIGRATE_PEER2PEER (2):
- 含义: 告诉源 libvirtd 直接连接目标主机。如果没有此标志,客户端(如 virsh)将连接到两个主机并控制迁移过程。在点对点模式下,源 libvirtd 通过直接调用目标主机的 libvirtd 来控制迁移过程。对应 virsh 中的
--p2p参数。
- 含义: 告诉源 libvirtd 直接连接目标主机。如果没有此标志,客户端(如 virsh)将连接到两个主机并控制迁移过程。在点对点模式下,源 libvirtd 通过直接调用目标主机的 libvirtd 来控制迁移过程。对应 virsh 中的
-
VIR_MIGRATE_TUNNELLED (4):
- 含义: 通过 libvirtd 连接隧道迁移数据。如果没有此标志,源 hypervisor 直接将迁移数据发送到目标 hypervisor。此标志仅在设置
VIR_MIGRATE_PEER2PEER时使用。对应 virsh 中的--tunnelled参数。
- 含义: 通过 libvirtd 连接隧道迁移数据。如果没有此标志,源 hypervisor 直接将迁移数据发送到目标 hypervisor。此标志仅在设置
-
VIR_MIGRATE_PERSIST_DEST (8):
- 含义: 在成功迁移后,将域定义为在目标主机永久存在。如果域在源主机上持久化,并且未使用
VIR_MIGRATE_UNDEFINE_SOURCE,则该域将在两个主机上存在。对应 virsh 中的--persistent参数。
- 含义: 在成功迁移后,将域定义为在目标主机永久存在。如果域在源主机上持久化,并且未使用
-
VIR_MIGRATE_UNDEFINE_SOURCE (16):
- 含义: 在成功迁移后,在源主机取消定义域。对应 virsh 中的
--undefinesource参数。
- 含义: 在成功迁移后,在源主机取消定义域。对应 virsh 中的
-
VIR_MIGRATE_PAUSED (32):
- 含义: 使域在目标主机上保持挂起状态。必须显式使用
virDomainResume(在迁移 API 返回的virDomainPtr上)才能恢复域运行。对应 virsh 的--suspend参数。
- 含义: 使域在目标主机上保持挂起状态。必须显式使用
-
VIR_MIGRATE_NON_SHARED_DISK (64):
- 含义: 除了域的内存外,还可以迁移完整的磁盘镜像。默认情况下,仅迁移非共享、非只读的磁盘镜像。
VIR_MIGRATE_PARAM_MIGRATE_DISKS参数可以指定要迁移的磁盘。此标志与VIR_MIGRATE_NON_SHARED_INC互斥。对应 virsh 的--copy-storage-all参数。
- 含义: 除了域的内存外,还可以迁移完整的磁盘镜像。默认情况下,仅迁移非共享、非只读的磁盘镜像。
-
VIR_MIGRATE_NON_SHARED_INC (128):
- 含义: 除迁移域内存外,还要迁移磁盘镜像。该标志与
VIR_MIGRATE_NON_SHARED_DISK类似,但仅复制每个磁盘链的顶层。也就是说,磁盘链的其余部分都应该默认存在于目标主机上,且与源主机完全相同。此标志与VIR_MIGRATE_NON_SHARED_DISK互斥。对应 virsh 的--copy-storage-inc参数。
- 含义: 除迁移域内存外,还要迁移磁盘镜像。该标志与
-
VIR_MIGRATE_CHANGE_PROTECTION (256):
- 含义: 禁止在迁移过程中更改域配置。当双方都支持时,会自动使用此标志。如果有一方不支持,显示设置此标志会导致迁移失败。对应 virsh 的
--change-protection参数。
- 含义: 禁止在迁移过程中更改域配置。当双方都支持时,会自动使用此标志。如果有一方不支持,显示设置此标志会导致迁移失败。对应 virsh 的
-
VIR_MIGRATE_UNSAFE (512):
- 含义: 即使它被判定为不安全的,仍强制进行迁移。在某些情况下,libvirt 可能会拒绝迁移域,因为这样做可能会导致数据损坏等
潜在问题,因此迁移会被认为是不安全的。对于 QEMU 域,如果该域使用磁盘,且未将缓存模式显示设置为 “none”,则可能会发生这种情况。迁移这些域是不安全的,除非磁盘镜像存储在一致的集群文件系统上,例如 GFS2 或 GPFS。对应 virsh 的 --unsafe 参数。
-
VIR_MIGRATE_OFFLINE (1024):
- 含义: 仅迁移域定义,而不用在目标主机上启动域,也不会在源主机上停止域。offline 迁移需要设置
VIR_MIGRATE_PERSIST_DEST。offline 迁移不能复制磁盘存储和其他基于文件的存储(如 UEFI 变量)。对应 virsh 的--offline参数。
- 含义: 仅迁移域定义,而不用在目标主机上启动域,也不会在源主机上停止域。offline 迁移需要设置
-
VIR_MIGRATE_COMPRESSED (2048):
- 含义: 压缩迁移数据。可以使用
VIR_MIGRATE_PARAM_COMPRESSION指定压缩方式。如果省略该参数,则使用 hypervisor 的默认方法。压缩方法可以通过特定的VIR_MIGRATE_PARAM_COMPRESSION_*参数进行调节。对应 virsh 的--compressed参数。
- 含义: 压缩迁移数据。可以使用
-
VIR_MIGRATE_ABORT_ON_ERROR (4096):
- 含义: 当迁移时发生软错误(例如 IO 错误),取消迁移。对应 virsh 的
--abort-on-error参数。
- 含义: 当迁移时发生软错误(例如 IO 错误),取消迁移。对应 virsh 的
-
VIR_MIGRATE_AUTO_CONVERGE (8192):
- 含义: 启用确保实时迁移最终收敛的算法。这意味着将降低域的性能,以确保它内存更改的速度不会超过传输的速度。
VIR_MIGRATE_PARAM_AUTO_CONVERGE_*参数可调整该算法。对应 virsh 的--auto-converge参数。
- 含义: 启用确保实时迁移最终收敛的算法。这意味着将降低域的性能,以确保它内存更改的速度不会超过传输的速度。
-
VIR_MIGRATE_RDMA_PIN_ALL (16384):
- 含义: 此标志可用于 RDMA 迁移(即当
VIR_MIGRATE_PARAM_URI参数以 “rdma://” 开始),从而让 hypervisor 在迁移开始之前一次性固定域的所有内存,而不是根据需要固定内存页。这对于 QEMU/KVM 需要使用hard_limit内存调整元素(在域 XML 中),并将其设置为域配置的最大内存加上 QEMU 本身消耗的任何内存。不能把内存限制设置的太高,以免主机内核耗尽内存。对应 virsh 的--rdma-pin-all参数。
- 含义: 此标志可用于 RDMA 迁移(即当
-
VIR_MIGRATE_POSTCOPY (32768):
- 含义: 设置
VIR_MIGRATE_POSTCOPY标志,libvirt 会启用后复制迁移模式。然而,迁移会正常开始,需要调用virDomainMigrateStartPostCopy来切换到后复制模式。详情请参阅virDomainMigrateStartPostCopy。对应 virsh 的--postcopy参数。
- 含义: 设置
-
VIR_MIGRATE_TLS (65536):
- 含义: 设置
VIR_MIGRATE_TLS标志,将尝试使用 hypervisor 配置的 TLS 来进行迁移。如果在源或目标上配置不正确,迁移将失败。对应 virsh 的--tls参数。
- 含义: 设置
-
VIR_MIGRATE_PARALLEL (131072):
- 含义: 通过多个网络连接传输内存页。可以使用
VIR_MIGRATE_PARAM_PARALLEL_*来设置并行迁移功能。对应 virsh 的--parallel参数。
- 含义: 通过多个网络连接传输内存页。可以使用
```java
// Java中模拟的Libvirt迁移标志位(根据官方文档)private static final long VIR_MIGRATE_LIVE = 1L << 0; // 1 - 不暂停域迁移期间。在域运行时将其内存传输到目标主机。如果域更改内存的速度快于传输速度,则迁移可能无法收敛。在迁移过程中任何时候都可以通过virDomainSuspend手动暂停域。private static final long VIR_MIGRATE_PEER2PEER = 1L << 1; // 2 - 指示源libvirtd直接连接到目标主机。如果不设置此标志,客户端(如virsh)将同时连接到两个主机并控制迁移过程。在点对点模式下,源libvirtd通过直接调用目标守护进程来控制迁移。private static final long VIR_MIGRATE_TUNNELLED = 1L << 2; // 4 - 通过libvirtd连接隧道迁移数据。如果不设置此标志,源虚拟机管理程序将直接向目标虚拟机管理程序发送迁移数据。此标志只能与VIR_MIGRATE_PEER2PEER一起使用。private static final long VIR_MIGRATE_PERSIST_DEST = 1L << 3; // 8 - 成功迁移后在目标主机上定义域为持久化。如果域在源主机上是持久化的,并且未使用VIR_MIGRATE_UNDEFINE_SOURCE,它将在两个主机上都变为持久化。private static final long VIR_MIGRATE_UNDEFINE_SOURCE = 1L << 4; // 16 - 迁移成功完成后从源主机上删除域定义。private static final long VIR_MIGRATE_PAUSED = 1L << 5; // 32 - 将域在目标主机上保持暂停状态。需要显式调用virDomainResume(由迁移API返回的virDomainPtr)来恢复域的虚拟CPU。private static final long VIR_MIGRATE_NON_SHARED_DISK = 1L << 6; // 64 - 除了域的内存外,还迁移完整的磁盘映像。默认情况下,仅迁移非共享的非只读磁盘映像。可以使用VIR_MIGRATE_PARAM_MIGRATE_DISKS参数指定应迁移哪些磁盘。此标志与VIR_MIGRATE_NON_SHARED_INC互斥。private static final long VIR_MIGRATE_NON_SHARED_INC = 1L << 7; // 128 - 除了域的内存外,还迁移磁盘映像。这类似于VIR_MIGRATE_NON_SHARED_DISK,但仅复制每个磁盘备份链的顶层。即,期望备份链的其余部分在目标主机上存在,并且与源主机上的完全相同。此标志与VIR_MIGRATE_NON_SHARED_DISK互斥。private static final long VIR_MIGRATE_CHANGE_PROTECTION = 1L << 8; // 256 - 在迁移过程中保护域配置不受更改。当双方都支持时,会自动使用此标志。显式设置此标志将导致如果源主机或目标主机不支持它,则迁移失败。private static final long VIR_MIGRATE_UNSAFE = 1L << 9; // 512 - 强制迁移,即使被认为是不安全的。在某些情况下,libvirt可能会拒绝迁移域,因为这样做可能导致潜在问题,例如数据损坏,因此迁移被认为是不安全的。private static final long VIR_MIGRATE_OFFLINE = 1L << 10; // 1024 - 迁移域定义而不启动目标主机上的域,也不停止源主机上的域。离线迁移需要设置VIR_MIGRATE_PERSIST_DEST。private static final long VIR_MIGRATE_COMPRESSED = 1L << 11; // 2048 - 压缩迁移数据。可以使用VIR_MIGRATE_PARAM_COMPRESSION参数指定压缩方法。如果省略此参数,则将使用虚拟机管理程序的默认方法。可以通过它们特定的VIR_MIGRATE_PARAM_COMPRESSION_*参数调整各个压缩方法。private static final long VIR_MIGRATE_ABORT_ON_ERROR = 1L << 12; // 4096 - 如果在迁移过程中发生软错误(如I/O错误),则取消迁移。private static final long VIR_MIGRATE_AUTO_CONVERGE = 1L << 13; // 8192 - 启用确保实时迁移最终收敛的算法。这通常意味着会减慢域的速度以确保其更改内存的速度不会超过虚拟机管理程序将其更改内存传输到目标主机的速度。private static final long VIR_MIGRATE_RDMA_PIN_ALL = 1L << 14; // 16384 - 当与RDMA迁移一起使用时(即,当VIR_MIGRATE_PARAM_URI以"rdma://"开头时),此标志告诉虚拟机管理程序在迁移开始之前一次性固定所有域的内存,而不是按需固定内存页。private static final long VIR_MIGRATE_POSTCOPY = 1L << 15; // 32768 - 设置VIR_MIGRATE_POSTCOPY标志告诉libvirt启用后复制迁移。但是,迁移将以正常方式开始,并需要调用virDomainMigrateStartPostCopy将其切换到后复制模式。private static final long VIR_MIGRATE_TLS = 1L << 16; // 65536 - 设置VIR_MIGRATE_TLS标志会导致迁移尝试使用虚拟机管理程序配置的TLS环境执行迁移。如果源主机或目标主机配置不正确,则迁移将会失败。private static final long VIR_MIGRATE_PARALLEL = 1L << 17; // 131072 - 通过几个网络连接将内存页发送到目标主机。参见VIR_MIGRATE_PARAM_PARALLEL_*参数以配置并行迁移。private static final long VIR_MIGRATE_NON_SHARED_SYNCHRONOUS_WRITES = 1L << 18; // 262144 - 强制在复制非共享存储迁移时发生的来宾写入同步写入目标。这确保了对于在快速本地存储上进行大量I/O并且镜像较慢的VM,存储迁移能够收敛。private static final long VIR_MIGRATE_POSTCOPY_RESUME = 1L << 19; // 524288 - 恢复在后复制阶段失败的迁移。private static final long VIR_MIGRATE_ZEROCOPY = 1L << 20; // 1048576 - 使用零拷贝机制迁移内存页。对于QEMU/KVM,这意味着QEMU将暂时被允许锁定主机的所有客户机页面,尽管只有排队等待传输的页面才会被锁定。
相关文章:
Libvirt 迁移标志详解
可参考:https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainMigrateFlags 在虚拟化环境中,迁移是一项重要的功能,Libvirt 提供了一系列标志,用于控制迁移过程中的不同行为。以下是 virDomainMigrateFlags 枚举的详细…...
【数据分享】1929-2023年全球站点的逐月平均能见度(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…...
NLP中的嵌入和距离度量
本文将深入研究嵌入、矢量数据库和各种距离度量的概念,并提供示例和演示代码。 NLP中的嵌入 嵌入是连续向量空间中对象、单词或实体的数值表示。在NLP中,词嵌入捕获词之间的语义关系,使算法能够更好地理解文本的上下文和含义。 让我们试着用…...
jsp教务管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 JSP 教务管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…...
基恩士 KV-8000 PLC通讯简单测试
1、KV-8000通讯协议 基恩士 KV-8000 PLC支持多种通讯方式,包括:OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置,Modbus需要调用功能块。默认支持的是上位链路命令,实际是一条条以回车换行结束的ASCII…...
【高质量精品】2024美赛B题22页word版高质量半成品论文+多版保奖思路+数据+前四问思路代码等(后续会更新)
一定要点击文末的卡片,进入后,获取完整论文!! B 题整体模型构建 1. 潜水器动力系统失效:模型需要考虑潜水器在无推进力情况下的行为。 2. 失去与主船通信:考虑无法从主船接收指令或发送位置信息的情况。…...
apache_exporter安装说明
Apache Exporter 问题描述 需要监控apache服务,部署了apache_exporter,对过程进行一下记录。 源码参见apache_exporter ①下载 https://github.com/Lusitaniae/apache_exporter/releases②解压缩 tar -xzvf apache_exporter-0.7.0.linux-amd64.tar…...
代码随想录算法训练营29期Day42|卡码网46,LeetCode 416
文档讲解:背包问题二维 背包问题一维 分割等和子集 46.整数拆分 题目链接:https://kamacoder.com/problempage.php?pid1046 思路: 在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为d…...
java的excel列行合并模版
1.效果 2.模版 <tableborder"1"cellpadding"0"cellspacing"0"class"tablebor"id"TABLE"><tr align"center" class"bg217"><td style"background-color: #008000; color: #ffffff;p…...
【ES数据可视化】kibana实现数据大屏
目录 1.概述 2.绘制数据大屏 2.1.准备数据 2.2.绘制大屏 3.嵌入项目中 1.概述 再来重新认识一下kibana: Kibana 是一个用于数据可视化和分析的开源工具,是 Elastic Stack(以前称为 ELK Stack)中的一部分,由 Ela…...
2024 年十大 Vue.js UI 库
Vue.js 是一个流行的 JavaScript 框架,它在前端开发者中越来越受欢迎,以其简单、灵活和易用性而闻名。 Vue.js 如此受欢迎的原因之一是它拥有庞大的 UI 库生态系统。 这些库为开发人员提供了预构建的组件和工具,帮助他们快速高效地构建漂亮…...
使用esp32 cam + SR602人体感应模块制作一个小型的监控
需求: 做一个小型的监控,类似电子猫眼,监测到人之后,取一张图 然后发送到自己的邮箱。 架构: 1.sr602 传感器监测到人 2. esp32 cam 取图 并通过mqtt协议传到远端服务器 3, 服务器利用python 搭建一个mqtt客户端&…...
vim最简单命令学习
安装vim sudo apt install vim在终端随便打开一个文本文件,或者源文件, vim filepath输入该命令后,从终端进入vim编辑器,此时为普通模式(Normal)。 按i键进入编辑模式(Insert),按Esc键返回普通模式(Normal)。 在编辑…...
论文阅读-通过云特征增强的深度学习预测云工作负载转折点
论文名称:Cloud Workload Turning Points Prediction via Cloud Feature-Enhanced Deep Learning 摘要 云工作负载转折点要么是代表工作负载压力的局部峰值点,要么是代表资源浪费的局部谷值点。预测这些关键点对于向系统管理者发出警告、采取预防措施以…...
Android Studio从零基础到APP上线(3)
第3章 简单控件 本章介绍App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图,容纳视图的常用布局,响应点击的按钮控件,显示图片的图像视图等。然后结合本章所学的知识,演示一个实战项目“简单计算器”的设计与实现。 3.1 文本显示 本节介绍如何在文本视图Tex…...
springboot Feign方式注入注解详解
一、FeignClient注解详解 FeignClient是Spring Cloud中用于声明Feign客户端的注解,它使得编写HTTP客户端变得更简单。通过Feign的自动化配置机制,可以很容易地编写HTTP API客户端。以下是FeignClient的详解: 作用:FeignClient注解…...
自然语言处理(NLP)—— Dialogflow ES聊天机器人
1. 背景介绍 这个实验室的目标是让你了解并使用Google的Dialogflow服务。Dialogflow是一个可以让你创建聊天机器人的服务,这个过程不需要或者只需要很少的编程技能。 1.1 账号的创建 为了完成这个实验室,你需要在以下网站上创建账号:…...
C++俄罗斯方块 -- 菜单展示和选择 -- 方法
short Menu() //选中开始游戏返回1,离开则返回2 {short choice 1;//跟踪用户选中的选项char c; //记录用户按键信息system("cls");SetPos(9, 12); //设置输出坐标,12行9列cout << "┌────────┐";SetPos(9, 13);cou…...
面试150 颠倒二进制位 位运算分治 逻辑右移
Problem: 190. 颠倒二进制位 文章目录 思路复杂度位运算分治法 思路 👨🏫 参考题解 >>>:逻辑右移(符号位一起移动,高位补零) 复杂度 时间复杂度: O ( log n ) O(\log{n}) O(logn) 空间…...
php 函数三
一 对称加密 1.1 openssl 1.1.1 openssl_get_cipher_methods(bool $aliases false) 获取可用的加密算法。包含可用加密算法的array。 请注意:在 OpenSSL 1.1.1 版本之前,返回加密算法的拼法大小写都有; 从 OpenSSL 1.1.1 开始,…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
