使用 Power Shell 修改 Hyper-V 虚拟机 UUID 的解决方案
前言
在研究了一下午 k8s 文档的时候,正准备开干,万万没想到一个 uuid 的问题卡了我几个小时,一直想在系统中解决,没想到最后在外部使用PowerSheel解决了,分享记录一二
问题描述与尝试解决
- 根据官方文档 使用 kubeadm 创建 k8s 集群的准备,所以准备在之前文章中使用 Hyper-V 安装的 CentOS8.5 的虚拟机搭建
需要确保每个节点上 MAC 地址和 product_uuid 的唯一性
可以使用命令ip link或ifconfig -a来获取网络接口的 MAC 地址
可以使用sudo cat /sys/class/dmi/id/product_uuid命令对 product_uuid 校验
- 检查 mac 地址,因为之前就修改过IP,在Hyper-V管理器中就可以看到是不一样

- 接着检查 product_uuid,使用了之前安装的jumpserver批量执行了下,好家伙,都一样

- 于是问了 ChatGPT 后开始修改

- 然后,好家伙,无权限

- 然后,就结合 GPT 和搜索找寻答案,尝试了 禁用 SELinux,修改文件权限,修改 GRUB 配置,未果
- 终于,皇天不负有心人,在我不听换搜索词后,还是让我找到了一篇看得到的博客 PowerShell修改Hyper-V虚拟机的UUID
- 尝试了文章引用的国外大佬的工具,发现已经无法运行,好在博主提供了一个可以直接使用的脚本
- 下面结合个人实践来做一些补充说明
使用 PowerShell 查询虚拟机UUID
- 系统:win10
- HyperV版本:10.0.19041
- 虚拟机名称:devops01
- 通过查询验证可行性,修改名称为自己的虚拟机名,使用 PowerSheel(管理员) 执行命令即可查询到
Get-VM "devops04" | % { (gwmi -Namespace root\virtualization\v2 -Class msvm_computersystem -Filter ('ElementName="{0}"' -f $_.Name)).GetRelated('msvm_virtualsystemsettingdata') | select BIOSGUID }

- 检查点会影响查询结果,所以优化了一下,可以使用这个来查询
(Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemSettingData -Filter "ElementName='devops04'").BIOSGUID
关闭虚拟机!
重要,尝试了两次,确认需要在虚拟机关闭的时候执行才有用
执行命令
- 修改虚拟机名称变量:devops04 为你的虚拟机名称
- 然后直接粘贴下面命令到 PowerShell 终端执行即可
- 也可以存为.ps1 文件执行
#这里假设虚拟机的VMname是devops01,自行替换即可
$VMname="devops04"
$vmx = Get-WmiObject -Namespace root\virtualization\v2 -Class msvm_virtualsystemsettingdata
#每次操作选择一台虚拟机
$CurrentSettingsData = $vmx | Where-Object { $_.ElementName -eq $VMname }
#检查一下老的GUID
$CurrentSettingsData.BIOSGUID
#生成新GUID
$GUID = [System.Guid]::NewGuid()
#重新写入GUID,注意要带{},这是非常重要的细节
$CurrentSettingsData.BIOSGUID = "{" + $GUID.Guid.ToUpper() + "}"
#生成一个ModifySystemSettings的空对象
$VMMS = Get-WmiObject -Namespace root\virtualization\v2 -Class msvm_virtualsystemmanagementservice
$ModifySystemSettingsParams = $VMMS.GetMethodParameters('ModifySystemSettings')
#配置这个属性,需要特殊的转换方式
$ModifySystemSettingsParams.SystemSettings = $CurrentSettingsData.GetText([System.Management.TextFormat]::CimDtd20)
#写入
$VMMS.InvokeMethod('ModifySystemSettings', $ModifySystemSettingsParams, $null)
- 执行成功,再次查询uuid也已经更新

- 开机启动使用命令查询Linux发现已经变更,因为UUID的表示形式是不区分大小写的,因此大小写字母的顺序不会影响其唯一性。所以看到一个大写,一个小写其实没关系

将所有虚拟机执行完一遍后,检查可以看到已经成功修改

