原文連接linux
常見的硬盤接口有:IDE 、SATA、SAS、USB、SCSI,其中 SATA 是目前的主流接口,IDE 則幾乎再也不使用。安全
計算機的各類硬件設備在 Linux 中都有對應的設備文件,甚至不一樣的接口也對應着不一樣的設備文件,從而使用不一樣的驅動程序來操做硬件設備。對於硬盤,實體設備的文件名通常是 /dev/sd[a-]
;虛擬設備(虛擬機中的硬盤)的文件名通常是 /dev/vd[a-]
。架構
有時,系統中會有 /dev/sda
、/dev/sdb
...等設備文件,它們之間又是什麼關係呢?實際上,/dev/sd[a-]
是 SATA/USB/SAS 等硬盤接口對應的設備文件,這類接口都使用 SCSI 模塊做爲驅動程序。a
、b
、c
...則是按系統檢測到的順序來排列的,與實際插槽順序無關。性能
咱們知道硬盤是能夠被分區成多個分區(partition),如在 Windows 中能夠將一塊硬盤分區成 C:
、D:
、E:
盤。那麼,不一樣的分區是否也有對應的設備文件呢?學習
提到分區,咱們須要先了解一下硬盤的結構。不一樣尋址方式的硬盤,其結構也不一樣。硬盤的尋址方式主要有兩種:操作系統
以下圖所爲 CHS 尋址方式的硬盤結構,硬盤主要由盤片、機械手臂、磁頭、主軸馬達組成。盤片是數據存儲的媒介,圓形,經過機械手臂讀寫數據,盤片須要轉動纔可以讓機械手臂讀寫。所以,能夠將盤片同心圓分割成一個個的小區塊,這些區塊組成一個圓形,可讓機械手臂的磁頭進行讀寫。這個小區塊就是硬盤的最小物理存儲單位,即 扇區(sector)。位於同一個同心圓上的扇區組成的圓環,即 磁道(track)。硬盤中可能包含多個盤片,在全部盤片上的同一個磁道組成了所謂的 柱面(cylinder),柱面是文件系統的最小單位,也是分區的最小單位。.net
LBA 尋址方式的硬盤使用集成電路代替物理旋轉磁盤,主要由主控與閃存芯片組成。數據的讀寫速度遠遠高於 CHS 尋址方式的硬盤。code
瞭解了硬盤結構,再來看硬盤分區。cdn
關於硬盤分區,首先思考一個問題:爲何要分區?其實主要有兩個緣由:blog
既然硬盤能被分區,那麼其分區信息是如何保存的呢?答案就是分區表。可是對於不一樣尋址方式的硬盤,其分區表的格式也不一樣,主要有兩種:
分區表有存儲在哪裏呢?和絕大多數文件將自身的基本描述信息放在文件的開頭相似,分區表做爲硬盤的基本信息,一樣保存在硬盤最前面的存儲區域。
下面分別介紹 MBR 分區表和 GUID 分區表。
MBR 分區表保存在硬盤的 第一個扇區,因爲第一個扇區主要記錄了兩個重要信息,也稱爲 主引導記錄區(Master Boot Record,MBR)。這兩個信息分別是:
分區表佔據了 MBR 64 Bytes 的空間,最多隻能記錄 4 組分區信息,每組分區信息記錄了該分區的 起始與結束的柱面號,這 4 組分區信息稱爲 主要分區(primary partition) 或 延伸分區(extended partition)。
假設上述硬盤的設備文件名爲 /dev/sda
,則這四個分區在 Linux 中的設備文件名以下所示,重點在於文件名後面會再接一個數字,這個數字與分區在硬盤中的位置有關。
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
因爲分區表只有 64 Bytes,最多隻能記錄 4 組分區信息,那麼是否意味着一個硬盤最多隻能分割成 4 個分區呢?固然不是!雖然第一個扇區的分區表只能記錄 4 組分區信息,可是利用其中的延伸分區信息進一步索引到一個新的分區表,從而記錄更多分區信息。以下圖所示:
上圖所示,硬盤第一個扇區中的四個分區記錄僅僅使用了兩個,P1 爲 主要分區,P2 爲 延伸分區。延伸分區的目的是使用額外的扇區來記錄分區信息。經過延伸分區所指向的那個區塊繼續記錄分區信息。上圖延伸分區索引的分區表繼續分出了 5 個分區,這 5 個有延伸分區分出來的分區,稱爲 邏輯分區(logical partition)。
同理,上圖中的分區在 Linux 中的設備文件名以下所示。其中的 /dev/sda3
和 /dev/sda4
則保留給主要分區和延伸分區了,因此邏輯分區的設備文件名從 5 開始。
/dev/sda1
/dev/sda2
/dev/sda5
/dev/sda6
/dev/sda7
/dev/sda8
/dev/sda9
MBR 主要分區、延伸分區、邏輯分區的特性
- 主要分區與延伸分區最多能夠有 4 個(硬盤的限制)
- 延伸分區最多隻有一個(操做系統的限制)
- 邏輯分區是由延伸分區持續分割出來的分區
- 主要分區和邏輯分區能夠被格式化;延伸分區不能被格式化
- 邏輯分區的數量上限由操做系統決定
Boot loader 是操做系統安裝在 MBR 中的一套軟件,但 MRB 僅僅提供 446 Bytes 的空間給 boot loader,因此 boot loader 是極其精簡的。其主要完成如下任務:
對於第 3 項,表示計算機系統中可能具備兩個以上的 boot loader。事實上,boot loader 不只能夠安裝在 MBR 中,還能夠安裝在每一個分區的 開機扇區(boot sector) 中。
假設 MBR 中安裝的是能夠識別 Windows/Linux 的 boot loader,那麼整個流程以下圖所示:
由上圖可知,MBR 的 boot loader 提供兩個菜單選項:選項 1(M1)能夠直接載入 Windows 的核心文件進行開機;選項二(M2)能夠將開機管理任務交給第二個分區的開機扇區(boot sector)。若是用戶選擇選項 2,第二分區的開機扇區中的 boot loader 將會載入 Linux 的核心文件進行開機。
關於多系統安裝 Linux 安裝時,能夠將 boot loader 安裝在 MBR 或其餘分區的開機扇區,Linux 的 boot loader 能夠手動設置菜單(即上圖的 M一、M2),所以可在 Linux 的 boot loader 中加入 Windows 開機的選項 Windows 安裝時,其安裝程序會主動覆蓋 MBR 以及本身所在分區的開機扇區,而且沒有選擇的機會,也沒有讓用戶本身選擇的菜單的功能 結論:安裝多系統時應該先安裝 Windows 系統
MBR 主要有如下限制:
GUID 則解決了 MBR 的這些問題。
下圖所示爲 GUID 的結構示意圖。與 MBR 使用扇區做爲尋址單位不一樣,GUID 使用 邏輯區塊(Logical Block) 做爲尋址單位,即採用 LBA(Logical Block Address)尋址方式。MRB 僅使用第一個扇區 512 Bytes 的空間記錄分區信息,GUID 則使用 34 個 LBA 區塊(每一個區塊容量默認爲 512 Bytes)記錄分區信息。MBR 僅有一個扇區保存分區信息,GUID 除了使用硬盤前 34 個 LBA,仍是用最後 33 個 LBA 做爲備份。
這裏有個疑問:爲什麼前面使用 34 個 LBA,後面使用 33 個 LBA。由於第一個 LBA(LBA0)是用來兼容 MBR 的。
LBA0 爲了兼容 MBR,該區塊也分爲兩個部分,分別用於存儲 MBR 分區表和引導程序。由於LBA0 是針對 MBR 兼容模式,所以其分區表中僅僅存放一個特殊標誌的分區表信息,用來標識此硬盤爲 LBA 尋址方式。
LBA1 記錄了分區表自己的位置和大小,同時記錄了備份分區表的位置(即最後 33 個 LBA)。此外還存放了分區表的校驗碼(CRC32),表示硬盤的完整性。
從 LBA2 開始,每一個 LBA 均可以記錄 4 組分區信息。默認狀況下,總共能夠有 4 * 32 = 128 組分區信息。由於每一個 LBA 有 512 Bytes,因此每組分區信息可以使用 128 Bytes 的空間。這 128 Bytes 的分區信息中,分別提供了 64 Bits 用於記錄分區對應的 起始/結束 區塊號。所以,GUID 可以支持的硬盤的最大容量爲 2^64 * 512Byte = 233 TB