核心是用VBoxManage将关机状态的VDI无损克隆为VHD,再升级为VHDX;必须选对虚拟机代数(第1代对应BIOS/MBR,第2代对应UEFI/GPT)、启用匹配的安全启动,并将磁盘挂载至SCSI控制器以确保兼容启动。

将VirtualBox虚拟机镜像无损转换为Hyper-V可用的VHDX格式,核心是保留原始分区结构、引导记录和全部数据,避免因格式不兼容导致启动失败或文件损坏。必须确保源VDI已关机且未挂起,否则转换出的磁盘可能无法引导。
准备与检查
关闭VirtualBox中目标虚拟机:点击“关闭”→选择“关闭电源”,【不可点“保存状态”或“发送关机信号”】,否则VDI仍处于写入挂起状态,转换后大概率蓝屏或黑屏。
确认VirtualBox安装路径:默认为 C:\Program Files\Oracle\VirtualBox,若自定义安装需记下实际路径;打开Windows终端(管理员),输入 cd /d "C:\Program Files\Oracle\VirtualBox" 切换目录。
启用Hyper-V平台:按 Win+R 输入 optionalfeatures.exe → 勾选“Hyper-V 平台”“Hyper-V 管理工具”→重启电脑。未启用则后续无法挂载或验证VHDX。
用 VBoxManage 转 VHD(必经一步)
在管理员终端中执行以下命令:
VBoxManage.exe clonemedium disk "D:\VMs\Ubuntu\Ubuntu.vdi" "D:\VMs\HyperV\Ubuntu.vhd" --format VHD
注意替换双引号内的路径为你的真实VDI位置和期望输出VHD路径;该命令是唯一官方支持的无损转换方式,不依赖第三方工具,也不修改原始VDI内容。
等待命令完成(进度条无显示,但光标会恢复闪烁),生成的.vhd文件大小与原始.vdi基本一致,说明扇区级克隆成功。
升级为 VHDX(推荐)
方法一:用 Hyper-V 管理器图形化转换
打开 Hyper-V 管理器 → 右侧“操作”栏点击「编辑磁盘」→ 下一步 → 浏览选中刚生成的 .vhd 文件 → 下一步 → 选择「转换」→ 下一步 → 格式选「VHDX」→ 类型选「动态扩展」或「固定大小」→ 指定新文件路径(如 D:\VMs\HyperV\Ubuntu.vhdx)→ 完成。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
方法二:用 PowerShell 一键转换(更快更可控)
管理员 PowerShell 中运行:
Convert-VHD -Path "D:\VMs\HyperV\Ubuntu.vhd" -DestinationPath "D:\VMs\HyperV\Ubuntu.vhdx" -VHDType Dynamic -Confirm:$false
加 -VHDType Fixed 可生成固定大小VHDX,适合IO敏感场景;【务必确保目标盘剩余空间 ≥ 原始VDI已用空间 × 1.3】,否则转换中途失败且已写入部分不可逆回滚。
挂载验证与启动适配
第一步:右键新生成的 .vhdx 文件 → “挂载”,打开“磁盘管理”,确认能看到系统分区(如 C:)和 EFI 系统分区,且状态为“状态:正常”。
第二步:在 Hyper-V 中新建虚拟机 → 类型选第2代(UEFI 启动必需,否则 Windows/Linux 都无法识别GPT磁盘)→ 内存/处理器按需配置 → 到“连接虚拟硬盘”页 → 选择“使用现有虚拟硬盘” → 浏览并指定你的 .vhdx 文件。
第三步:启动前检查关键设置:进入虚拟机设置 → “安全”选项卡 → 确保“启用安全启动”为“Microsoft UEFI Certificate Authority”;若原VirtualBox虚拟机是 BIOS 启动(MBR分区),则此处需改为“禁用安全启动”,并在新建时选第1代虚拟机。
启动虚拟机,首次进入可能需要数分钟加载驱动;若卡在黑屏或光标闪烁,立即关机 → 进入设置 → “IDE控制器”移除 → 添加“SCSI控制器” → 将.vhdx挂到SCSI上再试——这是VirtualBox转Hyper-V最常被忽略的控制器兼容性问题。










