浅仓透透 发表于 2021-9-17 12:14

多系统下的启动问题,以及如何干掉 Windows Boot 求教

本帖最后由 浅仓透透 于 2021-9-17 12:17 编辑

因为以前用台式机的时候装系统我都是独立硬盘装,然后用F12直接选硬盘启动的。
最近装笔记本,在一个硬盘上装了多系统,有点疑问想来问问。

前提:
GPT 分区 + UEFI引导 关闭了安全启动
按照顺序安装了系统,Win10_A   Win10_BUbuntu 20.04

目前的启动状态为:
BIOS 里可以看到的启动信息为 1 Ubuntu ,2 Windows Boot ManagerGRUB 看到的也一样

Ubuntu 使用的是 GRUB 2.04 ,Boot文件夹挂载在根目录。Esp/efi/ubuntu 下是Ubuntu的引导文件,引导读取根目录boot下启动配置。
Windows Boot Manager 启动以后可以选择Win10_A,或者Win10_B。选择A直接启动,选择B要重启,进入GRUB选择Win Boot 再选择Win10_B才能启动。

我现在知道:   
efi\boot\bootx64.efi是Win10在不使用多系统情况下,默认引导文件
efi\microsoft\boot\bootmgfw.efi是在多系统情况下,进入windows Boot Manager 的引导文件

————————————分割线————————————————
我的目标是:
直接通过GRUB 有3个选项,UbuntuWin10_A Win10_B 可以让我直接启动
或者在主板Boot 启动选项里出现Ubuntu Win10_A Win10_B,而不是 Windows Boot Manager

以此带来的疑问是:
GRUB 应该怎么修改……
主板Boot是怎么检测到有几个启动选项的,怎么干掉Windows Boot

——————————————
有点复杂也有点折腾,基本找不到相似的问题。
文档也看得头很大了。。来看看有没有高人教我



浅仓透透 发表于 2021-9-17 12:16

这哪冒出来的附件。。

Damenly 发表于 2021-9-17 12:19

本帖最后由 Damenly 于 2021-9-17 12:33 编辑

