作者 主題: MBR一問  (閱讀 16407 次)

0 會員 與 1 訪客 正在閱讀本文。

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
MBR一問
« 於: 2008-08-22 10:14 »
有關MBR的部份想請教一下,希望各位不吝教導,小弟必虛心求教:

問題一:每一顆硬碟的第一個磁區為MBR磁區(512Bytes),如果我接四個硬碟在個人電腦上,是不是就有4個MBR磁區?開機時只會去Primary Mater那一個MBR讀取Boot Loader?其它MBR磁區就沒有需要了呢?

問題二:一般軟碟機的軟碟片,它的第一個磁區也稱為MBR磁區嗎?它也是512Bytes?如果我將Boot Loader放在軟碟的MBR上,就可以當開機片?

問題三:如果我的電腦是用光碟開機,光碟片上的第一個磁區也稱為MBR磁區512Bytes?它也是512Bytes?如果是我只要想辦法將boot loader燒錄到MBR磁區我就可以當光碟開機片?

問題四:MBR的前446Bytes為存放Boot Loader的位置,這是不是說明,任何一種Boot Loader的程式大小,最大就是446Bytes?如果寫出來的Boot Loader比這個大,又如法縮小時, 該如何呢?


UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
Boot Loader一問
« 回覆 #1 於: 2008-08-22 10:40 »
抱歉再補問一個有關Boot Loader問題

當開機後會去MBR讀取Boot Loader程式,但Boot Loader不一定放在MBR上(假設是Primary Mater):
問題一:BIOS會去其它硬碟上的MBR讀取Boot Loader嗎?例如,Primary Slave, Secondary Master, or Secondary Slave?

書上說可以將Boot Loader放在Super Block上:
問題二,Super Block在哪裡呢? Super Block是Linux檔案系統才有的東西嗎?
問題三,Boot Loader沒有放在MBR上,這時BIOS找不到Boot Loader, 不就會顯示沒有開機系統了嗎? 是什麼樣的機制找到Boot Loader的呢?

 

jaymsa

  • 活潑的大學生
  • ***
  • 文章數: 409
  • 性別: 男
    • 檢視個人資料
    • Jay's Blog
回覆: Boot Loader一問
« 回覆 #2 於: 2008-08-22 12:50 »
抱歉再補問一個有關Boot Loader問題

當開機後會去MBR讀取Boot Loader程式,但Boot Loader不一定放在MBR上(假設是Primary Mater):
問題一:BIOS會去其它硬碟上的MBR讀取Boot Loader嗎?例如,Primary Slave, Secondary Master, or Secondary Slave?

書上說可以將Boot Loader放在Super Block上:
問題二,Super Block在哪裡呢? Super Block是Linux檔案系統才有的東西嗎?
問題三,Boot Loader沒有放在MBR上,這時BIOS找不到Boot Loader, 不就會顯示沒有開機系統了嗎? 是什麼樣的機制找到Boot Loader的呢?

 
問題一我想應該是不會吧?!因為在BIOS內只會指定開機HD,相對只會去讀取此HD的MBR吧?!
問題二SuperBlock是放在Boot Block後面DataBlock前,應該是都有吧?但可能是各系統名稱不一樣!!
問題一三
在 ROM BIOS 啟動安裝常式的結尾部分,BIOS 會讀取及執行系統上第一個軟碟或硬碟的第一個實體磁區。 硬碟的第一個磁區名為主開機記錄 (有時亦稱為磁碟分割表或主開機區塊)。在硬碟中,這個磁區的開頭有一個小程式。 磁碟分割資訊或磁碟分割表會儲存在這個磁區的結尾。這個程式使用磁碟分割資訊以判斷哪一個磁碟分割可以開機 (通常是第一個主要 DOS 磁碟分割) 並會試圖從它開機。
Linux真好玩...博大精深!!
RHCE,ISO27001,ISO20000
http://jayclub.no-ip.org/jayblog

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #3 於: 2008-08-22 13:23 »
很感謝您的答覆.

對於問題三的答覆,我想在請教一下!
引用
在硬碟中,這個磁區的開頭有一個小程式。 磁碟分割資訊或磁碟分割表會儲存在這個磁區的結尾。這個程式使用磁碟分割資訊以判斷哪一個磁碟分割可以開機 (通常是第一個主要 DOS 磁碟分割) 並會試圖從它開機。
1.您所說的這個磁區是指MBR嗎?
2.您所說的開頭有一個小程式是指Boot Loader嗎?




