NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 8217|回復: 5

[教學] bios 啟動 GPT Win7 實作文

[複製鏈接]
發表於 2013-11-19 20:42:59 | 顯示全部樓層 |閱讀模式
本帖最後由 阿達金田一 於 2019-8-12 06:23 編輯

*** 文首補充說明 ***
注意...這是依據理論文的實作測試(手動修改)...過程中有遇到一些問題
所以...若有要手動實作的人...最好不要跟著照作...請先看過一遍
因為文末有總結...最好照 總結 的流程來作

*** 更新補充 2013/12/10 ***
工具 BiosGPT Win

**** 主文 ****
突破盲點? bios 開機載入 GPT 中的 win 7 u sp1 x86 ?
說明了用 bios 的情況下啟動在 GPT 中的 Windows 7 (還它媽的是 sp1 x86 版的)

原理概念文就請去看那篇文章...這篇只是附圖的實作文

這次要玩的是...
Boot + Basic + 不使用備份 + 不直接 MBR 轉 GPT
也就是原理文中的第3種方法


環境還是: vbox 4.3




這裡要說一下在 bios(MBR) 和 uefi(GPT...實要 MBR 應該也可以) 時
系統分割區 是指用來處理開機的分割區...所以

BIOS (MBR)...
並沒有 ESP (因為用不到...那是給 uefi 用的)

UEFI(GPT)...
有 ESP ... 所以 ESP 才是 系統分割
由於 ESP ... windows 是用成 FAT 所以
應該也沒人會把 windwos 裝到 ESP 吧
而 MSR 網路上是說 "已知將基本磁盤轉換為動態磁盤是該分區將發揮作用"
覺的用不到是可以砍了

其實我在還沒玩 bios 啟動 GPT 前...上網爬文...
這篇文幾乎是 google 的前幾個...一篇還不錯的基礎實作文(當然我是拜讀過的)
大容量硬碟、UEFI 系統進階玩法:GPT / MBR 分割表格式無損輕鬆互轉


不過我還是把我原理文說的 bios(MBR) 單Boot 安裝方式說一下

這裡故意先用成 GPT = ESP + MSR + Basic
左下角有  警告訊息..要安裝也會提示無法安裝在 GPT


按 磁碟機選項(進階)...就可 刪除 和 新增(建立)


全砍光...全變成 未配置
然後重新 建立 ...


會自動轉成 MBR
預設是自動 Boot(100M) + Basic .... (系統 + 主要)


要 單Boot 安裝的...可以砍了 Basic


然後選 Boot 用 下面的 "延伸"
(由於 Boot 剩餘容量才 86M 不夠...要快 8000M 才可以)


這樣 Boot 就 延伸 容量 到全部了
之後就可以把 windows 7 裝到 Boot (左下角沒警告訊息了)




之後安裝 Win7 就是...等等等
其它安裝Driver什麼的 或 安裝某 餵肉的 之類的..就不用圖了吧

前面說了...我這次是安裝是 要用 Boot + Basic
所以 單Boot 安裝 只是順便說一下

安裝好後 Boot 預設沒給 磁碟代號
給一個看一下有啥東西


系統(Boot) 下的東西 和 某 餵肉的 附產品



在 Boot 中...修改 bios GPT 開機會用到的檔案
原 bootmgr -> bootmgr.7
grldr -> bootmgr
建立 menu.lst 這次我不打算把 bootmgr 放到 bootmgr.ima
所以是先 chainloader /bootmgr.7 後才 root (fd0)
bootimgr.ima 在最後才建立


用 DiskGen 記錄 磁頭 磁柱 磁區 資料
我是開個文字檔存到 C:\ 下...當然這是因為要貼圖...最好還是抄起來


接下來正常應該要去用 SPFDISK 之類的記下 MBR 資料

但在用 DiskGen 突然想測試...
DiskGen 4.3 Pro 可不可以在 Win7 下正常 直接 MBR 轉 GPT
心臟比較大力又喜歡剌激一點的...可以這樣搞
結果是 Win7 下可以 直接 MBR 轉 GPT
當然...因為在 Win7 下直接操作危險動作...Win7它 藍屏 了
不過等他 藍屏 完重開機...用 DiskGen DOS ISO 去看


變 GPT 了....不過做完我就覺的太衝動了...還沒抄 MBR 資料啊
還好..在 PE 中 GPT to MBR 是沒問題的...可以轉回 MBR 在去抄
當然...這次的文章是要用 不直接 MBR to GPT
所以這個突發測試 請看看就好...並不在流程中
MBR to GPT 只是省下 GPT 重建而以...位圵處理是差不多的
總之...不管用那個方法變成 GPT...在變 GPT 之前...一定要先記錄下 MBR 的資料

先改回MBR ... 回到原流程
PE 中用 DiskGen 改回 MBR


原流程是抄下 3個磁x 的資料
然後要用 SPFDISK 或其它軟體 抄 Boot 資料
之前爬文有看到 WinHex 這東西

