我正在尝试使用 move-vm 命令在两个 Vcenter(从 6.5 到 7.0)之间交叉迁移 VM,但是出现问题,找不到我的测试 VM,甚至基本的 get-vm 也找不到它。
$global:DefaultVIServers
Name Port User
---- ---- ----
host1.. 443 x.LOCAL\Admini...
host2.. 443 y.LOCAL\Admini...
$destination = 'new-host'
get-vm test-vm
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
test-vm PoweredOff 2 4.000
Move-VM -VM test-vm -Destination $destination
Move-VM : 10/12/2022 7:16:06 AM Move-VM Could not find VirtualMachine with name 'test-vm'.
At line:1 char:1
+ Move-VM -VM test-vm -Destination $destination
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (test-vm:String) [Move-VM], VimException
+ FullyQualifiedErrorId : Core_ObnSelector_SelectObjectByNameCore_ObjectNotFound,VMware.VimAutomation.ViCore.Cmdlets.Commands.MoveVM
Move-VM : 10/12/2022 7:16:06 AM Move-VM Value cannot be found for the mandatory parameter VM
At line:1 char:1
+ Move-VM -VM test-vm -Destination $destination
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Move-VM], VimException
+ FullyQualifiedErrorId : Core_BaseCmdlet_UnknownError,VMware.VimAutomation.ViCore.Cmdlets.Commands.MoveVM
尝试使用 -Server 选项:不起作用,看起来我只能在整个命令中使用此选项一次
Move-VM -VM test-vm -server 'host1' -Destination $destination -Server 'host2'
Move-VM : Cannot bind parameter because parameter 'Server' is specified more than once. To provide multiple values to parameters that can accept multiple values, use the array syntax. For example, "-parameter value1,value2,value3".
At line:1 char:98
答案1
如果要将虚拟机从 vCenter A 移动到 vCenter B,请使用VMware 转换工具。
您可以毫无问题地启动虚拟机。此外,还有一个测试版程序,也许您可以尝试新工具。请注意虚拟机客户操作系统,因为 vSphere 7 上已弃用某些操作系统。
答案2
在您当前的配置中,无法进行迁移。
VMware VM 迁移到另一个 vCenter 的要求
- 源和目标 vCenter Server 实例和 ESXi 主机必须运行 6.0 或更高版本。
是的 - 源 vCenter 和目标 vCenter 应该是同一版本。
不 - 跨 vCenter Server 和长距离 vMotion 功能需要 Enterprise Plus 许可证。
未知 - 使用 vSphere Web Client 时,两个 vCenter Server 实例都必须处于增强链接模式,并且必须位于同一个 vCenter 单点登录 (SSO) 域中,以便源 vCenter Server 可以对目标 vCenter Server 进行身份验证。
不
如您所见,在当前配置中,简单的直接迁移是不可能的。如果您拥有 Enterprise Plus 许可证,您可以更新 6.5 vCenter 并将其链接到其他 vCenter,然后迁移应该可以进行。
否则,您可以手动迁移(关闭 VM、从 vCenter 中删除、根据需要将文件移动到新的数据存储、注册 VM、打开 VM),也可以使用 VMware 转换器进行转换(为此也必须关闭 VM)。
答案3
对于 move-vm cmdlet,-VM 参数必须是 VM 对象,而不仅仅是 VM 的名称。因此它应该像这样工作:
$vm = get-vm test-vm
Move-VM -VM $vm -Destination $destination
请查看 move-vm 的在线帮助,了解其他示例,例如使用管道等:
get-help move-vm -examples
答案4
由于两个 Vcenter 共享相同的数据存储,因此对我来说,此解决方案最有效:
保存虚拟机 vmx 路径文件,例如
Get-VM | Select Name, @{N="VM Config File";E={$_.extensiondata.config.files.vmpathname}}
在 Vc1 上取消注册虚拟机
在 Vc2 上注册虚拟机:
New-VM -VMFilePath '<PATH>' -ResourcePool 'Cluster'