1. 程式人生 > >磁碟管理(一):磁碟結構、命名與分割槽

磁碟管理(一):磁碟結構、命名與分割槽

1、磁碟的物理結構:

一塊磁碟(機械硬碟)由多片碟片、一個機械手臂、多個磁頭和一個主軸馬達組成的。有N個碟片的磁碟則存在2*N個盤面(因為一個碟片正反兩面均寫有資料),而一個盤面分為可以分為M個磁軌磁軌與磁軌之間存在間隙一個磁軌分為L個扇區(Sector),一個扇區大小為512Byte。過所有盤面的同一磁軌編號的截面稱為柱面(通俗的解釋)。盤面和磁軌都是以0開始編號的,而扇區是以1開始編號的。磁軌是一系列同心圓,磁軌的編號也是從最外層開始編號。因為磁頭從停泊區最開始讀磁碟時最先讀到最外層的0磁軌,所以MBR(Master Boot Record)處於0盤面0磁軌1扇區。

廣義上的MBR是512位元組(即一個扇區) = 446位元組的MBR + 64位元組的分割槽表 + 2位元組的模數(55AA)

。狹義上的MBR是446位元組,其中安裝引導載入程式,64位元組的分割槽表記錄著4個 * 16Byte的分割槽資訊。模數是磁碟有效標誌。在DOS中我們可以用int 13H中斷讀取MBR(B+MBR的具體細節暫不做分析):

MOV AX,7C00H
MOV ES,AX
MOV BX,0
;傳參讀取硬碟0面0道1扇區開始的的1個扇區到7C00:0H開始的地址
MOV AH,2  ;讀扇區,3為寫扇區
MOV AL,1  ;讀取扇區數:1個Sector
MOV CH,0  ;1柱面(0號磁軌)
MOV CL,1  ;1號扇區
MOV DH,0  ;0號磁頭即對應0號盤面
MOV DL,80H ;00~7F軟盤,80H為硬碟
INT 13
H

讀取結果如下(安裝單個DOS系統的MBR,55AA結束):
這裡寫圖片描述

在Linux中,我們也可以用dd命令和輸入輸出重定位,來獲取磁碟0面0道1扇區的MBR(dd < /dev/sda > MBR.txt bs=512 count=1),獲取MBR後我們用vim開啟(vim中:%!xxd檢視二進位制資訊,安裝了Windows7和Redhat6.4雙系統的MBR):
這裡寫圖片描述

2、傳輸介面與裝置命名:

在Linux上不同的傳輸介面(IDE、SCSI、STAT、USB、U盤),有不同的命名方式,比如:

IDE:/dev/hda~/dev/hdd
SCSI/STAT/USB/U盤:/dev/sda~/dev/sdp
軟碟機:

/dev/fd0、/dev/fd1
CD ROM、DVD ROM:/dev/cdrom
等等。

一個IDE扁平電纜可以連線兩個IDE裝置,通常主機都會提供兩個介面。所以最多可以連線4個IDE裝置。這兩個介面通常被稱為IDE1(primary)和IDE2(secondary),而每條扁平電纜的兩個IDE裝置,分別為Master(主裝置)和Slave(從裝置)。四個IDE的裝置名在Linux上如下所示:
這裡寫圖片描述

而IDE的介面如今已經被STAT普遍的取而代之。STAT/USB/SSI介面等都是使用SCSI模組驅動的,因此這些介面的磁碟裝置名都是/dev/sda~/dev/sdp格式。到底是a~p中的那一個就需要看具體啟動時,磁碟的識別順序是怎樣的,由於USB肯定是開機完成後才被識別,因此USB的序號一般都是在硬碟的後面。

3、磁碟分割槽與分割槽命名:

我們知道了磁碟的最小單位扇區,也知道了磁軌的概念,接著我們來看看關於磁碟分割槽的問題,首先分割槽的最小單位是柱面(cylinder)而不是扇區。在Windwos中我們熟知的C:、D:、E:、F:、G:…的碟符,其實就是一塊磁碟的不同分割槽,但是我們剛剛才看了磁碟分割槽表(Partition Table)只有64位元組,記錄了四個分割槽資訊,那個麼當分割槽數多於4個分割槽,這些資訊又是如何儲存的呢?我們用下圖來詳細分析:

這裡寫圖片描述

磁碟/dev/sda被分為4部分(即4個分割槽),這四部分均由磁碟分割槽表索引而來,當分割槽個數多於4個時就產生了擴充套件分割槽和邏輯分割槽的概念,將原本4個標準分割槽改為3個標準分割槽+1個擴充套件分割槽的格式(標準分割槽表中的記錄也變為3P+1E(4L)+0空閒也可以是1P+1E(4L)+2空閒或者2P+1E(4L)+1空閒的格式,至於是哪種格式都無所謂)。如下圖所示:

這裡寫圖片描述

如下便是一個包含了3個主分割槽和一個擴充套件分割槽(包含4個邏輯分割槽)的磁碟分割槽情況(fdisk -l /dev/sda列出/dev/sda的磁碟分割槽資訊,不指定物件則列出所有磁碟,fdisk /dev/sda為磁碟規劃分割槽):

這裡寫圖片描述

列出的資訊中,Start/End是柱面號(也是磁軌號)。總共有20886個柱面,只分了7969個,還有1萬多個柱面沒有分配,也就是說,沒有分配的柱面在邏輯分割槽號還有的情況下可以繼續分出/dev/sda9、/dev/sda10……也可以用來安裝其他系統。

注意:
①主分割槽和擴充套件分割槽的四個分割槽佔用了1~4的四個分割槽編號,無論標準分割槽表有無空閒,邏輯分割槽都是從5開始的(/dev/sda5、/dev/hda5等),前四個保留給Primary或Extended來使用。
②主分割槽最多四個,擴充套件分割槽最多1個,在Linux中IDE硬碟中最多有59個邏輯分割槽(5~63),STAT最多有11個邏輯分割槽(5~15號)。
③由於擴充套件分割槽記錄了邏輯分割槽的資訊,如果擴充套件分割槽被破壞,所有的邏輯分割槽都將被刪除。所以在不影響其他分割槽的情況下,兩個邏輯分割槽可以合併,但是不能夠一個邏輯分割槽和一個主分割槽進行合併。

參考資料:《鳥哥的Linux私房菜》