NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 14097|回復: 8

新手村 - UEFI 開機硬軟體原則

[複製鏈接]
發表於 2020-8-24 12:52:59 | 顯示全部樓層 |閱讀模式
本帖最後由 阿達金田一 於 2022-12-13 14:47 編輯

先說一下...這篇會很長 (尤其加上我很碎言)
雖然說是新手村文...用的也都是基礎操作
但是要有一些的基礎...(至少基礎功要還可以)
不然大概會看不懂


基礎原則篇

這裡我主要重點放在 UEFI Boot Entry (後面會說這個是啥)
而 bootmgr bcd 已經有很多相關文章 網上也有很多資料...所以不說了
(頂多後面實作會順帶略說一下)

老實說現在工具程式很多
感覺很多人...不是沒有基礎功
只是不是瞭解的很透...不然就是 似是而非
如果有吃透 電腦開機 流程
Legacy / UEFI 以 "使用"的表面原則上 來說其實沒有差很多
(表面 意思就是不說底層處理操作...)

若將 流程 最簡化 , 最基本 其實就一個原則
載入開機程式

底層處理操作...也不過就是 Legacy / UEFI 的 開機程式 是存放在不同的 "地方"
Legacy 是 磁區處理 ( MBR PBR )
UEFI 的 檔案系統 和 檔案 ( FSx:\efi\boot\bootx64.efi )

另外 Bios 的程式是以 各別 BIOS 硬體架構和操作去寫的...
所以 Legacy / UEFI 2個 BIOS 的 BIOS程式 並不通用
所以使用者要分的清 開機程式 是哪一個用的
基本上 Bootmgr Grub Grub2 這些 2個版本都有
( grub4dos 早期只有 Legacy ...現在是有 grub4efi )
比較簡單的辨別方法就是 UEFI 的 程式 大多是 .efi 為副檔名
拿 win 來說

Legacy 的 bootmgr
\bootmgr

UEFI bootmgr
\EFI\boot\bootx64.efi
\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI

電腦開機...以基本原則 "載入開機程式" 來說
其實簡單的可以分成 硬體開機 -> 軟體開機
所以 電腦開機 有問題...就是要先搞清楚...是那一個步驟有問題
最簡單的方法就是...看有沒有 "載入開機程式"
不過實際上比較好分辨的是 看有沒有 載入開機"管理"程式
( 就是能不能看到 開機管理程式 的畫面或訊息 )

開機管理程式 就是 bootmgr grub2 之類的
對於 UEFI 開機程式 通常差不多等同 開機管理程式

若是以往的 Legacy ...是不太好分辨
因為 Legacy 是以 磁區引導 為開始
並不是直接加載 開機"管理"程式 的 程式檔
所以 磁區引導 有問題...還沒 載入開機"管理"程式 就會出錯
但實際上 未必是 沒有載入 開機程式 , 只是沒載入 開機管理程式
Legacy 的引導式開機...其實等於多個 開機程式 接力式的載入...直到 開機管理程式
就 HDD boot 來說
第1個載入的是 MBR 的開機引導程式
然後一般的 MBR 開機引導程式 是去載入 PBR 的 開機引導程式
PBR 開機引導程式 去加載入 FS 的 開機引導程式
FS  開機引導程式 最後才加載 開機"管理"程式 的 程式檔
(不過通常 PBR + FS開機程式 會一起處理, 一般都合稱 PBR 引導)

老實說 UEFI 比起 Legacy 已經簡化流程
能搞懂 Legacy Boot , UEFI Boot 要搞懂應該不難...只是差在細節
對於 Legacy 的碎言有點多 ... 這裡還是說回 UEFI

前面說的一堆...算是 硬體開機 to 軟體開機 中間那個 to
也就是
硬體開機 的 最後步驟 (亦是 軟體開機 的 最初步驟)
對於 UEFI 來說...這個 步驟 其實簡化到只有一個原則
載入 EFI 程式
所以如果 EFI 程式 就是 開機"管理" 程式 ...
等同直接載入 開機管理程式
而不用像 Legacy 那樣 MBR -> PBR -> 開機管理程式
(註: 也可以 MBR->開機管理程式 ... Legacy 流程麻煩...但因為如此又很彈性 引導程式 可以導來導去 )

所以對 UEFI 開機來說
分辨 硬體開機 或 軟體開機 哪個流程有問題
看有沒有載入 EFI 開機管理程式 是比較簡單的

