Linux磁盘分区以及多重引导简述
Linux磁盤分區以及多重引導簡述
要了解Linux的磁盤分區,首先看看各種硬件設備在Linux中的文件名字。
以舊有的Windows觀點來看,你可能會有一塊磁盤并且把它分區成C:,D:,E:盤。那個C,D,E就是分區。
但是你了解在Linux是怎么分區的嗎?
- 1 - 個人計算機常見的磁盤接口有兩種,分別是IDE與SATA接口。 - 我們稱可以連接到IDE接口的設備為IDE設備,不論是磁盤或者是光盤設備。 - 以IDE接口來說,由于一個IDE扁平電纜可以連接兩個IDE設備,通常主機又會提供兩個IDE接口,因此最多可以連接到四個IDE設備。 - 也就是說,如果你已經有一個光盤設備了,那么最多就只能再接三塊IDE接口的磁盤。 - 這兩個IDE接口通常被稱為IDE1(primary)以及IDE2(secondary),而每條扁平電纜上面的IDE設備可以被區分為Master(主設備)與Slave(從設備)。 - 這四個IDE設備的文件名如下: - 例:假設你的主機上僅有一塊IDE接口的磁盤,而這一塊磁盤接在IDE2的Master上面,請問他在Linux操作系統里面的設備文件名是什么? - 答:IDE2的Master設備文件名是/dev/hdc。 - 再以SATA接口來說,由于SATA、USB、SCSI等磁盤接口都是使用SCSI模塊來驅動的,因此這些接口的磁盤設備文件名都是/dev/sd[a-p]的格式。 - 但是與IDE接口不同的是,SATA、USB接口的磁盤根本就沒有一定的順序,那如何決定它的設備文件名呢? - 這個時候就得要根據Linux內核檢測到磁盤的順序了。 - 例:如果你的PC上面有兩個SATA磁盤以及一個USB磁盤,而主板上面有六個SATA的插槽。 - 這兩個SATA磁盤分別安插在主板上的SATA1,SATA5插槽上,請問這三個磁盤在Linux中的設備文件名是什么? - 答:由于是使用檢測到的順序來決定設備文件名,并非與實際插槽代號有關,所以設備文件名如下: 
- SATA1插槽上的文件名:/dev/sda
- SATA2插槽上的文件名:/dev/sdb
- USB磁盤(開機完成后才被系統識別):/dev/sdc
- 2 - 磁盤主要組成部件是:盤片,機械手臂,磁頭與主軸馬達。 - 盤片上面可以細分出扇區(Sector)與柱面(Cylinder)兩種單位,其中扇區為每個512B那么大。 - 是否每個扇區都一樣重要呢? - 其實整個磁盤的第一個扇區特別重要,因為磁盤的第一個分區記錄了關于磁盤的兩個重要信息: 
- 主引導分區(Master Boot Record,MBR):可以安裝引導加載程序的地方,有446B。 
- 分區表(partition table):記錄整塊硬盤分區的狀態,有64B。 
- 3 - 柱面是文件系統的最小單位,也就是分區的最小單位。 - 我們就是利用參考柱面號碼的方式來處理。 - 在分區表所在的64bytes容量中,總共分為四組記錄區,每組記錄區記錄了該區段的起始與結束的柱面號碼。 - 若把硬盤以長條形來看,然后把柱面以柱形圖來看,那么如下圖所示: - 假設上面的硬盤設備文件名為/dev/hda時,那么這四個分區在Linux系統中的設備文件名如下所示, - 重點在于文件名后面會再接一個數字,這個數字與該分區所在的位置有關。 - P1:/dev/hda1 
 P2:/dev/hda2
 P3:/dev/hda3
 P4:/dev/hda4- 上圖中我們假設硬盤只有400個柱面,共分區成為4個分區,第四個分區所在為第301到400號柱面的范圍。 - 當你的操作系統是Windows時,那么第一個到第四個分區的代號應該就是C、D、E、F。 - 當你有數據要寫入F盤時,你的數據會被寫入這塊磁盤的301~400號柱面之間。 - 由于分區表就只有64bytes而已,最多只能容納四個分區,這四個分區被稱為主(Primary)或擴展分區(Extended)分區。 - 我們有以下結論: 