jaymsa

  • 活潑的大學生
  • ***
  • 文章數: 409
  • 性別: 男
    • 檢視個人資料
    • Jay's Blog
回覆: MBR一問
« 回覆 #4 於: 2008-08-22 14:08 »
很感謝您的答覆.

對於問題三的答覆,我想在請教一下!
引用
在硬碟中,這個磁區的開頭有一個小程式。 磁碟分割資訊或磁碟分割表會儲存在這個磁區的結尾。這個程式使用磁碟分割資訊以判斷哪一個磁碟分割可以開機 (通常是第一個主要 DOS 磁碟分割) 並會試圖從它開機。
1.您所說的這個磁區是指MBR嗎?
2.您所說的開頭有一個小程式是指Boot Loader嗎?

1.恩MBR...
相關您可以參考http://zh.wikipedia.org/wiki/MBR
2.沒錯是BootLoader(GRUB...之類的)
3.不過在每個分割區也會有BootBlock
在linux中是
BootBlock---SuperBlock----DateBlock----InodeBlock這樣規劃的!!
Linux真好玩...博大精深!!
RHCE,ISO27001,ISO20000
http://jayclub.no-ip.org/jayblog

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #5 於: 2008-08-22 14:14 »
感謝您的答覆!

我的問題是

問題三,Boot Loader沒有放在MBR上,這時BIOS找不到Boot Loader, 不就會顯示沒有開機系統了嗎? 是什麼樣的機制找到Boot Loader的呢?

這點我還是不懂耶!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
回覆: MBR一問
« 回覆 #6 於: 2008-08-22 14:16 »
1。 是的就是有 4 個。開機時可以只用其中一個,也可以全部都用。但就算不用來開機,每顆硬碟的 partition table 也是在 mbr 啊,所以不能沒有 mbr 。

2。只要有 loader 就可以開機。用甚麼設備開機,就看 BIOS 的設定。

3。應該是同理的。不過光碟的演算方式跟硬碟不太一樣。如果忽略差異,是同理的。

4。不是,不是剛剛好 446 byte。如果小于 446 就整個 loader 塞進去,如果超過 446 就塞 1st stage,然後找到 2nd stage, 才是 loader 程式碼。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
回覆: MBR一問
« 回覆 #7 於: 2008-08-22 14:22 »
開機時 BIOS 是到 MBR 找 loader 沒錯。
但如果你有裝多個 os 或 loader,MBR 只能放最後寫入 loader。
這樣,假如你不想改變原有在 MBR 的 loader,那就將新 loader 裝到 partition 的 boot sector 。
然後等 MBR 的 loader 完整載入(有些需要兩階段)之後,再用 chainloader 的方式,指到 partition boot sector 上的 loader 就可以了。

舉個例子,你有 os1 跟 os2,而 mbr 是用 os1 的 loader,然後 os2 的 loader 放 partition boot sector。
那麼可用的開機選項有(不局限)如下:
1. bios -> mbr -> loader1 -> os1
2. bios -> mbr -> loader1 -> partition boot sector -> loader2 -> os2

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #8 於: 2008-08-22 15:00 »
很感謝Netman博士的回答!小弟受益匪淺!

可否再請教!
1。 是的就是有 4 個。開機時可以只用其中一個,也可以全部都用。
您的意思是,boot loader放在Primary Master的MBR上,其它的MBR只是記錄Partition table的訊息,即使有Boot Loader也用不到?

4。不是,不是剛剛好 446 byte。如果小于 446 就整個 loader 塞進去,如果超過 446 就塞 1st stage,然後找到 2nd stage, 才是 loader 程式碼。
那2nd stage要放在哪裡呢?

partition boot sector
這個sector是在partition時會被切出來的sector?還是每一個partition的第一個sector就是partition boot sector?它的大小也是512Bytes?

您所謂的chainloader 的方式
是1st stage執行完後,呼叫2nd Stage的main()嗎?




netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
回覆: MBR一問
« 回覆 #9 於: 2008-08-22 15:12 »
不同的作業系統實作上或有不同。
如果以 linux 為例子來談,會比較統一些。

