我正在尝试在 Windows 10 主机下设置 VMware 虚拟机。
我目前有 1 个硬盘分成 2 个分区,目前使用 Ubuntu 双启动。
我想在 Windows 主机上将 Ubuntu 作为客户机安装。
我一直尝试使用 VMware 下的物理磁盘选项设置 Ubuntu 分区(我尝试过 IDE、SCSI、Sata)。如果我告诉 VMware 使用整个磁盘,我将收到“当前磁盘正在使用中”消息。如果我仅选择相关的 Linux 分区,它将显示“找不到操作系统”。
奇怪的是,我的 Linux 分区在“文件系统”列下显示为“Efi 系统”,而我以为在“文件系统”下应该显示“Linux”。我是否应该先尝试将该分区的文件系统更改为 Linux 而不是 Efi?(我该怎么做?)
即使 Ubuntu 分区与主机位于同一硬盘上,VMware 也应该能够让我以客户机身份运行它,对吗?
编辑:澄清一下,以上信息由 VMware-Workstation 报告。
然而,在 Ubuntu Gparted 下我的分区如下所示:
我当前的 SSD 硬盘目前是这样设置的(根据 Linux GParted)
- /dev/nvme0n1p1 ntfs (诊断)
- /dev/nvme0n1p2 fat32 (启动,esp)
- /dev/nvme0n1p3 未知 (msftres) [Microsoft 保留分区,无论它是什么]
- /dev/nvme0n1p4 ntfs (msftdata) [这是 Windows 10 分区]
- /dev/nvme0n1p5 ext4 (boot, esp) [这是我的 Ubuntu 分区]
- /dev/nvme0n1p6 linux-交换
- /dev/nvme0n1p7 ntfs (隐藏,诊断)
GParted 还报告挂载点 / 位于 nvme0n1p5 上,挂载点 /boot/efi 位于 nvme0n1p2 上。
[现在我很困惑,我的 Ubuntu 机器是从 nvme0n1p5(带有标志 boot)还是 nvme0n1p2(带有挂载点 /boot/efi)启动的?]
无论如何,我已尝试将两个分区附加到 Windows 10 VMWare-Workstation 的物理磁盘硬盘选项,但机器仍然无法启动客户机 Ubuntu。
我可以进行双启动(通过在 BIOS 中切换“硬盘顺序”-[即使只有一个硬盘!]),但我想要做的是从 Windows 中启动并运行 Ubuntu 分区。
编辑2:
我想我可能对这个问题有了更多的理解:
- 首次启动时,我选择 Windows 10 EFI 作为启动选项
- 在 Windows 中,我设置了一个虚拟机来运行当前作为主机运行的同一硬盘中的第二个分区
- 但要启动第二个分区,我必须告诉虚拟机安装程序运行与(1)相同的 EFI 启动管理器
- 它无法运行 EFI 启动管理器(是否正在使用?)并将我带入内部 EFI shell
- 从 EFI Shell 我可以选择一个文件系统并进入 /efi/boot 并在那里看到一些 .efi 文件,但我不知道如何从这些 .efi 文件启动。
谁能告诉我如何从内部 EFI Shell 启动 .efi 文件?
答案1
其中的一些问题已在评论中得到解决,而且我也不是 VMware 产品专家,但是:
您的第一个问题是 上的分区类型代码/dev/nvme0n1p5
。根据您的parted
总结,此分区已设置其“boot, esp”标志。(出于离题的原因,“boot”和“esp”是指代同一事物的冗余标志名称,因此它们总是一起出现在 的最新版本中parted
。)在 中parted
,GPT 磁盘上的“标志”可以是分区属性或分区类型代码,而“boot, esp”标志是 的类型代码EFI 系统分区 (ESP)。此标志应该不是可以在 Linux 根 ( /
) 分区上设置 - 或者在任何其他仅限 Linux 的分区上设置。正如我链接到的 Wikipedia 页面所解释的那样,ESP 是一个 FAT 分区,它保存所有操作系统的引导加载程序和相关文件。您/dev/nvme0n1p5
应该使用 Linux 文件系统数据类型代码,它parted
表示在具有 Linux 文件系统的分区上没有分区类型代码标志。
至少,您需要授予 VMware 对 和 的访问权限/dev/nvme0n1p2
,/dev/nvme0n1p5
但您可能还想授予 的访问权限/dev/nvme0n1p6
,因为这是 Linux 交换空间。修复此分区访问问题并不能解决您的整体问题,但它可能是必要的先决条件。
对于其余的人,我强烈建议你阅读一些关于基于 EFI 的计算机如何启动的内容。具体来说,请阅读以下至少一篇,最好是全部三篇:
- Adam Williamson 的博客文章介绍了 EFI 的工作原理—— 本页描述了 EFI 模式启动背后的理论。
- Superuser.com 上关于 BIOS 和 EFI 启动之间的区别的问答—— 这提供了前面内容的基础,但更加简洁。
- 我的 Linux EFI 引导加载程序页面-- 本页介绍了 Linux 系统的 EFI 引导加载程序选择。请阅读介绍页面和有关 EFI 引导加载程序原理和安装的子页面;除非您有兴趣安装非标准的东西,否则您可以跳过有关特定引导加载程序的大部分页面。
您描述的内部 EFI shell 类似于 DOS 提示符、Windows 中的命令提示符窗口或 Linux 中的 Bash shell。您可以使用诸如cd
更改目录ls
或dir
查看文件等命令;大多数这些命令都是从 DOS/Windows 或 Unix 借用的。EFI 程序(包括 EFI 引导加载程序)都有.efi
扩展,您可以通过键入其名称来运行它们,如下所示:
bootloader.efi
Ubuntu 将其 EFI 引导加载程序安装为EFI\ubuntu\grubx64.efi
,尽管这通常是通过名为 的预引导加载程序启动的。Shim 由 Microsoft 的安全启动密钥签名,并扩展计算机的安全启动子系统以启用 GRUB 和 Linux 内核进行启动。如果您的虚拟化环境设置为启用安全启动,则shimx64.efi
需要通过 启动。如果没有,您可以运行或。shimx64.efi
shimx64.efi
grubx64.efi
一个复杂因素是,如果磁盘视图与原始磁盘不匹配,GRUB 可能会卡住——也就是说,如果实际分区 5 看起来是分区 2,GRUB 可能会崩溃并拒绝工作。如果发生这种情况,我建议至少为一个环境(真实环境与虚拟化环境)切换到另一个引导加载程序。如果每个环境都使用自己的引导加载程序,那么它们的配置可以大不相同,并且两个环境不会相互影响。此外,一些引导加载程序不会关心更改的分区号。我的rEFInd 启动管理器,例如。不过我想强调的是,我不知道如果 GRUB 出现问题。其配置文件通常包含对分区号的引用(这表明它可能出现问题),但它还包含可能覆盖这些分区号的“搜索”命令(这表明它可能没问题)。另外,我不知道 VMware 如何管理分区映射;它们可能会保留相同的分区号,在这种情况下应该不会出现问题。
另一个问题是主机操作系统是否允许您映射 ESP,因为它可能正在使用或禁止映射。如果是,您可能需要创建一个虚拟磁盘或另一个分区作为虚拟环境的 ESP。然后,您可以将引导加载程序从真实 ESP 复制到虚拟 ESP,或在那里安装不同的引导加载程序。
最后,正如我推荐的读物中所述,基于 EFI 的计算机依靠 NVRAM 驻留数据来定位引导加载程序。大多数虚拟化软件都会创建“假”NVRAM 数据,因此除非您创建新的 NVRAM 条目来指向引导加载程序,否则 VM 将无法正常启动。您可以使用 EFI shell 启动一次操作系统,但随后您需要向 VM 注册引导加载程序。在 Ubuntu 中,您可以使用以下命令efibootmgr
执行此操作:
sudo efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\grubx64.efi -L ubuntu
\EFI\ubuntu\grubx64.efi
此示例在 Ubuntu 上记录/dev/sda1
为引导加载程序。您必须根据需要更改设置的详细信息。请注意,磁盘和分区 ID 是虚拟机中的,而不是主机环境中的。
需要注意的是,有些虚拟机在关闭时会“忘记”它们的 NVRAM 条目。例如,VirtualBox 就是这种情况。我不知道 VMware 是否做得更好。如果没有,您可能需要将引导加载程序复制到EFI\BOOT\bootx64.efi
ESP 上的后备文件名 ()。这种方法在我的 EFI 引导加载程序页面中有更详细的描述,我想 Adam Williamson 的博客中也有更详细的描述。
答案2
我遇到了类似的问题,但是 Dell Precision 7730 中有两个 NVMe 驱动器。
我在一个 NVMe 上安装了 Ubuntu 21.04,在另一个 NVMe 上安装了 Windows 20H2。我想在 Windows 版 Workstation 16.1 中创建一个 Ubuntu VM,并将整个现有的 Ubuntu NVMe 分配为 Ubuntu VM 的物理磁盘。
问题是,由于 Ubuntu NVMe 已经有一个 EFI 分区,Windows 的行为是自动将其 EFI 数据安装在同一位置。这导致 VMware Workstation 无法使用整个 Ubuntu NVMe,因为 EFI 分区与 Windows 相关联。
我在 Windows 磁盘管理中尽可能缩小了 Windows 驱动器(分区越小,移动速度越快),并使用 Ubuntu live USB 在 Gparted 中将分区 500 MB 移向末尾。还有一个 16 MB 分区,我将其向右移动了 500 MB(向末尾移动)。
我使用 Gparted 在 Windows NVMe 上创建了一个 500 MB 的分区(在通过移动两个分区创建的 500 MB 空间中),将其格式化为 FAT32 并将分区标志设置为“esp”。
然后,我创建了 /mnt/nvme0 和 /mnt/nvme1 文件夹,并将 Ubuntu NVMe 的 EFI 分区挂载到 /mnt/nvme0,将新的 Windows EFI 分区挂载到 /mnt/nvme1。我分别将 /mnt/nvme0/“System Volume Information”文件夹和 /mnt/nvme0/EFI/BOOTX64.EFI 移动到 /mnt/nvme1/“System Volume Information”和 /mnt/nvme1/EFI/BOOTX64.EFI。
我重新启动 Ubuntu Live USB,并检查 BIOS 中 Windows 启动管理器的位置,以确保它会从新的 EFI 分区加载。然后,我启动 Windows 并在 Workstation 中编辑虚拟机。
我目前正在使用的设置如下:
Hard Disk (NVMe): Using device \\.\PhysicalDrive0
Disk file: C:\Users\user\Virtual Machines\Ubuntu-NVMe\Ubuntu-NVMe.vmdk
Disk information:
Device: \\.\PhysicalDrive0
Access: Using whole disk
Capacity: 238.5 GB
当我尝试将 SCSI 用于物理磁盘时,Workstation 警告我运行速度可能会非常慢,因此我选择了 NVMe - 但无论如何,这最有意义,因为它实际上是一个 NVMe 驱动器。
一切正常运行 - 工作站可以“接管”整个 NVMe 驱动器,现在每个驱动器都有自己独立的 EFI 分区,并从 EFI 和启动分区启动 Ubuntu,利用交换,并访问根目录,就像驱动器从裸机启动一样。
我要提到的一个警告是,我还没有尝试使用此配置来拍摄快照,但我认为这要么是不可能的,要么在空间消耗方面成本非常高,所以我没有费心去测试它。因此,如果我要从头开始再次执行此操作,我可能会选择 ZFS 作为根文件系统,因为它具有快照功能。