而這裡我也只說 Windows 的流程
(因為是新手文...而且我主要只會 Windows)

UEFI 硬體開機 ... 這我不說底層處理 (因為我也不太懂)
就使用者來說...表面操作...就是設定 UEFI BIOS 而以
其中一部份...UEFI / Legacy 就表面的操作設定上...沒什麼差別
都是 Boot Device 和 Device BBS
只是 UEFI 多個一個東東
UEFI Boot Entry / UEFI 開機項
這是儲存在 UEFI FirmWare... (這個就是 bcdedit 中的 {fwbootmgr} )

是 UEFI 用來 管理開機 的 (就像 bootmgr 的 bcd, grub2 的 grub.cfg )
可以想成 UEFI 開機用的 設定檔(設定儲存區)
實際上 UEFI BIOS 設定 Boot Device 和 Device BBS
最終大多都是反應到 UEFI Boot Entry
而我們開機常用的 boot menu (開機選單)
有的其實就是顯示 UEFI Boot Entry 或是 UEFI Boot Entry + BIOS自己的選單
( 例如 UEFI+CSM 混合雙啟的  boot menu )

如果不考量 BIOS 廠商客制化的處理或功能
其實 UEFI BIOS 最基本的  Boot Device 和 Device BBS
差不多就是 UEFI Boot Entry
例如
在 UEFI Boot Entry 加上
1. UEFI: CD/DVD Device(Drive)
2. UEFI: USB Drive (或 UEFI: Removale Device)
3. UEFI: NetWork Device
4. UEFI: Hard Disk Device(Drivce)
等於是用
CD/DVD -> USB裝置 -> 網卡 -> HDD
的順序開機

當然也可以設定各別 HDD 的順序例如
1. UEFI: HDD 0 xxxxx
這一般是顯示 HDD 的名稱 ,  HDD BIOS 中的型號之類的,例如 KINGSTON SHFS37A120G
也有可能是 BUS 例如 sata 0 sata 1 ahci 0 ahci 1 之類的 或 其它表示法
2. UEFI: CD/DVD Device(Drive)
3. UEFI: USB Drive (或 UEFI: Removale Device)
4. UEFI: NetWork Device
5. UEFI: HDD 2 xxxxx
6. UEFI: HDD 1 xxxxx

註:
Device 的 Boot Entry ...設定儲存時 用的韌體路徑不同...實際上可能是有差別的
拿 HDD 的情況來說
UEFI: HDD 0 KINGSTON SHFS37A120G
可能是記錄 "KINGSTON SHFS37A120G" 的 "磁碟資訊"  HD(xxx,xxx,xxxxxxxxxx)
(因為 UEFI 大多是用  GPT ... 所以大概記錄 GPT 中的 GUID 之類的)

UEFI: HDD Sata 0 (AHCI 0)
記錄可能是類似
PciRoot(0x0)/xxxxxxxxx/Sata(0x200,0x8000,0x0)
這是主機板上的 sata bus (匯流排) ...(依據 主機板硬體不同 顯示的也不一樣)

2者的差別在
前者
換個 HDD 可能就開不了機
( 除非和原來的HDD 做 1:1 克隆複製 ...這個不確定
如果只是 磁碟資訊 1:1 Clone 應該可以 , 若還有其它硬體資訊 則可能不行 )
後者
是指定 BUS ...除非主機板移除該 BUS
不然 bus 永遠在...所以換 HDD 沒差

這是底層的東西...就不說太多...

前面說了...UEFI boot 原基本的原則就是 "載入 EFI 程式"
所以 UEFI Boot Entry 這類的 Device Boot ...
因為沒有指定 EFI 路徑...原則上預設都是用
x64 BIOS 用 \efi\boot\bootx64.efi
x86 BIOS 用 \efi\boot\bootia32.efi
IA64 BIOS  用 \efi\boot\bootia64.efi
其它比較特殊的可能還有
ARM 32bit 用 \efi\boot\bootarm.efi
ARM 64bit 用 \efi\boot\bootaa64.efi

而 UEFI Boot Entry 除了 Device boot
還可以指定 EFI 路徑的 EFI Boot
一般 Windows 的 UEFI boot Entry
Windows Boot Manager
就是 UEFI Boot Entry 一個 EFI Boot
通常是指定到
\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
註: 這和 win 的 開機設定資料存放區 中的 {bootmgr} 資訊有關...後面會再提
( 開機設定資料存放區 就是 win 的 系統 bcd )