$ grep -A 5 Windows /boot/grub/grub.cfg
menuentry 'Windows 10' {
    search --fs-uuid --no-floppy --set=root 1881-6DFB
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

submenu 'Advanced options for Arch Linux' $menuentry_id_option 'gnulinux-advanced-6f96ecaf-a75d-4a9a-8695-b51f115da1a2' {nvme1n1
├─nvme1n1p1 ntfs         Recovery 7C448075448033C4
├─nvme1n1p2 vfat   FAT32          1881-6DFB
├─nvme1n1p3
└─nvme1n1p4 ntfs                  643082F23082CB0E
$ mout /dev/nvme1n1p2 /mnt

$ sudo mount /dev/nvme1n1p2 /mnt
$ ls /mnt/EFI/Boot/bootx64.efi
/mnt/EFI/Boot/bootx64.efi

单windows是这样,多windows没试过

macos 发表于 2021-9-17 12:27

bcd菜单模式没选对,不要metro菜单,就不会不同win切换重启

macos 发表于 2021-9-17 12:28

本帖最后由 macos 于 2021-9-17 12:29 编辑

如果直接用grub,增加多一个esp分区,在grub加启动项,在bcd删掉多余的

litel 发表于 2021-9-17 12:31

2个或者3个boot分区不就行了。。。1个boot分区1个系统引导,然后BIOS里就能显示3个菜单,如果不显示,用bootice编辑uefi列表加三个菜单。

litel 发表于 2021-9-17 12:32

win10的快速启动都要关掉,否则某个系统处于快速启动状态关机,此时进入另一个系统会出问题。

5long 发表于 2021-9-17 13:55

主板Boot是怎么检测到有几个启动选项的

是由用户层软件主动告知的
一个启动项的内容至少包括:

* .efi 文件的路径
* .efi 文件所处的硬盘分区
* 在 BIOS 里显示的人眼易读的名称(叫 label, 类似于硬盘分区的 label)

安装系统的时候会主动写入这些信息
也可以用另外的软件来增删改查
在 Ubuntu 里可以用 efibootmgr: https://wiki.debian.org/UEFI#efibootmgr_and_efivar

浅仓透透 发表于 2021-9-17 18:23

macos 发表于 2021-9-17 12:27
bcd菜单模式没选对,不要metro菜单,就不会不同win切换重启

可以用回老的启动菜单,但是还是需要从win boot 进去选一次

浅仓透透 发表于 2021-9-17 18:26

5long 发表于 2021-9-17 13:55
是由用户层软件主动告知的
一个启动项的内容至少包括:



研究了一下午。。
用 efibootmgr 新建了两个BIOS启动选项,A 和 B,分别对应 /mnt/EFI/Win10/ 下面两个新建的efi启动文件
然后根据Windows Boot Manager 里面的信息,最终引用的是 \Windows\system32\winload.efi 文件

复制了过去,然后不得行。我太弱了

浅仓透透 发表于 2021-9-17 18:29

现在想从F12直接从BIOS里启动跳过Windows Boot Manager,但是不确定两个 Win10 用哪里的efi能进去。。

我再研究研究,还是没弄懂双系统的情况下 Windows Boot Manager 干了啥

macos 发表于 2021-9-17 18:36

浅仓透透 发表于 2021-9-17 18:26
研究了一下午。。
用 efibootmgr 新建了两个BIOS启动选项,A 和 B,分别对应 /mnt/EFI/Win10/ 下面两个新 ...

多win,在bcd以外的层面,必须多esp

macos 发表于 2021-9-17 18:40

因为微软的efi,指向的bcd路径是固定的,一份esp只能指向一份bcd,靠bcd,实际上已经进入了一份win启动了,只能靠这份win再做后续配置,不可能和grub联动

浅仓透透 发表于 2021-9-17 18:51

macos 发表于 2021-9-17 18:36
多win,在bcd以外的层面,必须多esp

好吧,那还是只能跟我以前装两个盘一样了。。
我去拆一下分区

开起 发表于 2021-9-17 19:35

要不直接新装一个rEFind,那个是会自动识别所有盘上的Windows和linux系统的

—— 来自 OnePlus KB2000, Android 11上的 S1Next-鹅版 v2.4.4.1

浅仓透透 发表于 2021-9-17 20:04

开起 发表于 2021-9-17 19:35
要不直接新装一个rEFind,那个是会自动识别所有盘上的Windows和linux系统的

—— 来自 OnePlus KB2000, An ...

不行的啦,只能识别到 windows boot manager

浅仓透透 发表于 2021-9-17 20:10

看了看,\EFI\Microsoft\Boot\bootmgfw.efi 引导会加载同目录的bcd,bcd 里写的两个系统路径,一个本系统相对路径,另外一个系统是绝对路径,所以要重启。

然后创建了个双esp分区,但是第二个分区接不到Win_B上。
一个硬盘只能有一个efi标记盘,其他的盘没有标记能识别到引导马。我用efibootmgr 写进去没用

Damenly 发表于 2021-9-17 20:40

浅仓透透 发表于 2021-9-17 20:10
看了看,\EFI\Microsoft\Boot\bootmgfw.efi 引导会加载同目录的bcd,bcd 里写的两个系统路径,一个 ...

这样,你把两个分区的efi swap以下,然后看看能不能chain boot到Win_B上。如果没有EFI flag的话,bios应该是识别不到的,用grub chain boot试下

Midnight.Coup 发表于 2021-9-18 00:25

用传统选择菜单试试?
BCDEDIT /SET {Current} BootMenuPolicy Legacy

—— 来自 S1Fun

性欲モンスター 发表于 2021-9-18 01:57

EasyBCD

macos 发表于 2021-9-18 08:04

浅仓透透 发表于 2021-9-17 20:10
看了看,\EFI\Microsoft\Boot\bootmgfw.efi 引导会加载同目录的bcd,bcd 里写的两个系统路径,一个 ...

用dism++,bootice,bcdboot之一自定义启动位置

macos 发表于 2021-9-18 08:06

另外bcd重启不是路径原因,你启用了metro菜单

浅仓透透 发表于 2021-9-18 09:00

本帖最后由 浅仓透透 于 2021-9-18 09:01 编辑

macos 发表于 2021-9-18 08:06
另外bcd重启不是路径原因,你启用了metro菜单
metro 菜单一句bcdedit /set {bootmgr} displaybootmenu Yes就可以关掉了。
进入Windows Boot 选当然可以。但是进入BCD实际上就已经进入Win10了,bcd文件在\EFI\Microsoft\Boot\下面。

现在的想法是不进入 Windows Boot ,在BIOS的启动选择界面就直接可以开始确定引导。
所以创建了一个新的esp分区,用第二个esp分区独立引导Win10_B,
但是一个硬盘只能有一个efi flag,第二分区的esp bios是不识别的。失败。

那几个工具我都试过了,本质上依旧是修改BCD而已啊,自定义启动位置也而只是在读取了\EFI\Microsoft\Boot\bootmgfw.efi 确定有几个可启动项而已,然后根据BCD里写的windows/efi文件来启动对应系统。

现在就是在折腾怎么在主板的bios里直接看到双系统。
我以前是拆双硬盘装的,天生双efi分区。根据前面几楼的说法可能但硬盘的确没有办法,只能过Windows Boot。

Damenly 发表于 2021-9-18 09:08

本帖最后由 Damenly 于 2021-9-18 09:09 编辑

浅仓透透 发表于 2021-9-18 09:00
metro 菜单一句bcdedit /set {bootmgr} displaybootmenu Yes就可以关掉了。
进入Windows Boot 选当然 ...
“但是一个硬盘只能有一个efi flag,第二分区的esp bios是不识别的。失败。”
额。你都意识到这点了,为什么还再尝试bios界面。。试试grub啊。。搞两个指向不同路径的efi 然后分别创建menuentry

浅仓透透 发表于 2021-9-18 09:12

本帖最后由 浅仓透透 于 2021-9-18 09:24 编辑

Damenly 发表于 2021-9-18 09:08
“但是一个硬盘只能有一个efi flag,第二分区的esp bios是不识别的。失败。”
额。你都意识到这点了,为什 ...
就是想挑战一下微软的启动策略,看看有么有什么办法可以跳过去。
而且不是都说efi可以支持很多个系统嘛。。怎么到Win10这里反而自己又做了一层

macos 发表于 2021-9-18 09:56

浅仓透透 发表于 2021-9-18 09:00
metro 菜单一句bcdedit /set {bootmgr} displaybootmenu Yes就可以关掉了。
进入Windows Boot 选当然 ...

用主板?主板的配置菜单,是系统主动生成的,你用bootice,uefi修改能增加新esp的选项,名字不同以免系统自添加的选项覆盖掉
以及系统正确关机或重启,应该会自己添加windows boot manager名字的选项,不理他或者关掉计划
页: [1]
查看完整版本: 多系统下的启动问题,以及如何干掉 Windows Boot 求教