參考:
Linux開機過程
Linux啟動流程
電腦是如何啟動的 引言
每個硬碟最多有一個MBR,這個MBR有512Bytes,以0x55開始,0xAA結束。MBR分為446Bytes與64Bytes,前446Bytes是一些開機的資訊,後64Bytes是分區表資訊,每個分區有16Bytes,所以最多有4個主要磁碟分割。但是有一種擴充分區,Linux中最多有一個擴充分區,擴充分區中還可以有邏輯分區,邏輯分區理論上沒有上限。
每個分區中可以裝一個作業系統,每個作業系統啟動時需要一個boot loader來啟動它,這個boot loader會放在一個叫boot sector的地方。即每個分區開始處就會有一個boot sector,裡面存放的是這個作業系統的引導程式,也就是分區引導程式。所以開機過程中MBR會找到這個boot secotr,然後啟動boot loader。Linux中最常見的boot loader就是Grub。
但是如果我有多個作業系統怎麼辦呢。這時MBR中就會跳過尋找分區表中的啟用分區,而是啟動boot loader,比如Grub。然後讓我們自己來選取啟動哪個作業系統。
之後電腦的控制權就交給Grub來處理。 Boot loader 主要功能: 提供選單。如果你有多個作業系統,那麼就是讓你選擇啟用那個作業系統的Boot sector。 載入kernel。直接指向可以開機的程式段來開始作業系統。 轉交給其他loader。
這個圖中的MBR就是啟動了Boot loader來讓我們自己選擇載入哪個作業系統的kernel檔案。圖中紅色就是kernel檔案。 開機過程
首先是充電,啟動BIOS進行硬體自檢,然後BIOS把控制權轉交給下一個階段的啟動程式。
這個下一個階段的啟動程式存放在哪個裝置中呢。即BIOS需要一個外部裝置的排序,根據排序以及外部裝置的內容來轉交控制權。
BIOS找到一個優先順序最高且可作為啟動裝置的裝置之後,就把控制權交給這個裝置的MBR,即下一個階段的啟動程式。
在MBR中後64位元組記錄了整個裝置的大致分區情況。根據MBR的資訊找到boot loader,然後根據boot loader啟動作業系統的kernel。
上述過程完成之後,控制權就轉交給作業系統了。 grub
Grub是Linux的一個常用boot loader,可以根據grub來載入Linux核心。