前面說一堆...只是基礎原則...
總結一下
UEFI BIOS 的開機設定基本是用 UEFI Boot Entry ( {fwbootmgr} )
UEFI Boot Entry 簡單的可以分 Device Boot 和 EFI Boot
Device Boot 載入預設路徑 EFI ( \efi\boot\bootx64.efi )
EFI Boot 指定路徑的 EFI

當 EFI 正常載入後...後面就是 開機管理程式 的流程...也就是 軟體開機
後面實戰篇會以 windows 的 bootmgr 為示範順帶略說一下

另外是個人推測
EFI Boot 一般只會用在 HDD(含USB-HDD/Flash) 類的裝置... 頂多加個 CD/DVD
底層韌體路徑大概是記錄 HDD的磁碟資訊 而不是 BUS 資訊
也就是 HDD + EFI Path
不過理論上大概也可以 BUS + EFI Path ... 不過實際上一般情況應該是設定不了


實戰篇

注意 UEFI 一個特點就是  客製化 容易
所以不同廠商的 UEFI BIOS 可能處理上都有差異
不過一些基本原則大多差不多

這裡我是用 Win10 的 Hyper-V 做示範
Hyper-V 的 UEFI 非常春陽...就是用來 UEFI Boot 的而以
沒法做太多的設定

不能叫出 boot menu
簡單說 預設 就是直接用 第1個 UEFI Boot Entry

沒有 Boot Device 和 BBS 設定
( 我是指像一般主板的 boot device 和 bbs 的設定...
不過有的 主機板 如果只有基本 UEFI BIOS 功能...可能也是直接設定 UEFI Boot Entry )

只有 UEFI Boot Entry
而且原則上也是 Hyper-V 自動管理...只能調順序
簡單說就是 UEFI Boot Entry 當做 boot device + bbs
而且還不能手動設定
新增/移除 裝置(HDD,CD/DVD,網卡) 時 會自動 新增/移除 UEFI Boot Entry
註:
後面實作圖片...其實原本的 Hyper-V 的 UEFI Boot Entry
有 網路介面卡(EFI Network) 的選項
只是我用 bootice 在玩的時候 砍掉了 ,後面又懶的搞回去
所以後面圖片... UEFI Boot Entry 都沒有 網路介面卡

工具程式
bootice

實作 Start

建立 2個 虛擬HDD 給 Hyper-V
1個 vhd (512B磁區)
1個 vhdx (4K磁區)

UEFI-HDD-0.vhd
2個分區 , MBR ,  NTFS + FAT
MBR 0 , NTFS
MBR 1 , FAT
01.png
02.png

UEFI-HDD-1.vhdx
2個分區 , GPT , ESP FAT + NTFS
GPT 0 , ESP FAT
GPT 1 , NTFS
03.png
04.png
05.png

裡面為了方便...我先把一些檔案複制到 vhd vhdx
這裡先在 win10 中把 vhd vhdx 掛載起來
VHD 掛到 J: K:
VHDX 掛到 M: , 注意 VHDX 的 ESP 預設隱藏所以不會掛載 , 而且暫時先不搞 GPT ESP

因為只是玩 UEFI Boot ...所以我只 copy
UEFI 的 bootmgr 相關檔案 和  PE WIM
也是 win10 iso 中的
\efi 和 \boot 2個目錄到 K:
\sources\boot.wim 到 J: 和 M: 的根目錄 \boot.wim
06.png

這裡因為 Bootmgr(bootx64.efi) BCD 和 boot.wim 不是一個分區
所以 Win10 ISO 的 BCD 設定中的 開機裝置(啟動磁片) [boot] 是不能正常開機的
因為這指定了 boot.wim 用 [boot] 分區 ... 即 bootmgr bcd 的分區
因此...我這裡先用 bootice 設定一下 BCD ... 其實指定用 VHD 的 MBR 0
07.png
08.png

然後是 Hyper-V
將 UEFI-HDD-0.vhd 設到 Scsi 0
將 UEFI-HDD-1.vhdx 設到 Scsi 1
將 CD/DVD (win10 iso) 設到 Scsi 2
Hyper-V 會自動對 UEFI Boot Entry 加入 Device Boot
( 就是圖中 韌體 開機順序 )
09.png