MBR 在每個 device 上都是 512byte,前面 446byte 放 boot loader,然後 64byte 放 partition table (primaryx4),最後 2byte 是 magic number。

簡單來說,沒有 partition table,就不知道硬碟的 partition 怎切的。(extended 部份這裡先略過)
所以每一個 disk 的 partition 都要使用。

但 loader(446byte)就看你喜歡怎用了。
你可以將全部都灌進 loader 去,但 BIOS 只會選用其一來開機,
也就是弱水三千只取一瓢飲。

每個 partition 是用 cylinder 來劃分的。
然後在 partition 的 1st cylinder 開始算的第一個 sector 就是 boot sector,其後就是 file system(含 super block, group descriptor,bit maps, inode tables, date block, etc.)。
如果 loader 超過 446 byte,那 1st stage 可以放 MBR 也可以放 boot sector。
然後 2nd stage 就是放在 file system 裡面,一般就是 /boot 目錄下面。
不管放哪,只要找到 1st 就能找到 2nd。

因此所謂的 chainloader 就是從一個 2nd 找到另一個 1st 再找到另一個 2nd 。
至於第一個 2nd,就是從 mbr 的 1st 找到的。

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #10 於: 2008-08-22 15:27 »
讓小弟說句真心話!佩服!不愧是博士!小弟受益良多!

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #11 於: 2008-08-22 16:10 »
可否再請教一下!

個人電腦(PC)開機時,會先去執行BIOS的程式,一般的電腦書籍都這樣的告訴我.
這樣的一句話,電腦主機版是如何辦到的.

我的問題是,BIOS程式是存在EEPROM上面,而CPU又透過南橋北橋晶片才存取EEPROM,這樣的架構下,
是如何完成"先去執行BIOS的程式"這件事的呢?是否要先啟動EEPROM的驅動程式之類的前置作業嗎?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
回覆: MBR一問
« 回覆 #12 於: 2008-08-22 16:12 »
BIOS 只要接通電源就會跑。
不過,會先跑 POST(Power On Self Test),
等 POST 過了,就會載入 BIOS 。

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #13 於: 2008-08-22 16:35 »
可否在請教一下!

BIOS 的程式如何寫出來的? C 語言or 組合語言呢?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
回覆: MBR一問
« 回覆 #14 於: 2008-08-22 22:07 »
可否在請教一下!

BIOS 的程式如何寫出來的? C 語言or 組合語言呢?
這個我就不清楚了...

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #15 於: 2008-08-25 12:02 »
還是感激再感激!

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: MBR一問
« 回覆 #16 於: 2008-08-25 12:49 »
BIOS 的程式如何寫出來的? C 語言or 組合語言呢?

只要做出來的東西一樣, 用什麼寫的有什麼差別嗎?
難道用 C 印出 123 會與用組合語言印出的 123 有所不同嗎?

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: MBR一問
« 回覆 #17 於: 2008-08-25 13:24 »
可否在請教一下!

BIOS 的程式如何寫出來的? C 語言or 組合語言呢?

我知道幾年前都是用組合語言, 用C寫還是會比組合語言佔空間

現在BIOS儲存空間都比以前大, 可能會有人用C寫吧  ::)

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #18 於: 2008-08-25 13:35 »
感謝各位的指導!

我問這個問題的出發點是:
如果是組語寫的,我可能就放棄進一步的學習.我對它有點學習障礙!
如果是C寫的,到是可以看看內容有些什麼.雖然不一定看得懂!

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: MBR一問
« 回覆 #19 於: 2008-08-25 13:39 »
你可以寫信到幾個主機版廠商, 或是寫 BIOS 的廠商問問嘍

說不定他們會給你答案 ^_^

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5396
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: MBR一問
« 回覆 #20 於: 2008-08-25 15:49 »
主機板的廠商應該不會給你 source code.
有興趣可以參考 coreboot (LinuxBIOS) 的程式碼: http://www.coreboot.org/

日京三子

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 8830
    • 檢視個人資料
    • http://www.24online.cjb.net