- 其實所謂的分區只是針對那個64bytes的分區表進行設置而已。
- 硬盤默認的分區表只能寫入四組分區信息,
- 這四組分區信息我們稱為主或擴展分區。
- 分區的最小單位是cylinder。
- 數據的安全性。 - 每個分區的數據是分開的。 - 當需要把某個分區的數據重整時,例如重新裝Windows的時候,可以把C盤中的其他重要數據移到其他分區,比如把C盤的一些文件移動到D盤,那么對C盤重裝系統也不會影響D盤。 
- 系統的性能考慮。 - 由于分區把數據集中在某個柱面的區段,如上圖所示,當中第一個分區位于柱面號碼1-100號, - 如此一來當有數據要讀取該分區的時候,磁盤只會搜索前面1-100的柱面范圍,由于數據集中了,將有助于數據讀取的速度與性能。 
- 4 - 我們在計算機概論里面提到了,沒有執行軟件的硬件是沒用的, - 為了計算機硬件系統的資源合理分配,因此有了操作系統這個系統軟件的產生。 - 由于操作系統會控制所有的硬件并且提供內核功能,因此我們的計算機就能認識硬盤內的文件系統, - 并且進一步讀取硬盤內的軟件文件與執行該軟件來完成各項軟件的執行目的。 - 問題是,操作系統也是軟件,那么我的計算機又是怎么認識這個操作系統軟件并且執行它的? - 開機的時候我的計算機還沒有任何軟件系統,那他要如何讀取硬盤內的操作系統文件?這就涉及到計算機的開機程序。 - CMOS是記錄各項硬件參數且嵌入在主板上的存儲器,BIOS則是一個寫入到主板上的一個韌體(韌體就是寫入到硬件上的一個軟件程序)。 - 這個BIOS就是在開機的時候計算機會主動執行的第一個程序。 - 接下來BIOS會去分析計算機里面有哪些存儲設備,我們以硬盤為例,BIOS會依據用戶的設置去取的能開機的硬盤, - 并且到該硬盤里第一個扇區的MBR的位置。 - MBR這個僅有446bytes的硬盤容量里會放置最基本的引導加載程序,此時BIOS就圓滿成功,而接下來就是MBR內的引導加載程序的工作了。 - 這個引導加載程序的目的是在加載(load)內核文件,由于引導加載程序是“操作系統在安裝的時候”所提供的, - 所以它會識別硬盤內的文件系統的格式,因此就能夠讀取內核文件,然后接下來就是內核文件的工作,引導加載程序也功成圓滿。 - 簡單地說,整個開機流程到操作系統之前的動作應該是這樣的: 
- BIOS:開機主動執行的韌體,會認識第一個可開機的設備。 
- MBR:第一個可開機設備的第一個扇區內的主引導分區塊,內包含引導加載程序。 
- 引導加載程序(Boot Loader):一支可讀取內核文件來執行的軟件。 
- 內核文件:開始操作系統的功能。 
- 提供菜單:用戶可以選擇不同的開機選項,這也是多重引導的重要功能。 
- 載入內核文件:直接指向可開機的程序區段來開始操作系統。 
- 轉交給其他Loader:將引導加載功能轉交給其他Loader負責。 
現在想想,如果你的磁盤被分成兩個分區,那么每個分區的文件名是什么?
在了解這個問題前,我們先了解一下磁盤的組成,因為磁盤的分區與它物理的組成很有關系。
MBR是很重要的。當系統在開機的時候會主動去讀取這個區塊的內容,這樣系統才會知道你的程序放在哪里且該如何進行開機。
如果安裝多重引導的系統,MBR這個區塊的管理就非常重要了。
分區表是什么呢?其實你剛才拿到的整塊硬盤就像是一根原木,你必須在這根原木上切割出你想要的區段,這個區段在能夠再制作成你想要的家具。
如果沒有進行切割,那么原木就不能被有效地使用。
同樣道理,你必須對硬盤進行分區,這樣硬盤才能夠被你使用。
當系統要寫入磁盤時,一定會參考磁盤分區表,才能針對某個分區進行數據的處理。
考慮一下,為什么要分區啊?
雖然分區表只有四組數據的空間,但是不代表我一塊硬盤上最多只能分區出四個分區。
在Windows/Linux系統中,可以通過擴展分區,把一塊硬盤分區成十個以上的分區。
擴展分區的想法是,既然第一個扇區所在的分區表只能記錄四條數據,那我可否利用額外的扇區來記錄更多的分區信息?
如下圖所示:
從上圖我們知道硬盤的四個分區記錄僅僅使用到2個,P1是主分區,P2是擴展分區。
請注意,擴展分區的目的是使用額外的扇區來記錄分區信息,擴展分區本身并不能被拿來格式化。
然后我們可以通過擴展分區所指向的那個區塊繼續做分區的記錄。
上圖右下方那個區塊繼續分區出五個分區,這五個由擴展分區繼續切出來的分區,就被稱為邏輯分區(logical partition)。
上圖中表示的分區在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,為什么呢?
因為前四個都是保留的,所以邏輯分區的設備名稱一定是從5開始。
關于主分區,擴展分區與邏輯分區的特性我們做個簡單的定義。
1. 主分區與擴展分區最多可以有四個(硬盤本身的限制)。 2. 擴展分區最多只能有一個(操作系統的限制)。 3. 邏輯分區是由擴展分區繼續切割出來的分區。 4. 能夠被格式化后作為數據訪問的分區為主分區與邏輯分區。擴展分區無法格式化。 5. 邏輯分區的個數上限與操作系統有關。在Linux中,IDE硬盤最多有59個邏輯分區(5-63),SATA硬盤則有11個邏輯分區(5-15)。分區是個以柱面為單位的“連續”磁盤空間,且擴展分區又是個類似獨立的磁盤空間。
由于第一個扇區所記錄的分區表與MBR是這么重要,幾乎只要讀取硬盤都會先由這個扇區先讀取。
所以,如果一個硬盤的第一個扇區物理上壞掉,那個個硬盤也就沒什么用了。
例:如果我想把一塊大硬盤“暫時”分成四個分區,同時還有其他的剩余容量可以讓我在未來的時候進行規劃,我能不能分區出四個主分區?
如果不行,那么該怎么辦?
答:由于主分區和擴展分區雖多只能有四個,其中擴展分區最多只能有一個,這個題目想要分區出四個分區且還要預留剩余空間,所以P+P+P+P是不合適的。
因為如果使用到四個主分區,即使硬盤還有剩余容量,因為無法繼續分區,所以剩余容量就會被浪費掉了。
假設你想要把所有的四條記錄都花光,可以P+P+P+E比較合適。
所以可以用的四個分區有三個主分區和一個邏輯分區,剩余的容量在擴展分區里面。
如果你要分區超過四個,一定要有擴展分區,而且必須把所有剩下的空間都分配給擴展分區,然后再以擴展分區來規劃擴展分區的空間。
另外,考慮到磁盤的連續性,一般建議把擴展分區的柱面號碼分配在最后面的柱面內。
例:我能不能僅分出一個主分區和一個擴展分區?
答:當然可以。這是早起Windows操作系統慣用的手法。
例:假如我的PC有兩塊SATA硬盤,我想在第二塊硬盤分出6個可用的分區(可以被格式化來訪問數據之用),
那么每個分區在Linux系統下的設備文件名為什么?分區類型是什么?
答:由于P+E最多只能四個,其中E最多只能一個。
現在題目要求六個可用的分區,所以不可能分出四個P。
one: 將前四號全部用完(P+P+P+E)。
實際可用的是:
/dev/sdb1,/dev/sdb2,/dev/sdb3,/dev/sdb5,/dev/sdb6,/dev/sdb7
/dev/sdb4這個擴展分區本身僅是提供給邏輯分區創建使用。
two:使用前四號中的部分(P+E)。
注意到了嗎?
因為1-4是保留給主或擴展分區的,因此第一個邏輯分區一定是由5號開始,
所以/dev/sdb3,/dev/sdb4就會被保留下來沒有用到。
由上面的說明我們知道,BIOS和MBR都是硬件本身會支持的功能,至于BootLoader是操作系統安裝在MBR上的一套軟件。
由于MBR僅僅有446bytes,因此這個引導加載程序是十分小而完美的。
這個Boot Loader提供的功能有:
上述第三點說明,你的計算機系統里面可能具有兩個以上的引導加載程序。
有可能嗎?我們的硬盤不是只有一個MBR嗎?
完全有可能,因為引導加載程序除了可以安裝在MBR之外,還可以安裝在每個分區的引導扇區(boot sector)。
分區還有個別的啟動扇區,這個特色才能造就“多重引導”的功能。
我們舉一個例子來說,假設你的個人計算機只有一塊硬盤,里面分成四個分區,其中第一、二分區分別安裝了Windows和Linux,
你要如何在開機的時候選擇用Windows還是Linux開機呢?
假設MBR內安裝的是可同時識別Windows、Linux操作系統的引導加載程序,那么整個流程如圖所示:
在上圖中我們可以發現,MBR的引導加載程序提供兩個菜單,
菜單一(M1)可以直接加載Windows的內核文件來開機,
菜單二(M2)則是將引導加載工作交給第二個分區的啟動扇區(boot sector)。
當用戶在開機的時候選擇菜單二時,那么整個引導加載工作就會交給第二分區的引導加載程序了。
當第二個引導加載程序啟動后,該引導加載程序內僅有一個開機菜單,因此就能夠使用Linux的內核文件來開機。
這就是多重引導的工作情況。
我們將上圖做個總結:
1) 每個分區都有自己的啟動扇區(boot sector)。
2) 圖中的系統分區為第一及第二分區。
3) 實際可開機的內核文件是放置到各分區的。
4) Loader只會認識自己的系統分區內的可開機內核文件以及其他loader而已。
5) Loader可以直接指向或者是間接把管理權轉交給另一個管理程序。
現在想想,為什么別人說:如果要安裝多重引導,最好先安裝Windows在安裝Linux。
1) 
 Linux在安裝的時候你可以選擇將引導加載程序安裝在MBR或個別分區的啟動扇區,而且Linux的loader可以手動設置菜單,
所以你可以在Linux的boot loader里面加入Windows開機的選項。
2) 
 Windows在安裝的時候,它的安裝程序會主動覆蓋MBR以及自己所在分區的啟動扇區,你沒有選擇的機會,
而且他沒有讓我們自己選擇菜單的功能。
所以,如果先裝Linux在安裝Windows的話,那MBR的引導加載程序就只會有Windows的選項,
而不會有Linux的選項(因為原本在MBR內的Linux的引導加載程序就會被覆蓋掉)。
那需要重新安裝一次Linux嗎?
當然不需要,你只需要用各種方法來處理MBR的內容即可,比如spfdisk軟件或者Linux的救援模式來挽救MBR即可。
資料來源: 
 1.《鳥哥的私房菜》
注:部分內容有本人刪改。
總結
以上是生活随笔為你收集整理的Linux磁盘分区以及多重引导简述的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 腾讯视频云签到(2022-5-29更新)
- 下一篇: android的timertask,An