從上圖可以看到 3 個 Device Boot
其實就是用 Scsi 0 1 2 來開機 (韌體裝置路徑)
3個預設描述都是 EFI SCSI Device

這裡我們 Hyper-V 開機...
依設定就是用 SCSI 0 ( UEFI-HDD-0.vhd) ... 做 Device Boot
預設載入 \efi\boot\bootx64.efi
因為我們已處理好 vhd 中的 FAT 的 \efi\boot\bootx64.efi (bootmgr) 和 bcd
所以會成功的用 boot.wim 開機
所以如果失敗...就是流程有不正確...看是 efi  的問題還是 bcd 設定問題
這裡我因為是用原生的 win10 boot.wim 進入後按 shift + F10 可以叫出 cmd
10.png

這裡要注意幾個地方


1. windows 對於  開機設定資料存放區 ( 後面若還有再提...簡稱 系統BCD ) 的判斷和處理
由於 Windows 的預設配置是 UEFI+GPT , Legacy+MBR
當使用 UEFI 開機時... PE/Win 預設會判斷 GPT 的 ESP(FAT) 為  開機設定資料存放區
也是系統預定的 BCD 會是 GPT 的 ESP 分區中的 \EFI\MICROSOFT\BOOT\BCD
這可能和實際上開機用的 BCD 不同...例如
示範中...我是用 VHD 的 MBR 1 做 UEFI Boot 而不是  VHDX 的 GPT 0
整個開機流程就是
UEFI Boot Entry -> EFI SCSI Device ( SCSI 0 ) -> \efi\boot\bootx64.efi  -> \EFI\MICROSOFT\BOOT\BCD -> [boot=MBR 1]:\boot\boot.sdi + MBR 0:\boot.wim

但進入 PE 後還是判斷 GPT ESP 做為 系統BCD
(可以看到上圖 cmd 執行 bcdedit 會出錯...因為我 GPT ESP 沒做任何處理所以沒有 BCD)

這主要是因為 這裡是用  PE 開機
PE 又是用 ramdisk (所以對 PE 來說 開機是 ramdisk)
另外 PE 主要是用來維修 正常的 windows
因此這裡的 PE 判斷主要是針對 正常的Windows 會用什麼(磁碟和分區) 的 BCD 來開機
而不是 PE 自己是用什麼 BCD 開機
而正常來說 UEFI boot ... 正常安裝 windows 都會用 GPT + ESP FAT

因此我示範是故意把 MBR 放到 HDD0 , GPT 放到 HDD1
來測試和推測 PE/WIN 的 判斷 和 處理 行為方式

另外 PE/Win 會依 系統BCD 自動修復 Win 的 UEFI Boot Entry 啟動項
( 執行 bcdedit 設定 系統BCD {bootmgr} 時也會 自動修復 或 修改設定 )

這裡可以想成 PE/WIN 會自動對 UEFI Boot Entry 和 系統BCD {bootmgr}
做對應的 確認 和 修復 或 更新

另外如果 系統BCD 不正確
bcdedit 也無法用 bcdedit /firmware 查看 UEFI Boot Entry

2. bootice 對於 UEFI Boot Entry 的修改原則
bootice 的 UEFI 啟動序列 就是 UEFI Boot Entry

bootice 可以調整 UEFI Boot Entry 的順序
預設 boot 都是第1個 boot entry ...除非有設定下次開機指定用哪一個 Boot Entry

bootice 對於 Device Boot 只能刪除
( Device Boot 通常都是用 BIOS設定 來新增, 所以要手動加上 Device boot  看 BIOS 設定中有沒有手動設定項 )

bootice 對於 EFI Boot 可以 新增 和 修改
但有時可以發現 bootice 並不能 添加 新的 EFI Boot
( 就是選好 EFI 檔後...但一樣不會新增到 UEFI Boot Entry )
這裡原因不明...但我實測是推測
要不是 bootice 有 Bug
就是 bootice 可能是調用  win api 來處理 {fwbootmgr} ( UEFI Boot Entry )
而 Win API 可能只能加 系統BCD 中 {bootmgr} 指定的 Device 的 HDD 的 EFI
簡單說
系統BCD {bootmgr} 設定 HDD 0, MBR 1 \efi\boot\bootx64.efi
bootice 可以 添加 HDD 0 上的 efi 檔 (好像只要是 HDD 0 的就可以 , 因此 MBR 0 1 好像都可以 )
但不能添加其它 HDD 的 efi 檔案
反之
如果 系統BCD {bootmgr} 設定 HDD 1 , GPT 0 \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
那 bootice 可以 添加 HDD 1 的 efi 檔案 ... 其它 HDD 的不行
還有...如果
系統BCD {bootmgr} 如果一開始是 HDD 0  , MBR 1
但是用 bcdedit 修改成 HDD 1 , GPT 0

