1. 程式人生 > >認識硬體裝置與硬碟分割槽

認識硬體裝置與硬碟分割槽

  • 各硬體裝置在Linux中的檔名

SATA介面的硬碟的檔名稱即為/dev/sd[a-d],其中, 括號內的字母為a-d當中的任意一個, 亦即有/dev/sda, /dev/sdb, /dev/sdc, 及 /dev/sdd這四個檔案的意思。

  •  MSDOS(MBR)與 GPT 磁碟分割槽表(partition table)
    • MSDOS (MBR) 分割槽表格式與限制

早期的 Linux 系統為了相容於 Windows 的磁碟,因此使用的是支援 Windows 的 MBR(Master Boot Record, 主要開機紀錄區) 的方式來處理開機管理程式與分割槽表。

  • 主要開機記錄區(Master Boot Record, MBR):可以安裝開機管理程式的地方,有446 Bytes
  • 分割槽表(partition table):記錄整顆硬碟分割槽的狀態,有64 Bytes
  • 由於分割槽表所在區塊僅有64 Bytes容量,因此最多僅能有四組記錄區,每組記錄區記錄了該區段的啟始與結束的柱面號碼。
  • 實際上延伸分割槽並不是只佔一個區塊,而是會分佈在每個分割槽的最前面幾個扇區來記載 分割槽資訊的。延伸分割槽的目的是使用額外的扇區來記錄分割槽資訊,延伸分割槽本身並不能被拿來格式化。 然後我們可以通過延伸分割槽所指向的那個區塊繼續作分割槽的記錄。
  • 由於每組分割槽表僅有 16Bytes 而已,在過去 MBR 分割槽表的限制中經常可以發現如下的問題:

作業系統無法抓取到 2.2T 以上的磁碟容量!

MBR 僅有一個區塊,若被破壞後,經常無法或很難救援。

MBR 內的存放開機管理程式的區塊僅 446Bytes,無法容納較多的程式碼。

  • GUID partition table, GPT 磁碟分割槽表
    • 為了相容 於所有的磁碟,因此在扇區的定義上面, 大多會使用所謂的邏輯區塊位址(Logical Block Address, LBA)來處理。GPT 將磁碟所有區塊以此 LBA(預設為 512Bytes) 來規劃, 而第一個 LBA 稱為 LBA0 (從 0 開始編號)。
    • GPT 使用了 34 個 LBA 區塊來紀錄分割槽資訊,整個磁碟的最後 33 個 LBA 也拿來作為另一個備份.

  • LBA0(MBR 相容區塊),與 MBR 模式相似的,這個相容區塊也分為兩個部份。在原本的分割槽表的紀錄區內,這個相容模式 僅放入一個特殊標誌的分割槽,用來表示此磁碟為 GPT 格式之意。
  • LBA1(GPT 表頭紀錄)

這個部份紀錄了分割槽表本身的位置與大小,同時紀錄了備份用的 GPT 分割槽 (就是前面談到的在最後 34 個 LBA 區塊) 放置的位置, 同時放置了分割槽表的檢驗機制碼 (CRC32),作業系統可以根據這個檢驗碼來判斷 GPT 是否正確。若有錯誤,還可以通 過這個紀錄區來取得備份的 GPT(磁碟最後的那個備份區塊) 來恢復 GPT 的正常執行。

  • LBA2-33 (實際紀錄分割槽資訊處)

從 LBA2 區塊開始,每個 LBA 都可以紀錄 4 筆分割槽紀錄,所以在預設的情況下,總共可 以有 4*32 = 128 筆分割槽紀錄。因為每個LBA 有 512Bytes,因此每筆紀錄用到 128 Bytes 的空間,除了每筆紀錄所需要的識別碼與相關的紀錄之外,GPT 在每筆紀錄中分別提供了 64bits 來記載開始/結束的扇區號碼。因此,GPT 分割槽表對於單一分割槽來說, 他的最大容量限制就會在“ 2^64*512Bytes = 263 1KBytes = 233TB = 8 ZB ”,1ZB = 230TB 。

  • GPT 分割槽已經沒有所謂的主、延伸、邏輯分割槽的概念,每一個分割槽都可以拿來格式化使用。