回覆: MBR一問
« 回覆 #21 於: 2008-08-25 16:01 »
大部分主機板的BIOS,有極大部份是請廠商撰寫,他們自己也只拿到BIN而已.....
哈克不愛的多合一輸入平台----->新香草口味
過去的時間不斷流逝,抹去的眼淚已成追憶;
乾枯的雙手無力阻止,再會了我遠去的曾經。

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #22 於: 2008-08-25 18:11 »
真的很感激各為的指導!
這裡充滿人了無限的人情味!
這樣講會不會有點....
真的很感激!

damon

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 4227
    • 檢視個人資料
    • http://blog.damon.tw/
回覆: MBR一問
« 回覆 #23 於: 2008-08-25 20:33 »
bios是寡佔的市場,大概就是ami , phoenix這兩家吧,其他的大概都是沒有人聽過的

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #24 於: 2008-08-26 15:51 »
感謝大家!小弟有點傻傻的,想再請教有關Super Block問題:

一顆硬碟在MBR(Master Boot Recorder)中只能記錄4筆分割區的記錄。而分割區可分為主分割區(Primary Partition)或延伸分割區(Extended Partition)兩類。主分割區不能再切割,而延伸分割可以再切割,再切割出來的分割區,我們稱為邏輯分割區(Logical Partition)。而分割區的相關訊息,包括起始磁柱,與結束的磁柱等,都會被記錄在MBR當中。分割單位為磁柱(Cylinder)。分割區有所謂啟動(Active)選項,如果此分割區內,存放開機影像檔時,你可以設定它為啟動分割區。同時你分割好的分割區,你需要設定檔案系統的代碼,這些資訊都會被記錄在MBR當中的Partition Table中。因此,Boot Loader程式在執行時,可以藉由Partition Table得知,分割區是被設定成那一種檔案系統。

有一種說法是,在磁碟分割之後,每一個分割區,不論是主分割區(Primary Partition)或延伸分割區(Extended Partition),其最前面會有一塊磁區,稱為Super Block。而這個延伸分割區的Super Block中,會記錄該延伸分割區所再規劃出來的邏輯分割區的相關訊息,也就是邏輯分割區的Partition Table。邏輯分割區的代碼是從5到63,共59個。所以總共可以分割出59個邏輯分割區(Logical Partition)。如果以上的說法是正確的。

問題一:
Super Block的大小為何?它又如何記錄這59筆邏輯分割區的相關訊息呢?MBR中的Partition Table又如何去記錄延伸分割區的的相關訊息呢?如果,存放開機影像檔的磁區,沒有設為啟動時,是否就不能開機呢? 邏輯分割區是否也可以設定為啟動分割區呢?

另一種說法是,當分割區切割完成後,並且設定好檔案系統的代碼。以ext2的檔案系統為例。物理上,硬碟的最小單位為磁區(512Bytes),如果每次以一個磁區讀寫一次,則效率會比較差。因此,規劃成每次讀取1024 / 2048 / 4096 Bytes。這個大小稱為Block。所以,ext2的整個檔案系統,最前面是Super Block,再來是一個一個的Block Group,總共有n個Block Group。每一個Block Group又細分為Group Description,Block Bitmap,Inode Bitmap,Inode Table,Data Blocks。

問題二:
這裡所提到的Super Block。它的大小,是在檔案系統格式化時才決定的嗎?它與前面第一種說法所提的Super Block有何差異呢? 尤其是與延伸分割區的Super Block,它們兩者之間有何不同呢? Super Block是ext2檔案系統才有的名詞嗎?其它的檔案系統,也有Super Block嗎?


« 上次編輯: 2008-08-26 16:05 由 UT »

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #25 於: 2008-08-28 14:18 »
可否再請教一下!

個人電腦(PC)開機時,會先去執行BIOS的程式,一般的電腦書籍都這樣的告訴我.
這樣的一句話,電腦主機版是如何辦到的.

我的問題是,BIOS程式是存在EEPROM上面,而CPU又透過南橋北橋晶片才存取EEPROM,這樣的架構下,
是如何完成"先去執行BIOS的程式"這件事的呢?是否要先啟動EEPROM的驅動程式之類的前置作業嗎?

我在wiki找到這樣的解釋:

引用
The i386 family of processors boot up in real mode, the code in the MBR is real mode machine language instructions.

我的翻譯是:

Intel i386處理器在電源開啟時會以 Real Mode的方式來定址,在MBR上的程式碼是屬於Real Mode的機械語言指令.