再重開機前...此時 bootice 好像可以 添加 HDD 0 , HDD 1 上的 efi 檔為 UEFI Boot Entry
但重開機後...就只能添加 HDD 1 ( 因為 系統BCD 是設定 HDD 1 , GPT 0 )
這些應該是 PE/Win 或 UEFI 底層處理問題...所以就不太深究...知道有這種情況就好

雖然 bootice 有不能 添加 UEFI Boot Entry EFI boot 的情況
但是還是可以修改現有的 EFI Boot ..也就是...例如
bootice 當前只能添加 HDD 0 的 efi
但是如果只是把 UEFI Boot Entry 現有的 EFI Boot
改成 HDD 1  的 efi ...是可以的

而由於 PE/WIN 會自動修復
系統BCD {bootmgr} 設定的 EFI Path
做 USB Boot Entry 的 EFI boot

所以可以拿 PE/WIN 自動產生的 EFI Boot 來修改 ...

因為只要進 PE/Win 就會自動修復
例如
系統BCD 設定 {bootmgr} HDD 1 GPT 0 , \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI , description Windows Boot Manager
PE/WIN 會自動修復 UEFI Boot Entry
Windows Boot Manager , HDD 1 GPT 0 , \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
然後...因為此時 bootice 添加 EFI Boot 只能添加 HDD 1 GPT 上的 EFI
如果我們要用 HDD 0 MBR 1 上的 EFI ... 可以修改 UEFI Boot Entry 現有的 Windows Boot Manager
例如 改成
MBR PE , HDD 0 MBR 1 , \efi\boot\bootx64.efi
就可以用 MBR PE 來開機...因為 MBR PE 一樣是  PE 開機
進 PE 後...依 系統BCD 會又自動修復  Windows Boot Manager
就會變成 2 個 EFI Boot
Windows Boot Manager , HDD 1 GPT 0 , \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
MBR PE , HDD 0 MBR 1 , \efi\boot\bootx64.efi

上述 注意要點 可能有點雜亂...
但沒辦法...這要以實際情況為主的反推測...不是一定情況
而且主要是在說細節上的操作和反應情況
只是有可能有這些情況...所以先說明

如果真的看不懂就算了...
UEFI Boot Entery 全都用 Device boot 不要用 EFI Boot
然後 Device 的 \efi\boot\bootx64.efi 別搞錯就行



回到實作
這裡把 GPT ESP 掛載到 G:
Dir 發現還是空的...因為我之前沒做任何處理
11.png
12.png
13.png

然後我用 bcdedit 匯入 MBR 1 的 BCD E:\EFI\MICROSOFT\BOOT\BCD 到 系統BCD
注意不要用 Copy 因為 PE/Win 本身會確定是不是 原生系統BCD
簡單說就是, 是不是用 PE/Win 合法建立的... (系統BCD 最好都用 bcdedit 搞)

推測 BCD 大概會記錄 建立BCD 的路徑
所以用 Copy 的... BCD檢測會有問題...bcdedit 一樣會無法操作處理
因此要用直接套用別的 BCD , 用 /import 來匯入設定
bcdedit /import E:\EFI\MICROSOFT\BOOT\BCD
14.png
可以發現 bcdedit 在 G:\ 建立系統用的 \EFI\MICROSOFT\BOOT\BCD
(所以 PE/Win 和 bcdedit 是判斷 系統BCD 用 GPT 0 , ESP FAT :\EFI\MICROSOFT\BOOT\BCD )

bcdedti /enum firmware 可以正常查看 UEFI Boot Entry
15.png

這裡其實可以發覺 bcdedit
會將 {bootmgr} 和 UEFI Boot Entry 對應關聯
因為 {bootmgr} 其實不是 UEFI Boot Entry
而是 BCD 的設定資料
而相對應的 UEFI Boot Entry 在 bcdedit 顯示是直接用 {bootmgr}
{bootmgr} 加上 device 和 path 設定...後會自動在 UEFI Boot Entry 加上相對應的 EFI Boot
如果不是相對應的 EFI Boot 則是顯示像 以下格式的訊息
韌體應用程式 (101fffff)
-------------------------------
identifier              {6cb232ba-2f57-11ea-a2d7-940ba9241149}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\PE\BOOTX64.EFI
description             Windows PE

