1. 程式人生 > >【Linux】磁碟分割槽原理

【Linux】磁碟分割槽原理

磁碟連線的方式與裝置檔名的關係

  個人計算機常見癿磁碟介面有兩種, 分別是 IDE 與 SATA 介面,目前主流已經是 SATA 介面了,但是老一點主機其實大部分還是使用 IDE 介面。 我們稱呼可連線到IDE介面癿裝置為IDE 裝置,不管是磁碟還是光碟裝置。

  以 IDE 介面來說,由兩個 IDE 扁平電纜可以連線兩個 IDE 裝置,又通常主機都會提供兩個IDE 介面,因此最多可以接到四個 IDE 裝置。 也就是說,如果你已經有一個光碟裝置了,那舉最多就只能再接三顆 IDE 介面。 這兩個IDE 介面通常被稱為 IDE1(primary)及 IDE2(secondary), 而每條扁平電纜上面IDE 裝置可以被區分為 Master(主裝置) 和Slave(從裝置)

。這四個 IDE 裝置檔名為:

這裡寫圖片描述

  再以 SATA 介面來說,由於SATA/USB/SCSI 等磁碟介面都是使用SCSI 模組來驅動, 因此這些介面的磁碟裝置檔名都是/dev/sd[a-p]的格式。 但是與IDE 介面不同的是,SATA/USB 介面的磁碟根本就沒有一定癿順序,那如何決定他癿裝置檔名呢? 這個時候就得要根據 Linux 核心檢測到磁碟的順序了!

例題:
如果你的 PC 上面有兩個 SATA 磁碟以及一個 USB 磁碟,而主機板上面有六個 SATA 的插槽。這兩個 SATA 磁碟分別安插在主機板上的SATA1, SATA5 插槽上, 請問這三個磁碟在Linux 中的裝置檔名為何?

答:
由二是使用偵測到的順序來決定裝置檔名,並非與實際插槽代號有關,因此裝置的檔名如下:
1. 
SATA1 插槽上的檔名:/dev/sda 2. SATA5 插槽上的檔名:/dev/sdb 3. USB 磁碟(開機完成後才被系統捉到):/dev/sdc

磁碟的組成

  整顆磁碟的第一個扇區特別的重要,因為他記錄了整顆磁碟的重要資訊! 磁碟的第一個扇區主要記錄了兩個重要的資訊,分別是:

• 主引導分割槽(Master Boot Record, MBR):可以安裝引導載入程式的地方,有 446 bytes

• 分割槽表(partition table):記錄整顆硬碟分割槽狀態,有64 bytes

  MBR 是很重要的,因為當系統在開機的時候會主動去讀這個區塊的內容,這樣系統才會知道你的程式放在哪裡和該如何執行開機

。如果你要安裝多重引導的系統,MBR 這個區塊的管理就非常非常的重要了!

磁碟分割槽表(partition table)

這裡寫圖片描述

  柱面是檔案系統的最小單位,也就是分割槽的最小單位,我們就是利用參考對照磁柱號碼的方式來處理的, 在分割槽表所在的64 bytes 容量中,總共分為四組記錄區,每組記錄區記錄了該區段的啟始與結束的磁柱號碼。若將硬碟以長條形來看,然後將磁柱以柱形圖來看,那那64 bytes的記錄區段有點像下面的圖示:

這裡寫圖片描述

  假設上面的硬碟裝置檔名為/dev/hda 時,那這四個分割槽在 Linux 系統中的裝置檔名如下所示, 重點在檔名後面會再接一個數字,這個數字與該分割槽所在的位置有關。

• P1:/dev/hda1
• P2:/dev/hda2
• P3:/dev/hda3
• P4:/dev/hda4

  根據上面的圖示說明,我們可以得到幾個重點資訊:

• 其實所謂的『分割槽』只是針對那個 64 bytes 的分割槽表進行設定而已!
• 硬碟預設的分割槽表僅能寫入四組分割資訊
• 這四組分割槽資訊我們稱為主 (Primary)或擴充套件(Extended)分割槽
• 分割槽的最小單位為柱面(cylinder)
• 當系統要寫入磁碟時,一定會參考磁碟分割槽表,才能針對某個分割進迚行資料的處理

  擴充套件分割槽的想法是:既然第一個扇區所在的分割槽表只能記錄四條資料, 那我可否利用額外的扇區來記錄更多的分割槽資訊?實際上圖示有點像下面這樣:

這裡寫圖片描述

  上圖當中,我們知道硬碟的四個分割槽記錄表僅使用到兩個,P1為主分割槽,而 P2則為擴充套件分割槽。請注意,擴充套件分割槽的目地是使用額外的扇區來記錄分割槽資訊,擴充套件分割槽本身不能被拿來格式化。然後我們可以透過擴充套件分割槽所指向的那個區塊繼續作分割槽的記錄。
  如上圖右下方那個區塊有繼續分割出五個分割槽, 這五個由擴充套件分割槽繼續切出來的分割槽,就被稱為邏輯分割槽(logical partition)。 同時注意一下,由於邏輯分割槽是由擴充套件分割槽繼續分割出來的,所以他可以使用的柱面範圍就是擴充套件分割槽所設定的範圍。也就是圖中的 101~400 啦!
同樣的,上述的分割槽在 Linux 系統中的裝置檔名分別如下:

• P1:/dev/hda1
• P2:/dev/hda2
• L1:/dev/hda5
• L2:/dev/hda6
• L3:/dev/hda7
• L4:/dev/hda8
• L5:/dev/hda9

  仔紳看看,怎舉裝置檔名沒有/dev/hda3和/dev/hda4 呢?因為前面四個號碼都是保留給 Primary(主分割槽)或 Extended(擴充套件分割槽) 用的! 所以邏輯分割槽的裝置名稱號碼就由 5 號開始了!這是個很重要的特性
