我的配置相当复杂。我试图综合一下:
我有 4 个磁盘 (1 个 ssd、2 个 nvme 和 1 个 HDD) 和 4 个操作系统 (3 个 Win10 和 1 个 ubuntu):
- Nvme 1(Win10-1 + Ubuntu 20.04)/dev/nvme0n1
- Nvme 2(Win10-2)/dev/nvme1n1
- HDD 1(仅数据+交换)/dev/sda
- SSD 1(Win10-3)/dev/sdb
该计算机是 UEFI。
一开始我没有遇到任何问题。Grub 显示了我的 4 个启动选项。
但我不得不重新安装 Win10-1,然后我完全失去了 grub。所以我只能通过 Windows 启动管理器在 Win10-1 或 Win10-2 上启动。
我尝试在实时 Ubuntu 上修复 Grub 启动,但成功率不高...实际行为如下:
Boot
|_______Grub
|______*Ubuntu > boots Ubuntu
|______*Windows Boot manager on /dev/nvme1n1
|_______Windows Boot Manager GUI
|______*Win10-1 > boots Win10-1
|______*Win10-2
|_______Grub
|______*Ubuntu > Grub rescue
|______*Windows Boot manager on /dev/nvme1n1 > boots Win10-2
所以这对我来说简直是一团糟,顺便说一句,我失去了在 Win10-3 上启动的能力......
我不知道如何删除 MBR 中这个混乱的启动配置并回滚到这个:
Boot
|_______Grub
|______*Ubuntu > boots Ubuntu
|______*Windows Boot manager on /dev/nvme0n1 > boots Win10-1
|______*Windows Boot manager on /dev/nvme1n1 > boots Win10-2
|______*Windows Boot manager on /dev/sdb > boots Win10-3
是否有一个神奇的工具可以配置这个?
任何帮助/建议都将受到赞赏。
---编辑 1--- 感谢 WaterOfDark 的回答。
我已经经历过这个过程,但没有成功。
此外,Win3 没什么大不了的,因为我可以使用 EFI 选择启动它。我还有 3 个 EFI 分区,分别位于 Nvme1、Nvme2 和 SSD1 上
也许问题出在这些分区上?也许我可以以某种方式重置 EFI 部分的内容,然后再次运行 update-grub?
我必须承认我对 EFI 的东西并不是特别熟悉。
---编辑2---
我确认 Windows 快速启动已禁用
---编辑3---
以下是命令的结果:以下是结果
willy@Ubuntu:~$ sudo efibootmgr
BootCurrent: 0002
Timeout: 1 seconds
BootOrder: 0002,000A,0000,0008,0006,000B,0007
Boot0000* Windows Boot Manager
Boot0002* ubuntu
Boot0006* UEFI: SAMSUNG SSD 830 Series, Partition 2
Boot0007* UEFI: Sabrent Rocket 4.0 1TB, Partition 1
Boot0008* Windows Boot Manager
Boot000A* ubuntu
Boot000B* UEFI OS
willy@Ubuntu:~$ sudo dmidecode -t0 | grep -Ei "BIOS boot|UEFI"
BIOS boot specification is supported
UEFI is supported
答案1
首先感谢大家为我指明了正确的方向,这给了我很好的线索。在阅读了大量有关该主题的资料后,我对该主题有了更好的理解。
以下是我进行操作的细节:
从 Ubuntu 中使用 Gparted,我完全删除了 Nvme2 上的 EFI 分区,并格式化了 Nvme1 上的分区。(带有启动标志)
然后在终端中:
sudo gedit /etc/fstab
替换 EFI 分区的 UID。格式化后会更改。该行应如下所示
UUID=1A2B-3C4D /boot/efi vfat defaults 0 1
,保存 fstab,然后挂载 EFI 分区sudo mount /boot/efi
并重新安装 grub
sudo grub-install
现在,重启后,UEFI 条目不再杂乱,但你只有一个条目:Ubnutu。这里没有更多的 Windows,所以我必须为 Windows 重新创建 EFI 条目
在我发现的很多指南中,都说使用 Windows 启动修复工具,但是:
- 它对我不起作用(可能是因为 Grub?)
- 我不完全知道它的作用是什么以及怎样作用......
所以我手动做了:
在 Windows10 安装媒体上启动 > 选择语言 > 修复计算机 > 高级选项 > 故障排除 > 命令提示符
使用 diskpart 我挂载 EFI 分区并添加字母
diskpart
diskpart>list vol (to display assigned letter to partitions and volume numbers)
diskpart>sel vol 4 (volume number of the EFI partition)
diskpart>assign letter=Z: (or other available letter)
diskpart>exit
然后我使用 bcdboot 在 EFI 分区中创建 Windows 条目
bcdboot D:\Windows /l fr-fr /s Z: /f UEFI (D is the letter of the partition with the first Windows system to boot, here Win10-1)
bcdboot E:\Windows /l fr-fr /s Z: /f UEFI /d /addlast (E is the letter of the partition with the first Win10-2 system)
bcdboot F:\Windows /l fr-fr /s Z: /f UEFI /d /addlast (F is the letter of the partition with the first Win10-3 system)
重新启动时,UEFI 选择中现在有 2 个选择:Grub 或 Windows 启动管理器,但 grub 仍然不认识 Windows。最后,在 Ubuntu 上最后一次启动并执行sudo update-grub
。
以下是启动时的实际行为:
Boot
|_______Grub
|______*Ubuntu > boots Ubuntu
|______*Windows Boot manager on /dev/nvme0n1
|_______Windows Boot Manager GUI
|______*Win10-1 > boots Win10-1
|______*Win10-2 > boots Win10-2
|______*Win10-3 > boots Win10-3
为了更加清晰,我们可以使用 bcdedit 重命名 WBM 中的条目
从任何 Windows 命令提示符:
bcdedit (to list entries and not identifiers)
bcdedit /set {identifier} description "My Custom Windows"
现在它已经非常干净了。但我必须通过 Grub 然后 Windows 启动管理器 GUI 才能在任何 Windows 上启动。所以我继续玩!
我确实再次在 Nvme1 上格式化了 EFI 分区,在 Nvme2 上创建了一个新分区,在 SSD1 上创建了另一个分区(FAT32 分区 100Mo,带有来自 Gparted 的“启动”标志)
在 Nvme1 /boot/EFI 上安装 Grub。
从 Windows10 安装媒体,按照与上述相同的方式,挂载每 3 个 EFI 分区并在每个分区上添加相关的 EFI 条目:
bcdboot D:\Windows /l fr-fr /s Z: /f UEFI /d /addlast (D is system Win10-1 and Z EFI on Nvme1)
bcdboot E:\Windows /l fr-fr /s Y: /f UEFI /d /addlast (E is system Win10-2 and Y EFI on Nvme2)
bcdboot F:\Windows /l fr-fr /s X: /f UEFI /d /addlast (F is system Win10-3 and X EFI on SSD1)
重启后,最终update-grub
从 Ubuntu 执行此操作。现在的行为如下:
Boot
|_______Grub
|______*Ubuntu > boots Ubuntu
|______*Windows Boot manager on /dev/nvme0n1 > boots Win10-1
|______*Windows Boot manager on /dev/nvme1n1 > boots Win10-2
|______*Windows Boot manager on /dev/sdb > boots Win10-3
此外,我现在能够从 UEFI 选择启动任何系统,如果我丢失了 Nvme1 磁盘,我仍然能够从其他磁盘启动
希望这本小说能对其他人有用
答案2
我遇到过类似的问题,我通过 linux-live 版本更新 grub-loader 解决了这个问题。但首先我建议重新运行 Win-3 操作系统。对于您的 Win-3,我假设您以某种方式删除了启动标志。最简单的恢复方法是拔下所有其他“工作”操作系统,以便只连接带有 win-3 的硬盘驱动器 (SSD1),然后使用 Windows 恢复工具(如果正常启动,则使用 Windows Live 系统不要启动修复工具,如果只连接了 win-3 驱动器)来修复启动标志。之后再次连接所有东西并更新 grub。
在 Win-3 工作后,从 linux-live 系统更新 grub。您可以找到有关此操作的详细说明这里。由于同一硬盘上有两个操作系统,因此请确保选择正确的分区。
编辑:
好吧,我想这是 EFI 特有的东西。我发现了一些这里有有用的信息,但它们是德语的。使用实时或已安装的系统来更详细地检查情况以读取 NVRAM
sudo apt-get install efibootmgr
...
sudo efibootmgr -v
Boot0002* Ubuntu HD(1,800,32000,34911255-cfd8-43ce-a600-fb43636a9c2c)File(\EFI\trusty\shimx64.efi)
Boot000X 只是不断增加的数字,并且 * 将其标记为活动的,因此您应该获得至少 2 个带有星号的条目,如果也测试了普通磁盘,则应该获得 4 个带有星号的条目。
您可以运行sudo dmidecode -t0 | grep -Ei "BIOS boot|UEFI"
以查看您的 UEFI 是否支持 CSM(如果是,它将支持 bios 和 UEFI)。
问题可能是,Windows 检查 EFI-Bootloader 中的第一个入口是否是 Windwos,如果不是,它将删除它并用自己的 bootflag 替换。为防止这种情况,建议将其保留在第一位但禁用它。但我想这只适用于 1 个 windosOS。