在研究了一下午 k8s 檔案的時候,正準備開幹,萬萬沒想到一個 uuid 的問題卡了我幾個小時,一直想在系統中解決,沒想到最後在外部使用PowerSheel解決了,分享記錄一二
需要確保每個節點上 MAC 地址和 product_uuid 的唯一性
可以使用命令ip link
或ifconfig -a
來獲取網路介面的 MAC 地址
可以使用sudo cat /sys/class/dmi/id/product_uuid
命令對 product_uuid 校驗
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
重要,嘗試了兩次,確認需要在虛擬機器器關閉的時候執行才有用
#這裡假設虛擬機器器的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)
習慣了 ChatGPT 的便捷,發現 Google 的次數都變少了,關鍵詞一開始沒有找準走了一點彎路,找資料的過程發現挺多人遇到這個問題,遂再次記錄。