即然說到 WinHex....索興上網抓一下 WinHex 來用看看
下面是在 PE 中跑的畫面...因為要看 Boot 資料
所以我們選下面的 整個 HD 而不是上面的 分割區


看到 MBR 的 Hex 了


因為一次只顯示 256 bytes
MPT 在 後面...按 pagedown 到下一頁
被我反白的地方就是 MPT 的資料了 (Boot+Basic)


SPFDISK 的畫面




抄完 MBR 資料後...要手動 MBR 改 GPT 了
再無法 直接 MBR to GPT ...只能手動改了...
這一步驟...物必要小心...不然可能分割區就回不來了

大概是我 XPE 太隨便 ( MakeXpe 臨時隨便做一個出來的 )
所以在我 PE 中不能用 DiskGen 4.3 Pro 改成 GPT (只要和 GPT 有關都會出錯)
所以我是用 DiskGen 4.4 Free DOS ISO

刪了所有 分割區


雖然 Free 版在有 分割區 的情況下不能直接 MBR to GPT (也不能 GPT ot MBR)
但在 空碟 無分割情況下..是可以 MBR <-> GPT 互轉 的


然後要 重建 分割區
注意...DiskGen 會預設會幫建 MSR 不要打勾...請取消
全都手動來建立分割區


建立時..依順序先建 Boot
所以 FS 類型我們選 Basic NTFS 或 ESP(EFI)
然後輸入 起始 終止 的 3磁x 資料


再來是 Basic


建立好...這時還沒 保存變更...看到的會是 "未格式化"
請不要很自動的去格式化...那你 分割區 就被你格掉了
"未格式化" 不要管它...這裡直接 保存變更
這時會跳出沒格式化的提示...一樣...按否 ...不要格式化


這時就會自動跳出找到殘留的 引導
這就是原本的 FS ... 當然...這樣要按 "保留"
由於我這次是 Boot + Basic 有2個分割...所以會跳2次


如果上面操作都沒出錯...那 Boot + Basic 分割區 就都回來了
可以看一下有沒有看到檔案


接著要修改 MBR 資料 (雖然已經是 GPT 了)
用 SPFDISK 或 WinHex 打開 MBR
會看到一堆 00
因為用 DiskGen 把 MBR 轉 GPT
所以 MBP 被 DiskGen 很自動的 清掉了
所以等下改完 MBT 後 還要重建一下 MBP


上面是用 WinHex 修改的情況...反白的地方是 GPT 的資料
第1個bytes 也就是 0x1BE 的位置變  00 因為他不是用來啟動的分割
系統碼 0x1C2 的地方變 EE ( EFI GPT )
GPT 的資料不去管它
接在 GPT資料 後面輸入 Boot 的 起始位址 資料
把 16bytes 的 Hex 資料 4bytes 為 1組...其中 1  3 組才是我們要的
以我實作的情況就是
80 20 21 00 - 00 00 00 00 - 00 08 00 00 - 00 00 00 00

然後儲存...因為我要重建 MBR ... 所以回去用 SPFDISK



PS: 剛不知道按到啥...key 到一半的內容都沒了 ToT

如果上面都正確...HD 開機應該會進 grub4dos 然後載入 bootmgr.7



接下來要建立 bootmgr.ima
說到這我才想到我前面忘了記錄 BCD 原始資料


進入 PE 修正 Boot 中的 BCD
bcdedit /store c:\boot\bcd /enum all 是查看所有項目
沒加 /enum all 用就只會顯示有加入開機選單的頁目
可以發現會有很多 unknown ..基本上都是 device 和 osdevice

然後就是下修改指令...這裡我只下 win7啟動 修正的部份


注意...因為我是用 Boot + Basic
所以要注意修正時要指定那一個
在 PE 中 我的 Boot(Boot分割區) 是 C: , Win7 在 D:

{bootmgr} 基本上用 boot 也可以是 Boot分割區 ,在這裡 Boot 是 partition=c:
{default} 基本上是指向到 win7 所在,這裡的情況就是 partition=d:
{memdiag} 這是 memtest , 而 memtest 是在 Boot 中...所以是 partition=c:

另外在原理文中
我有提到過 win7 的啟動項目中..有一些關聯到其它的項目
這些關聯的項目..Win7在啟動時也會檢查
(其實應該是 bootmgr 會檢查 BCD 中的錯誤)
這些關聯也都要修正好...win7 才能正常啟動...若沒修 bootmgr 就會告之錯誤
不然就是...像我這裡一樣...把 win7啟動項目 {default} 中
把其它關聯項目的 value 砍了
注意...這可能會導致 win7 沒了一些功能
那2個看字義和用 bcdedit 看一下項目本身的資料
應該是 休眠 和 修復還回 有關係




不過看2個項目的資料...需要的檔案都是在 Win7 中
所以要設定的話應該也指向到 Win7 所在分割