结语
习惯了 ChatGPT 的便捷,发现 Google 的次数都变少了,关键词一开始没有找准走了一点弯路,找资料的过程发现挺多人遇到这个问题,遂再次记录。
参考文档
使用 Power Shell 修改 Hyper-V 虚拟机 UUID 的解决方案的更多相关文章
- Windows Power Shell
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能. 它引入了许多非常有用的新概念,从而进一步扩展了您在 W ...
- Hyper V NAT 网络设置 固定IP / DHCP
Hyper V 默认的Default Switch同时支持了NAT网络以及DHCP,虚拟机能够访问外网. 但使用过程中发现这个IP网段经常变化,而且Hyper V没有提供管理其NAT网络与DHCP的图 ...
- windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理
windows server 2008 r2 企业版 hyper v做虚拟化的相关问题处理 今天在dell r710 上用windows server 2008 r2企业版hyper v 做虚拟化,添 ...
- SQL Server自动化运维系列——监控性能指标脚本(Power Shell)
需求描述 一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控 监控值范围 根据经验,作为DBA一般需 ...
- SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...
- SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...
- win7 升级Power Shell到4.0
因为用到EntityFrameworkCore ,想使用scaffold 来生成models. 提示我power Shell 2.0不支持命令,然后需要升级PS. PS win7 升级文件下载地址是 ...
- SQL Server 自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...
- NETCore执行Shell修改Centos系统IP信息
原文:NETCore执行Shell修改Centos系统IP信息 目录 shell代码 NETCore执行Shell文件 注意事项 shell代码 首先通过find命令找到/etc/sysconfig/ ...
- C#调用Power Shell 管理Office365 执行脚本时遇到的问题
Power Shell管理Office参考http://www.mamicode.com/info-detail-494553.html C#调用Power Shell 参考 https://www. ...
随机推荐
- MySQL高级9-锁
一.简介 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除了传统的计算资源(CPU.RAM.i/O)的挣用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性,有效性 ...
- dp_ppi转光纤模块连接200PLC组态王通信案例
DP_PPI转光纤模块连接200PLC组态王光纤通信在冷却塔控制系统案例 现场背景介绍: 西门子200 CPU226PLC通过兴达易控dp转光纤模块在200PLC系统中ppi转光纤实现PCL与组态王2 ...
- Vue element-ui 动态生成自定义table表头实现数据渲染
需求:1)表头的数据是动态的,有可能字段值很长且很多.解决方案自定义动态表头,字段长使用文字提示[el-tooltip组件]: 2)需要对表格data中的数据值进行枚举转成中文值,且显示不同的颜色. ...
- 文心一言 VS 讯飞星火 VS chatgpt (99)-- 算法导论9.3 5题
五.用go语言,假设你已经有了一个最坏情况下是线性时间的用于求解中位数的"黑箱"子程序.设计一个能在线性时间内解决任意顺序统计量的选择问题算法. 文心一言: 为了在线性时间内解决任 ...
- 利用SpringBoot项目做一个Mock挡板;基于事件发布动态自定义URL和响应报文
导入SpringbootWEb依赖 <!--web项目驱动--> <dependency> <groupId>org.springframework.boot< ...
- Arduino基础入门之三按键开关
目的:通过读取按键开关的信号,实现其他器件的控制 难点:下拉电阻和上拉电阻 一.关于按键开关 按键开关如上图[1]所示,但我拿到实物,最令我头疼的是按钮下边4个角,我不知那两边是相通的(就是和图中12 ...
- 一场3天前的cf
啊 这次的cf其实水的(指前4题) 题面就不给了awaT1其实就是一个贪心,其实手模一下就好了.可以发现,先让小的那个变大,然后在后面一直让小的加上大的统计一下次数就是答案了.因为如果是这样算的话,两 ...
- mybatis-plus使用心得
mybatis-plus是一款基于mybatis的持久层框架,在mybatis上只做增强不做改变.基本使用流程: 导入依赖坐标: <dependency> <groupId>c ...
- .NET周刊【10月第3期 2023-10-22】
国内文章 .NET 8 RC 2 发布,将在11月14日发布正式版 https://www.cnblogs.com/shanyou/p/17756172.html 微软于2023年10月10日发布了. ...
- 一个Unity富文本插件的实现思路
项目中原来的富文本组件不太好用,做了一些修改,记述主要思路.缺陷很多. 仅适用于没用TextMeshPro,且不打算用的项目,否则请直接用TextMeshPro 原组件特点: 使用占位符模式,创建新的 ...