用 bcdedit 修改 UEFI Boot Entry 的 description
其實就是加個 A B C
16.png

可以看到 Hyper-V 的 UEFI Boot Entry 也跟著更了
17.png

對 系統BCD 的 {bootmgr} 補上 Path 和 Device
這裡正常會自動加上對應的 UEFI Boot Entry
若沒有重開機進 PE 後應該也會自動加上
18.png
19.png

到這裡先做個小結
各別 UEFI Boot Entry 流程
Windows Boot Manager -> HDD 0 MBR 1 , FAT :\efi\boot\bootx64.efi -> MBR 1 , FAT :\EFI\MICROSOFT\BOOT\BCD  -> [boot=MBR 1]:\boot\boot.sdi + MBR 0 , NTFS :\boot.wim

EFI SCSI Device A (SCSI 0) -> HDD 0 (UEFI-HDD-0.vhd) -> HDD 0 MBR 1 , FAT :\efi\boot\bootx64.efi -> MBR 1 , FAT :\EFI\MICROSOFT\BOOT\BCD  -> [boot=MBR 1]:\boot\boot.sdi + MBR 0 , NTFS :\boot.wim

EFI SCSI Device B (SCSI 1) -> HDD 1 (UEFI-HDD-1.vhdx) -> HDD 1 GPT 0 , FAT :\efi\boot\bootx64.efi -> 沒 bootx64.efi 開機失敗

EFI SCSI Device C (SCSI 1) -> CD/DVD (win10 iso) -> CD/DVD UEFI Boot -> \efi\boot\bootx64.efi -> CD/DVD UDF: \bootmgr.efi -> \EFI\MICROSOFT\BOOT\BCD -> [boot=UDF]\boot\boot.sdi + [boot]\boot.wim

註:
CD/DVD UEFI Boot

其實就是用 win10 iso 的 \efi\microsoft\boot\efisys.bin
寫到 CD/DVD(ISO) 中的 UEFI Boot 區
efisys.bin 其實是一個 FAT Image
其中的 \efi\boot\bootx64.efi 其實是
ISO 中的 \efi\microsoft\boot\cdboot.efi
這是用來加載 UDF 中的 \bootmgr.efi  用的 並將 UDF 做為 boot device
cdboot.efi 其是就 CD/DVD Win ISO 開機時顯示
Press any key to boot form CD or DVD..
那個...也有不提示版本 noprompt

這裡如果 HDD 0 有變動(分區異動 或 換HDD)
Windows Boot Manager 就可能會出問題
因為 UEFI Boot Entry 的 EFI Boot 應該是記錄 HDD 的 磁碟資訊
( 當然不排除有的 UEFI BIOS 是用 Bus ...這裡以 Hyper-V 的情況說明 )
( 文章最後 我會補個 Hyper-V 中 UEFI Boot Entry 的 EFI Boot 的資訊圖片 )
而 EFI SCSI Device A , B 則沒影響 因為是針對 SCSI Bus 去偵測...
所以 HDD 變動...SCSI 偵測到的 HDD 也會變動...

注意...
如果這裡只是把 vhd vhdx 交換 ...也就是
SCSI 0 = uefi-hdd-1.hdx
SCSI 1 = uefi-hdd-0.vhd
因為 Windows Boot Manager 是 efi boot 是記錄 hdd 磁碟資訊
說簡單一點就是依據 hdd 磁碟資訊 找出 hdd
所以 vhd 雖然換到 SCSI 1 但...vhd 還是在
因此...不會影響到  Windows Boot Manager 開機...因為最後會是去用 SCSI 1 = uefi-hdd-0.vhd 開機
但這只是指不會影響到 EFI 載入 ... 之後 BCD , PE/Win , 和 Win 中的磁碟代號 可能因為 HDD 變動可能有影響
( BCD 應該還好...因為 BCD 也是用 磁碟資訊 來判斷 HDD ... 所以一般情況下 hdd 只是 換個位置 不會影響 )