主分割槽、擴充套件分割槽與邏輯分割槽的特性我們作個簡單的定義:

• 主分割槽與擴充套件分割槽最多可以有四個(硬碟的限制)

• 擴充套件分割槽最多隻能有一個(作業系統的限制)

• 邏輯分割槽是由擴充套件分割槽持續切割出來的分割槽

• 能夠被格式化後作為資料儲存的分割槽為主分割槽與邏輯分割。邏輯分割槽無法格式化

• 擴充套件分割槽的數量依作業系統而不同,在 Linux系統中,IDE 硬碟最多有 59 個邏輯分割(5 號到63 號), SATA 硬碟則有 11 個邏輯分割(5 號到 15 號)。

  事實上,分割槽是個很麻煩的東西,因為他是以柱面為單位的『連續』磁碟空間,且擴充套件分割槽又是個類似獨立的磁碟空間,所以在分割槽的時候得要特別注意。我們用例子來解釋一下好了:

例題:
在 Windows 作業系統當中,如果你想要將 DE 盤整合成為一個新的分割槽,而如果有兩種分割槽的情況如下圖所示, 圖中的特殊顏色區塊為 DE 盤的示意,請問這兩種方式是否均可將 DE 整合成為一個新的分割槽?

這裡寫圖片描述

答:
• 上圖可以整合:因為上圖的 DE 同屬於擴充套件分割槽內的邏輯分割,因此只要將兩個分割槽刪除,然後再重新建立一個新的分割槽, 就能夠在不影響其他分割槽的情況下,將兩個分割槽的容量整合成為一個。
• 下圖不可整合:因為 DE 分屬主分割槽與邏輯分割,兩者不能能夠整合在一起。除非將擴充套件分割槽破壞掉後再重新分割。 但如此一來會影響到所有的邏輯分割槽,要注意的是:如果擴充套件分割槽被破壞,所有邏輯分割槽將會被刪除。 因為邏輯分割槽的資訊都記錄在擴充套件分割槽裡面。

  由二第一個扇區所記錄的分割槽表與 MBR 是很重要的,幾乎只要讀取硬碟都會先由這個扇區先讀起。因此,如果整顆硬碟的第一個扇區(就是 MBR 與 partition table 所在的扇區)物理實體壞掉了,那這個硬碟大概就沒有用了! 因為系統如果找不到分割槽表,怎麼知道如何讀取柱面區間呢。

開機流程與主引導分割槽(MBR)

  在計算器裡面有BIOS 與 CMOS 兩個東西, CMOS 是記錄各項硬體引數且嵌入在主機板上面的儲存器,BIOS 則是一個寫入到主機板上的一個韌體(再次說明, 韌體就是寫入到硬體上的一個軟體程式)。 這個 BIOS 就是在開機的時候,計算機系統會主動執行的第一個程式!

  接下來 BIOS 會去分析計算機裡面有哪些儲存裝置,我們以硬碟為例,BIOS 會依據使用者的設定去取得能夠開機的硬碟, 並且到該硬盤裡面去讀取第一個扇區的 MBR 位置。 MBR 這個僅有 446 bytes 的硬碟容量裡面會放置最基本的開機管理程式, 此時 BIOS 就功成圓滿,而接下來就是 MBR 內的開機管理程式的工作了。

  這個開機管理程式的目地是在載入(load)核心檔案, 由於開機管理程式是作業系統在安裝的時候所提供的,所以他會認識硬碟內的檔案系統格式,因此就能夠讀取核心檔案, 然後接下來就是核心檔案的工作,開機管理程式也功成圓滿,之後就是大家所知道的作業系統的任務啦!

  簡單的說,整個開機流程到作業系統之前的動作應該是這樣的:

1.BIOS:開機主動執行的韌體,會認識第一個可開機的裝置

2.MBR:第一個可開機裝置的第一個扇區內的主要啟動記錄區塊,內包含開機管理程式

3.開機管理程式(boot loader):一支可讀叏核心檔案來執行的軟體

4.核心檔案:開始作業系統的功能…

  由上面的說明我們會知道,BIOS 與 MBR 都是硬體本身會支援的功能,至於 Boot loader 則是作業系統安裝在 MBR 上面的一套軟體了。由於 MBR 僅有 446 bytes 而已,因此這個開機管理程式是非常小而完美的。

  這個 boot loader 的主要任務有以下這些專案:

• 提供選單:使用者可以選擇不同的開機專案,這也是多重引導的重要功能

• 載入核心檔案:直接指向可開機的程式區段來開始作業系統

• 轉交其他 loader:將開機管理功能轉交給其他 loader 負責

Linux 安裝模式下, 磁碟分割槽的選擇

目錄樹結極(directory tree)

  整個 Linux 系統最重要的地方就是在於目錄樹結構。
  所以,整個目錄樹結構最重要的就是那個根目錄(root directory),這個根目錄的表示方法為一條斜線『/』 , 所有的檔案都與目錄樹有關。

這裡寫圖片描述

檔案系統與目錄樹的關係(掛載)

  所謂『掛載』就是利用一個目錄當成進入點,將磁碟分割槽的資料放置在該目錄下; 也就是說進入該目錄就可以讀取該分割槽的意思。這個動作我們稱為『掛載』,那個進入點的目錄我們稱為『掛載點』。

這裡寫圖片描述


文章整理至《鳥哥的私房菜(第3版)》

鳥哥 著