linux中mbr的結構以及備份和還原方法
linux備份mbr的方法
MBR 也就是主引導記錄,位於硬碟的 0 磁軌、0 柱面、1 扇區中,主要記錄了啟動載入程式和磁碟的分割槽表。我們通過圖 1 來看看 MBR 的結構。
圖 1 MBR的結構
MBR 共佔用了一個扇區,也就是 512 Byte。其中 446 Byte 安裝了啟動載入程式,其後 64 Byte 描述分割槽表,最後的 2 Byte 是結束標記。我們已經知道,每塊硬碟只能劃分 4 個主分割槽,原因就是在 MBR 中描述分割槽表的空間只有 64 Byte。其中每個分割槽必須佔用 16 Byte,那麼 64 Byte 就只能劃分 4 個主分割槽。每個分割槽的 16 位元組的規劃如表 2 所示。
儲存位元組 | 資料內容及含義 |
---|---|
第 1 位元組 | 引導標誌 |
第 2 位元組 | 本分割槽的起始磁軌號 |
第 3 位元組 | 本分割槽的起始扇區號 |
第 4 位元組 | 本分割槽的起始柱面號 |
第 5 位元組 | 分割槽型別,可以識別主分割槽和擴充套件分割槽 |
第 6 位元組 | 本分割槽的結束磁軌號 |
第 7 位元組 | 本分割槽的結束扇區號 |
第 8 位元組 | 本分割槽的結束柱面號 |
第 9~12 位元組 | 本分割槽之前已經佔用的扇區數 |
第 13~16 位元組 | 本分割槽的總扇區數 |
大家注意到了吧,MBR 中最主要的功能就是儲存啟動載入程式。
啟動載入程式的作用
BIOS 的作用就是自檢,然後從 MBR 中讀取出啟動載入程式。那麼,啟動載入程式最主要的作用就是載入作業系統的核心。當然,每種作業系統的啟動載入程式都是不同的。
每種作業系統的檔案格式不同,因此,每種作業系統的啟動載入程式也不一樣。不同的作業系統只有使用自己的啟動載入程式才能載入自己的核心。如果我的伺服器上只安裝了一個作業系統,那麼這個作業系統的啟動載入程式就會安裝在 MBR 中。BIOS 呼叫 MBR 時讀取出啟動載入程式,就可以載入核心了。
但是在有些時候,我的伺服器中安裝了多個作業系統,而 MBR 只有一 個,那麼在 MBR 中到底安裝哪個作業系統的啟動載入程式呢?
很明顯,一個 MBR 是不夠用的。每塊硬碟只能有一個 MBR 是不能更改的,所以不可能増加 MBR 的數量。系統只能在每個檔案系統(可以看成分割槽)中單獨劃分出一個扇區,稱作引導扇區(Boot Sector)。每個分割槽的引導扇區中也能安裝啟動載入程式,也就是說,在 MBR 和每個單獨分割槽的引導扇區中都可以安裝啟動載入程式。這樣多個作業系統才能安裝在同一臺伺服器中(每個作業系統要安裝在不同的分割槽中),而且每個作業系統都是可以啟動的。
還有一個問題,BIOS 只能找到 MBR 中的啟動載入程式,而找不到在分割槽的引導扇區中的啟動載入程式。那麼,要想完成多系統啟動,我們的方法是増加啟動載入程式的功能,讓安裝到 MBR 中的啟動載入程式(GRUB)可以呼叫在分割槽的引導扇區中的其他啟動載入程式。
因此,啟動載入程式擁有以下功能:
- 載入作業系統的核心。這是啟動載入程式最主要的功能。
- 擁有一個可以讓使用者選擇的選單,來選擇到底啟動哪個系統。大家如果在伺服器上安裝過雙 Windows 系統,就應該見過類似的選擇選單,不過這個選擇選單是由 Windows 的啟動載入程式提供的,而不是 GRUB。
- 可以呼叫其他的啟動載入程式,這是多系統啟動的關鍵。不過需要注意的是,Windows 的啟動載入程式不能呼叫 Linux 的啟動載入程式,所以我們一般建議先安裝 Windows,後安裝 Linux,是為了將 Linux 的啟動載入程式安裝到 MBR 中,覆蓋 Windows 的啟動載入程式。
當然,這個安裝順序不是絕對的,就算最後安裝了 Windows,我們也可以通過手工再安裝 GRUB 的方法,來保證 MBR 中安裝的還是 Linux 的啟動載入程式。
下圖為我們展示了啟動載入程式的作用。
備份MBR:
# dd if=/dev/sda of=/boot/boot.bak bs=446 count=1
恢復MBR:
# dd if=/boot/boot.bak of=/dev/sda bs=446 count=1
-為什麼不是512呢, 主引導扇區是一個扇區(512位元組呀)?
-只把主引導扇區的備份檔案boot.NNNN的前446個位元組重寫入主引導扇區。
boot.NNNN是我們在安裝Linux之前整個主引導分割槽的備份。如果我們把
512個位元組全部寫入主引導扇區就可能會把安裝了Linux後改變了的硬碟
DPT表也破壞掉.
MBR-> Main/MasterBootRecord, 有些書上是寫成Master的.
我認為可以分成三個部分吧, MBR+DPT+MagicNumber(446+64+2=512)
這 也就是為什麼進行MBR備份的時候要指定bs=512 或者 bs=1k, count=1的原因.然後恢復時經常看到HOWTO裡面是bs=446 count=1. 這個446就是指令部分的恢復, 不是DPT的恢復.往往MBR裡面的第一個指令是cli... 研究起來是比較有意思的.