再將改好的 BCD 等檔案 做成 bootmgr.ima 放到 Boot 中 (要放在 win7 的分割也是可以啦)
我這次只在 bootmgr.ima 中放入
\boot\bcd
\boot\zh-TW\bootmgr.exe.mui
\boot\Fonts\wgl4_boot.ttf
\boot\Fonts\cht_boot.ttf

到這裡 基本上 就結束了...重開機...HD 啟動...就會進入 Win7

上面只算是我這次實作流程的記錄...
等下在會在小總結一下流程...修正我實作中遇到的問題


****** 總結 ******
1.
正常安裝 win7 和 餵肉的 等

2.
記錄 BCD 資料, MBR Hex資料 (WinHex SPFDISK)
各分割區 磁頭 磁柱 磁區 資料 ( DiskGen )
用 WinHex 備份下 MBR (主要是備份 MBP)
如果打算用 SPFDISK 刷 MBP 不備份 MBR 沒差

3.
在 Boot 中加入和修改 bios GPT 開機會用到的檔案
原 bootmgr -> bootmgr.7
grldr -> bootmgr
建立 menu.lst

find --set-root /bootmgr.ima
map --mem /bootmgr.ima (fd0)
map --hook
chainladoer /bootmgr.7
root (fd0)

bootmgr.ima 在最後才建立

註:
若直接用 DiskGen 直接 MBR to GPT
步驟 4 5 可省略

4.
用 DiskGen 刪除所有分割區...把 MBR 轉成 GPT
(如果在 PE 中 DiskGen 不能處理會出錯...用 DiskGen DOS ISO)

5.
依照 步驟2 記錄的 3磁x 資料 重新建立 GPT分割區
建立時格式都用 Basic NTFS
"未格式化" 不要管它....不要格式化
保存更改 時跳出 格式化 提示...一樣按 "否" 不要格式化
跳出 "保留"引導 提示時...請全都 保留

6.
若操作無誤...這時 分割區 就被還原了
也由 MBR 變成 GPT 了

7.
重建 MBR 的 MBP
不要用 bootsect (正常也不能用...因為已經是 GPT)
用 SPFDISK 可以直接刷新 MBP
WinHex 的話...之前有備份就可以用的上
若用 WinHex 還原 MBR 時...在此之前
先記一下 MBR 中 GPT 的 Hex 部份
雖然大部份的情況都是
00 00 02 00 - EE FF FF FF - 01 00 00 00 - FF FF FF FF
不過還是記一下好

8.
MBP 搞好後 修改 MPT
從 0x1BE 開始..先是 GPT 接著在 半個 Boot 的資料(只要 1 3組)
00 00 02 00 - EE FF FF FF - 01 00 00 00 - FF FF FF FF
80 20 21 00 - 00 00 00 00 - 00 08 00 00 - 00 00 00 00

9.
MPT 改好後...HD 開機最後應該會到 bootmgr 畫面
並且提示找不到 \boot\bcd 的錯誤
PE 開機 ( PE 要有 bcdedit 啊) ... 修正 BCD
依我實測情況 Boot 是 C: , Win7 是 D:

bcdedit /store c:\boot\bcd /set {bootmgr} device boot
bcdedit /store c:\boot\bcd /set {default} device partition=d:
bcdedit /store c:\boot\bcd /set {default} osdevice partition=d:
bcdedit /store c:\boot\bcd /set {memdiag} device partition=c:

另外如果要修正 {default} 另外2個關聯項目
請看 recoverysequence 和 resumeobject 所對應的 項目 ID
2個都指定到 Win7 分割區 (我推測的)
resumeobject
bcdedit /store c:\boot\bcd /set {xxx-xxx-xxx-xxx-xxx} device partition=d:
bcdedit /store c:\boot\bcd /set {xxx-xxx-xxx-xxx-xxx} filedevice partition=d:
recoverysequence
bcdedit /store c:\boot\bcd /set {xxx-xxx-xxx-xxx-xxx} ramdisksdidevice partition=d:

10.
在 Boot 中建立一個 bootmgr.ima ( 5M 的 ima 檔就夠了 )
我個人是用 winima 做的 ... 把改好的 BCD 等相關檔案放入
\boot\bcd
\boot\zh-TW\bootmgr.exe.mui
\boot\Fonts\wgl4_boot.ttf
\boot\Fonts\cht_boot.ttf



*** END ***

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?我要註冊

x
發表於 2013-11-19 22:01:45 | 顯示全部樓層
@@ 等待中 ~~
 樓主| 發表於 2013-11-20 04:44:42 | 顯示全部樓層
完成了...可能又要潛水了
發表於 2013-11-20 23:18:31 | 顯示全部樓層
太強了!拜讀中!
發表於 2013-11-28 20:38:58 | 顯示全部樓層
研究中謝謝分享文章
發表於 2016-12-20 13:56:47 | 顯示全部樓層
thank you a lot !!
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

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

GMT+8, 2025-8-19 02:14 , Processed in 0.089664 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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