1. 程式人生 > 其它 >linux中mbr的結構以及備份和還原方法

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 所示。

表 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)可以呼叫在分割槽的引導扇區中的其他啟動載入程式。

因此,啟動載入程式擁有以下功能:

  1. 載入作業系統的核心。這是啟動載入程式最主要的功能。
  2. 擁有一個可以讓使用者選擇的選單,來選擇到底啟動哪個系統。大家如果在伺服器上安裝過雙 Windows 系統,就應該見過類似的選擇選單,不過這個選擇選單是由 Windows 的啟動載入程式提供的,而不是 GRUB。
  3. 可以呼叫其他的啟動載入程式,這是多系統啟動的關鍵。不過需要注意的是,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... 研究起來是比較有意思的.