Hyper-V 使用现有 .vhdx 创建 VM

Hyper-V 使用现有 .vhdx 创建 VM

我在 Windows 10 上使用 Hyper-V 管理器。我创建了一个虚拟机和一个虚拟硬盘,并在其上安装了操作系统和其他软件。

现在我正尝试将此硬盘用于其他虚拟机。我已将其复制到另一个位置,在创建新虚拟机时,我将此副本指定为现有驱动器。当我启动新虚拟机时,出现黑屏,显示PXE Network Boot using IPv4 (ESC to cancel) Performing DHCP Negotiation....。几分钟后,我又出现黑屏,显示DHCP failedno x64-based UEFI boot loader was found

我遗漏了什么?

我创建了第二代虚拟机,并且我还禁用了安全启动选项,如果重要的话...创建时我使用了相同的设置,我只更改了新虚拟机的主机名。

答案1

要基于现有 VHDX 创建虚拟机,请执行以下操作:

  1. 创建虚拟机,照常设置其名称、位置、RAM 分配、网络交换机,直到进入“创建硬盘”屏幕。在这里,选择“稍后附加硬盘” 稍后附加
  2. 接下来,打开虚拟机设置并转到 iSCSI 控制器。在此处添加新硬盘,并指向 VHDX 副本的存储位置 选择你的硬盘
  3. 我相信这就是你被困住的地方。添加硬盘后,你的启动项仍将设置为网络 -> 硬盘。你需要反转此设置。前往固件,选择“硬盘”。然后点击右侧的“上移”。应用更改,然后点击确定。 提升

您的虚拟机现在应该启动到驱动器上的操作系统

答案2

我遇到的问题是我在 .vhdx Ubuntu 上安装了。如果 .efi 文件不存在,这个操作系统似乎不会自动创建它(.efi 是 VM 启动的文件)。因此,解决方案是:

 1. add DVD drive to the VM
 2. specify the same image file from which is loaded the OS on the .vhdx
 3. boot in rescue mode
 4. after a few quick setups(language, time zone, etc.), you'are asked 
for device to use as root file system, then choose **/dev/sda2/** 
(I'm not sure why is that :( )
 5. click Yes to mount separate /boot/efi partition
 6. from the rescue operation menu, choose 
**Force GRUB installation to the EFI removable media path**
 7. confirm this choice 
 8. you are ready to reboot and disconnect the image file :)

该解决方案的主要来源:https://blog.jhnr.ch/2017/02/23/resolving-no-x64-based-uefi-boot-loader-was-found-when-starting-ubuntu-virtual-machine/

答案3

当 UEFI 启动时,它会搜索存储在 NVRAM 中的启动变量(它在 Hyper-V 中模拟)并搜索任何启动变量。当您创建新的 VM 时,其 NVRAM 为空,并且 UEFI 不知道磁盘上哪个文件可用作引导加载程序。您必须手动创建启动条目(在 Hyper-V 中显示为文件启动选项)。Hyper-V 无法从主机执行此操作,但您可以从客户机本身执行此操作。您只需要知道引导加载程序位于何处。它something.efi(通常bootx64.efi)是位于 EFI 系统分区(ESP)某处的文件,该分区是普通的 FAT32 分区并包含一些文件。在 Linux 中,此分区挂载到 /boot 目录。您可以在原始机器上查找它。例如对于 debian 它在EFI/debian/shimx64.efi,但您可以尝试在原始安装有 linux 的计算机上查找并尝试在 /boot 文件夹中找到的任何 efi 文件。

您需要使用 UEFI Shell(又名 EDK II)创建小型可启动媒体,并使用它手动创建启动项。您可以按照以下方式进行操作。

1) 从以下网址下载最新版本的 EDK II UEFI SHELL(撰写本文时,其名称为 ShellBinPkg.zip)GitHub

2)使用磁盘管理器创建新的小型 VHDX 磁盘(容量 100MB 就足够了)。

创建 VHDX 创建 VHDX

3)初始化该磁盘。

初始化磁盘 初始化磁盘

4)创建新的FAT32分区

创建 FAT32 创建 FAT32 创建 FAT32 创建 FAT32

5)在新创建的分区中(在我的情况下字母是 E:,如您在前面的屏幕截图中所见)创建目录EFIEFI\boot

6)从下载的 zip 存档中将UefiShell/X64/Shell.efi文件复制到EFI\boot文件夹并将其重命名为bootx64.efi

7)分离虚拟磁盘。

从主机分离 VHDX 从主机分离 VHDX

8)将虚拟磁盘添加到您的虚拟机。

将 VHDX 附加到虚拟机 将 VHDX 附加到虚拟机

9)暂时禁用虚拟机的安全启动。

暂时禁用安全启动

9)转到固件选项卡并将 edkii.vhdx 移动为第一启动选项。

引导顺序设置 引导顺序设置

10) 启动虚拟机。您将看到 EDK II UEFI SHELL。

电喷外壳

11)输入包含引导加载程序路径的以下命令。

bcfg boot add 0 fs0:\EFI\debian\shimx64.efi` NAME_OF_DISTRIBUTION

EFI SHELL 添加启动选项命令

12) 使用reset命令重新启动。现在您将成功启动,并且在 Hyper-V 中的固件设置中,您将看到所需的文件启动选项。

文件启动选项

13)分离带有 EFI 外壳的磁盘并恢复 SecureBoot 设置。

相关内容