若 HDD 1 補上 \efi\boot\bootx64.efi 和 \boot\boot.sdi
EFI SCSI Device B (SCSI 1) -> HDD 1 (UEFI-HDD-1.vhdx) -> HDD 1 GPT 0 , FAT :\efi\boot\bootx64.efi -> GPT 0 , FAT :\EFI\MICROSOFT\BOOT\BCD  -> [boot=GPT 0]\boot\boot.sdi + MBR 0 , NTFS :\boot.wim
因為這裡 我系統BCD ( GPT 0 , FAT :\EFI\MICROSOFT\BOOT\BCD )
是匯入 E:\EFI\MICROSOFT\BOOT\BCD 也就是 MBR 1 , FAT 的 BCD
所以 BCD 中...
boot.wim 設定是一樣的都是用 MBR 0 , NTFS :\boot.wim
而 boot.sdi 是用 [boot]\boot\boot.sdi ...
所以 boot.sdi 會是用 HDD 1 GPT 0 \boot\boot.sdi 而不是 HDD 0 MBR 1 \boot\boot.sdi
( 所以 HDD 1 也要補上 \boot\boot.sdi )
這裡如果修改 系統BCD 把 boot.wim 改成用 GPT 1 , NTFS : \boot.wim
EFI SCSI Device B (SCSI 1) 就會用 GPT 1 , NTFS : \boot.wim 啟動

對新手來說...如果不能準確分析出流程
最好都用 HDD 0 + GPT + ESP FAT + BCD 做開機
儘可能簡化 流程結構 和 一致性 , 以確保正確性
這樣不管用 Device Boot 或 EFI Boot 都比較沒問題

當然很熟的...就隨便玩
其實到這裡基礎就差不多了
我也有點懶的說
因為剩下就是用前面說的基礎, 來設定 UEFI Boot Entry 和 BCD 而以
例如 ... 我把
e:\boot\bootx64.efi 複制到 E:\PE.EFI
e:\EFI\MICROSOFT\BOOT\BCD 複制到 E:\BCD
20.png

然後修改 E:\BCD
設定顯示 選單 , 然後把 選項名稱改成 MBR PE , 其它不變
21.png

用 bootice 添加一個 EFI Boot
路徑 HDD 0 , MBR 1 , FAT \PE.EFI
UEFI Boot Entry 名稱也用 MBR PE
然後調到 第1序列
22.png
23.png

最後重開機...用 MBR PE ( \PE.EFI ) 開機
因為 UEFI Bootmgr 會優先載入 同路徑 中的 BCD
所以 \PE.EFI 是載入 \BCD , 而不是 \EFI\MICROSOFT\BOOT\BCD
之前因為 \BCD 設定 顯示選單 所以出現 BCD選單
24.png

最後補個我玩到最後的 Hyper-V 的 UEFI Boot Entry 的 EFI Boot 資訊
可以看到 EFI Boot 的 韌體路徑是用 磁碟訊資
而不是 EFI SCSI Device 的 硬體識別碼 (可以去比對前面貼過的圖片)
25.png
26.png

最後的總結就是
1. UEFI Boot Entry 正確
2. efi 正確
3. bcd 正確
那 PE/WIN 基本上都開的起來

發表於 2020-8-25 06:21:09 | 顯示全部樓層
金田一大大辛苦ㄌ....
發表於 2020-9-21 13:29:12 來自手機 | 顯示全部樓層
感謝大大詳細教學
發表於 2020-10-4 20:59:43 | 顯示全部樓層
真心感謝
大大的文章收下
雖然一時半刻只能照作變化只能多做練習及實驗
才能有辦法去些做變化
希望這文章新人們可以好好拜讀
讓有興趣的新手們有有一個起手式 好的開始是開心入門的第一步
發表於 2020-10-28 10:08:01 | 顯示全部樓層
感謝教學,寫得很詳細。
發表於 2020-10-29 10:18:56 | 顯示全部樓層
感謝阿達金田一大大寫出詳細教學~ 加油喔
發表於 2020-11-19 09:26:35 | 顯示全部樓層
感謝樓主訊息整理,收獲滿滿
發表於 2021-5-26 09:18:18 | 顯示全部樓層
金田一高手。  看完懂得真的能理解~~俗語   台上10分鐘台下10年功阿
發表於 2023-3-2 04:12:48 | 顯示全部樓層
有些看得懂,有些看不懂,所以只能一小步一小步的吸收,沒辦法一氣通懂
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2024-11-27 22:37 , Processed in 0.115876 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表