本帖最後由 阿達金田一 於 2016-2-23 03:35 編輯
搞的好複雜...
其實只是瞭解正常的 開機流程
所謂 多重開機 只是在 流程 上的變動
而 系統 本身的開機...也是在 系統原有(特定)的 開機環境 下開機
要 測試 或 練習 可以用 虛擬PC 來實做 ... 等熟了就可以在實機上操作
而 硬碟 的 Legacy Bios 開機
這個我以前我有發過相關文章
這裡有備份 http://nonameteam.cc/thread-266-1-1.html
所以說穿了...不管你是用 grub4dos spfdisk bootmgr(bcd) xorboot(這個我沒用過)
Legacy Bios 其實都還是用 MBR 來開機...
那麼...接下來就是 各個 MBR 到底做了什麼...這才是重點...也是應該要知道的地方
MBR ... 第一個磁區 LBA0
PBR ... 每個分割區的第一個磁區
一個正常的硬碟啟動是
MBR -> 啟動分割 PBR -> 開機(引導)檔
開機(引導)檔 ... 就是一個 Legacy Bios 程式
而 多重開機 的 程式 "大部份" 其實也就是一個 Legacy Bios 程式
而且 大部份 也是以 開機(引導)檔 的方式存在
所以在載入前...實際上還是由 MBR 或 PBR 來載入 開機(引導)檔
例如
NT 5/6 MBR -> NT 5/6 PBR -> NTLDR/BOOTMGR ...
註: 以上...如果用 GRUB4DOS 的 GRLDR 改名為 NTLDR/BOOTMGR 一樣可以載入 GRUB4DOS
NT 5/6 MBR -> GRUB4DOS PBR -> GRLDR
GRUB4DOS MBR -> 搜尋 GRLDR
少部份的 多重開機 是直接存在 0軌 (大多是儲存在 MBR 之後...即 LBA1 開始 )
例如 SPFDISK
註:
MBR 基本上就只是 LBA0 ... 1個磁區
而有的 多重開機 的 MBR ... 會大於1個磁區 ... 例如 grub4dos 是 16個 以上
是因為程序比較大...1個磁區放不下...那 MBR 是如何載入咧
很簡單...MBR (LBA0) 的程序...只負責載入...後續磁區的程序而以
SPFDISK 的 多重開機 也是雷同的
SPFDISK 在設定 多重開機 儲在 MBR 時...也是把 多重開機 的程序 和 設定資料
儲存到 LBA1 開始的數個磁區中
而 SPFDISK MBR(LBA0) 的程序...其作用只在載入 MBR 之後的 SPFDISK 多重開機程序
(用 SPFDISK 就可以看到 磁區 中的資料了...用 SPFDISK 多重開機儲存到 MBR ... LBA1 中會有 SPFDISK 的標記文字)
所以各種不同的 MBR PBR 引導上也是不同的
而目前大多數的 MBR ... 也是用 LBA 來定址 而不會去用 CHS
當然如果搞了一個用 CHS定址 載入 PBR 的 MBR
的確有可能因為和實際上 PBR 的 LBA 不同...載入PBR會失敗
不過問題是...我還真找不太到用 CHS 來開機 的 MBR ... 那怕 SPFDISK 的 MBR 也是用 LBA
註: MBR 的分割表的資料中 CHS , LBA 的位址 2種皆有 ( 這個看維基就有資料了 )
不過就目前來說 CHS 是沒啥意義的...大概也就做個 校錯 的作用而以
實際上有些程序可能都直接忽略作 CHS 的部份
現在分割...都習慣會做 4K對齊...所以也不太可能會去 對齊CHS
而且...開機主要還是看 MBR ...沒對齊CHS...也沒差 MBR 用 LBA 定址去載入 PBR 就沒問題
註: 雖然舊的 SPFDISK 是對齊CHS ... 所以現在我都不會去用 SPFDISK 分割...至於新版的 SPFDISK 沒用過...Dos版的分割軟體...比較推薦用 DiskGenius
我個人只用過官方的 spfdisk ... 它人改版的沒用過
官方 SPFDISK 好像只有到 2003 的版後...之類的 2013 之類的...好像都是別人自行修改更新製作的
http://www.mobile01.com/topicdetail.php?f=300&t=2912878
各別的 開機(引導)檔 大多也有各別對應的 設定檔 ... 例如
grub4dos ... 搜尋 \menu.lst
bootmgr ... 開機分割 \boot\bcd
ntldr ... 開機分割 \boot.ini
這裡要注意一下 XPE 的 開機(引導)檔 是 setupldr.bin (近似 ntldr)
對應的 設定檔 是 winnt.sif ( NoName XPE 是有修改過 setupldr.bin ... 改成 RXPE.SIF )
然後 XPE 的 setupldr.bin 用 硬碟開機 和 光碟開機 載入的檔案位置是不一樣的
\bootfont.bin ... 字型檔這是固定在根目錄
ntdetect.com ... nt5.x 自檢程序 , 硬碟開機時...要在 \ 根目錄 , 光碟開機時...要在 \I386
註: NoName XPE ... ntdetct.com 改成 rxpe.com , I386 目錄 改成 RXPE 目錄
所以前面回文...好像有說到 ntdetect.com 的問題...大概就是 ntdetect.com 沒在根目錄
而由於 XPE 的 設定檔 沒有指定 XPE 的 IMG 在那個分割表的功能...所以
sif 設定檔 和 PE IMG 和 其它開機相關檔(bootfont.bin ntdetect.com) 都要在 啟動分割
簡單說...開機...不是 開機(引導)檔 載入完就沒事
如果 開機環境 是錯誤的...例如 啟動分割 錯誤...找不到 設定檔...系統所在分割位置不對
都會影響到 系統的開機(引導)檔 ...開機時發生錯誤
前面說了
一個正常的硬碟啟動是
MBR -> 啟動分割 PBR -> 開機(引導)檔
在只有一個 開機系統 時...開機環境 通常不會有錯
例如
啟動分割 為 第1個分割... 只有1個 XPE 開機 ... XPE 檔案都在 第1個分割中
XPE SETUPLDR.BIN 開機
NT 5.x MBR -> 啟動分割 NT 5.x PBR -> NTLDR
註: SETUPLDR.BIN 要改名成 NTLDR , ntdetect.com 之類的相關檔要在 \ 根目錄
由於檔案都在 啟動分割 ...所以 XPE 開機原則上不會有問題
但如果要做 多重開機 ... 例如 Win7 + XPE
這就是扯到所使用的 多重開機 其方式和原理
多重開機 ... 比較原始的方式是...直接修改 MBR 的 啟動分割 標記
這個的好處是...附和 原始的 開機環境 ... 較不易出錯... 但使上麻煩(而且要搞清楚各別的啟動分割)
開機流程 大概是
MBR -> 多重開機 修改 啟動分割 -> 啟動分割 PBR -> 開機(引導)檔
所以實際上...就多重開機中 單1個 開機...還是照原始正常的
MBR -> 啟動分割 PBR -> 開機(引導)檔
SPFDISK 使用的...基本上就是這個方式
只是 SPFDISK 除了可以 修改 啟動分割 ... 也可以順便修改其它分割是否隱藏
但要注意的是... SPFDISK 是以... 硬碟/分割區 位置 來記錄的
也就是如果...如果 位置 有異動...那可能就會出問題...要重新設定一次
另外...開機環境 中 硬碟位置 分割位置 開機硬碟 開機分割 啟動分割 開機分割LBA 等
不同情況也會影響到開機...而這個又扯到
不同的 MBR PBR 開機(引導)檔 ... 對於以上 環境 的 偵測,設定...在處理上也會有差異
例如
SETUPLDR.BIN 要在第1個開機硬碟位置(0x80) ... 但可以不是 啟動分割 ... 只要為 開機分割 即可
舉例
假設...用vbox...有2個硬碟 (hd0) (hd1)
這裡我用 grub4dos 的表示法... hd0 是第1個硬碟
(hd0) 用 spfdisk 多重開機 MBR ( 開機選單 以下 4個分割都有 )
(hd0) 有 2個主分割...(hd0) 啟動分割為第1個 (hd0,0)
(hd0,0) PBR 用 NT 5.x 裡面放 grub4dos (GRLDR改名 NTLDR)
(hd0,1) 空的
(hd1) 用 spfdisk 一般MBR
(hd1) 有 2個主分割...(hd1) 啟動分割為第1個 (hd1,0)
(hd1,0) PBR NT6.x , Win7 PE(原始的)
(hd1,1) PBR NT5.x , XPE
PBR NT5.x 載入的是 NTLDR , NT6.x 載入的是 BOOTMGR
vbox 用 (hd0) 開機...會進 spfdisk 多重開機
如果 SPFDISK 多重開機... (hd1,1) 開機 有設定 磁碟置換 ... 會正常進入 XPE
反之...若沒設定 磁碟置換 ... 會出現 NTLDR 載入失敗的錯誤
這是因為 NT 5.x PBR 在載入 NTLDR 時...是以 第1個開機硬碟 為主 (0x80硬碟)
SPFDISK 多重開機 MBR ... 用 (hd1,1) 開機...沒設定 磁碟置換 時
開機硬碟 為 0x81 (第2個硬碟)...啟動分割 和 開機分割 都為 第2分割
注意...這裡 硬碟位置...並沒有改變 ... 但 啟動分割 由 第1 變 第2
而 NT 5.x PBR ... 則跑去讀 0x80(第1個硬碟) 的 第2分割
也就是 沒磁碟置換 時... SPFDISK 多重開機用 (hd1,1) 開機時
(hd1,1) 的 NT 5.x PBR ... 是去載入 (hd0,1) 的 NTLDR
但 (hd0,1) 中沒 NTLDR ... 所以會載入失敗
而有設 磁碟置換 時 , (hd1) 會改為 0x80 硬碟
NT5.x PBR 才能正確的載入到 (hd1,1) 的 NTLDR
而如果把 SPFDISK 多重開機 MBR ... 改成用 GRUB4DOS 多重開機
假設 (hd1) 的 啟動分割 為第1分割 (hd1,0)
在 GRUB4DOS 中...只要做 硬碟置換 ... 之後載入 PBR 就可以了
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
chainloader (hd0,1)+1
boot
注意
這裡 啟動分割 並沒有改變...還是 第1分割 (hd1,0)
只是 開機分割 應該為 第2分割 (hd1,1)
註: 上面的 chainloader (hd0,1)+1 ... 並沒錯...因為 (hd0) (hd1) 已經置換...所以是用 (hd0,1) = 原本的 (hd1,1)
也就是如果以上情況來推論
NT5.x PBR 和 NTLDR 是以 0x80硬碟開機...只要設定 開機分割 ...不會偵測 MBR 中 啟動分割 標記
NT5.x PBR 大概是以 PBR 所在分割 設為 開機分割 ... 因為上面的 Grub4dos 指令...我並沒有用 root 設定 開機分割
如果改用 chainloader (hd0,1)/ntldr
chainloader 如果是載入檔案...也會順便設定一下 開機分割 ... 所以也不用設定
如果用 vbox 本身開機選單...選 (hd1) 開機
Win7PE (hd1,0) ... 開機也是會失敗
因為 vbox 硬碟開機...好像也不會做 磁碟置換 ... 只是 開機硬碟 設為 0x81
結果 (hd1) 的 "SPFDISK 的一般MBR" 好像也是用 0x80 去開機...跑去讀 (hd0,0) 的資料
這裡把 (hd1) 的 MBR ... 用 DiskGenius 重置 MBR
再用 vbox 選 (hd1) 開機...DiskGenius 的 MBR 就可以正常進入 Win7PE
而 NT6.xPBR + Win7 PE 放在第2個硬碟
用 SPFDISK 多重開機 MBR
沒磁碟置換 時 ... 反而正常
有磁碟置換 時 ... 反而卡死 (這裡 bootmgr 看上去有載入到...但就是黑屏卡死)
這可能又是 開機硬碟 啟動分割 開機分割...等等之類開機環境的錯誤照成的...我就不詳細去測試推
所以說了一堆
結論簡單就是...Legacy Bios 開機 它媽的是很簡單...又它媽的很複雜的
簡單 是因為...他 開機流程 就是那樣而以
複雜 是因為... MBR PBR 開機(引導)檔 ... 開機的環境設定(開機硬碟 硬碟位置 啟動分割 開機分割..等等等)
這些在一定程度上都可以意替換...所以可能出現 N 種情況和可能
也就是...如果你對這些東西不熟...胡亂搞...就很容易出錯
要用 SPFDISK 來開機...就要對 SPFDISK 開機的方式和原則有瞭解
要用 GRUB4DOS 就要對 GRUB4DOS 有瞭解
而這些基本功...又在於對 開機流程 , MBR , PBR , 開機(引導)檔 , 開機的環境設定 ... 瞭不瞭解
老實說我也吃不透每一種情況...只能實做實測才知道
一般而言...選一種自己比較熟的 多重開機 ... 然後把基本功摸熟一點 就好了
個人還比較愛用 Grub4Dos ... 功能比較強... 至少專業方面...它本來就是在做 開機管理
SPFDISK 只是分割程式...附加可以 管理開機 而以
就 管理開機 來說...grub4dos 比較彈性...可以依情況做調整
SPFDISK 比較死板...受限會比較多
我最初幫人家電腦用 Win系統 + 還原系統 (那時 Win 還在 98 , XP 好像還沒出還是剛出)
多重開機 也是用 SPFDISK , 還原系統 是 Dos + Ghost
那時 Grub4Dos 好像比較不成熟 ... 有沒有都不太清楚
那時 ADSL 才剛出吧 ... 網路上大概也不好找...重點是那時我好像也沒裝ADSL...用撥接那速度就不說了
不過那時...開機環境也不會搞的太複雜...而且都是1顆硬碟...沒跨碟開機情況
等後裝 ADSL 又和 NoN大的 XPE 第一接觸...不久後又接觸到 GRUB4DOS ...我就轉換陣營了
其實 單硬碟 環境情況不複雜下...SPFDISK 的多重開機 還是不錯用啦
但要搞清楚每一個 系統 使用的 啟動(開機)分割
基本上 XP 以後
"開機(引導)檔 所在 啟動(開機)分割"
和
"Windows 所在 分割"
可以不同分割
雖然 XP 的做法還是放到一起
不過 win7 以後預設是分開的 ( win7那個 100M 和 win8 的 350M )
也就是...
如果有3個分割 (hd0,0) (hd0,1) (hd0,2)
Windows 在 (hd0,1)
但 開機(引導)檔 在 (hd0,0)
你用 SPFDISK 多重開機...去搞 (hd0,1) 開機...也不會進入 Windows ... 因為開機檔在 (hd0,0)
withthewind 大 說的不錯 程式是死的,運用是活的
不過...不要 "知其然而不知其所以然"
從實做中...培養一下基本功...虛擬PC 多玩一下就好了 |