引用
Real mode, also called real address mode, is an operating mode of 80286 and later x86-compatible CPUs. Real mode is characterized by a 20 bit segmented memory address space (meaning that a maximum of 1 MB of memory can be addressed), direct software access to BIOS routines and peripheral hardware, and no concept of memory protection or multitasking at the hardware level. All x86 CPUs in the 80286 series and later start in real mode at power-on; 80186 CPUs and earlier had only one operational mode, which is equivalent to real mode in later chips.

我的翻譯是:

Real Mode,也叫做Real Address Mode,是80286CPU或以後的x86相容型CPU運作時的其中一種定址模式.Real Mode的特性是利用20條位址線所對應出來的一段記憶體空間.(也就是最大1MB的記憶體空間,可以被CPU定址後存取),它可以直接存取BIOS內的Routines(程式)及週邊的硬體,並且沒有任何的記憶體保護概念,或是硬體層次上的多工作業. 在80286系列或之後, 所有的x86CPU在電源開起後, 都會以Real Mode的方式運作.而80186或是更早期的CPU只有一種操作模式, 這種運作模式類似於後來晶片的Real Mode運作模式.


所以開機時,不需要任何的驅動程式,CPU就可以用Real Mode的方式將BIOS上的機械指令,讀入CPU中執行.等BIOS內的程式執行完畢,再將執行控制權,交給MBR上的機械指令來執行.

以上的理解, 不知是否正確?

如果正確,我是否可以這樣的推論:

BIOS及MBR的地址(Address), 都必須在20條位址線所對應出來的一段記憶體空間.(最大1MB的記憶體空間內)!
如此CPU才可直接定址,並執行指令!
« 上次編輯: 2008-08-28 15:04 由 UT »

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #26 於: 2008-08-28 23:21 »
可否在請教一下!

BIOS 的程式如何寫出來的? C 語言or 組合語言呢?

我知道幾年前都是用組合語言, 用C寫還是會比組合語言佔空間

現在BIOS儲存空間都比以前大, 可能會有人用C寫吧  ::)


在網路上忽然間找到這個部落格小華的部落格http://biosengineer.blogspot.com/
裡面寫了很多有關BIOS的東東! 只可惜,我看不懂!
但最起碼我知道BIOS程式,有些是用組語,有些是用C!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
回覆: MBR一問
« 回覆 #27 於: 2008-08-29 01:16 »
不錯啊!懂得自己找資料就已經學到了。

加油!

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #28 於: 2008-08-29 06:57 »
我會繼續努力的!雖然我看不懂!那我就一直看一直看.....

希望我能做得到,也希望前輩能拉我一下, 幫我bootstrip一下

UT

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
回覆: MBR一問
« 回覆 #29 於: 2008-08-29 07:08 »
問題二:一般軟碟機的軟碟片,它的第一個磁區也稱為MBR磁區嗎?它也是512Bytes?如果我將Boot Loader放在軟碟的MBR上,就可以當開機片?

wiki 的解釋
引用
A master boot record (MBR), or partition sector, is the 512-byte boot sector that is the first sector ("LBA Sector 0") of a partitioned data storage device such as a hard disk. (The boot sector of a non-partitioned device is a Volume Boot Record. These are usually different, although it is possible to create a record that acts as both; it is called a Multi Boot Record.)

我的翻譯:

主開機磁區記錄(MBR: Master Boot Record),也可以稱為記錄分割資料的磁區(Partition Sector)。它是一個長度為512位元組的開機磁區,它位於可分割資料儲存裝置(例如:硬碟)的第一個磁區位置(也就是邏輯區塊定址法中的第0個磁區"LBA Sector 0")。 另外,無法分割資料儲存裝置的開機磁區,我們稱為裝置開機磁區(Volume Boot Record)。通常,它們兩者之間是不相同的。一個開機磁區,如果可以扮演兩個角色,它會被稱為多重開機磁區(Multi Boot Record)。


所以問題二的答案是: 裝置開機磁區(Volume Boot Record)。

但所謂的多重開機磁區(Multi Boot Record) 我就看不懂了.
Wiki 的超連結告訴我 Wikipedia does not have an article with this exact name.....
« 上次編輯: 2008-08-29 07:18 由 UT »