為什麼磁碟分割值得深入理解#

磁碟分割不只是安裝 Linux 時的一個步驟——它決定了系統的效能配置、資料安全性、以及日後擴充的彈性。理解分割表、開機流程與掛載機制,能讓你在規劃伺服器、設計容器儲存、或排除開機問題時游刃有餘。

硬體在 Linux 中的表示方式#

Linux 將所有硬體裝置都抽象為 /dev/ 目錄下的裝置檔案,這是「一切皆檔案」哲學的體現。

常見的裝置命名規則:

  • SATA/SAS/USB 硬碟/dev/sda/dev/sdb…(按偵測順序命名)
  • VirtIO 虛擬磁碟/dev/vda/dev/vdb…(常見於 KVM 虛擬機)
  • NVMe SSD/dev/nvme0n1/dev/nvme0n1p1
  • 分割區:在裝置名稱後加上數字,如 /dev/sda1/dev/sda2

裝置名稱是依偵測順序動態分配的,不是固定的。如果你有兩顆硬碟,哪顆先被偵測到就是 sda。在正式的設定(如 /etc/fstab)中,建議使用 UUID 來識別分割區,避免因硬體順序變動導致掛載錯誤。

磁碟分割表:MBR 與 GPT#

MBR(Master Boot Record)#

MBR 是傳統的分割方式,存放在磁碟的第一個磁區(512 Bytes):

  • 開機管理程式:446 Bytes
  • 分割表:64 Bytes(僅能記錄 4 筆分割資訊)
  • 結束標誌:2 Bytes

MBR 的限制:

  • 最多 4 個主分割區,或 3 個主分割區 + 1 個延伸分割區
  • 延伸分割區內可再建立多個邏輯分割區
  • 單一分割區最大 2 TB

GPT(GUID Partition Table)#

GPT 是現代的分割方式,使用 LBA(Logical Block Address) 定址:

  • 使用前 34 個 LBA 區塊記錄分割資訊
  • 磁碟尾端保留備份的分割表
  • 預設可記錄 128 個分割區
  • 單一分割區大小突破 2 TB 限制(理論上可達 8 ZB)

現代系統幾乎都應該使用 GPT。MBR 只在需要相容非常老舊的系統時才考慮。

開機流程:BIOS vs. UEFI#

傳統 BIOS + MBR#

  1. 電源開啟,BIOS 執行自我測試(POST)
  2. BIOS 讀取第一顆開機磁碟的 MBR(第一個磁區的 446 Bytes)
  3. MBR 中的開機管理程式(Boot Loader)載入
  4. Boot Loader 載入作業系統核心

現代 UEFI + GPT#

  1. UEFI 韌體從 ESP(EFI System Partition) 讀取開機程式
  2. ESP 是一個 FAT 格式的分割區,存放各作業系統的開機載入器
  3. UEFI 可以直接讀取檔案系統,不受 MBR 446 Bytes 的限制
  4. 支援 Secure Boot,驗證開機程式的數位簽章

UEFI 搭配 GPT 是目前的主流。如果你在虛擬機或雲端環境中建立 VM,通常預設就是 UEFI + GPT。

Boot Loader 的角色#

Boot Loader 是開機流程中最關鍵的一環,它的任務是載入作業系統核心。Linux 常用的 Boot Loader 是 GRUB2

Boot Loader 的功能:

  • 提供選單:讓使用者選擇要啟動哪個作業系統或核心版本
  • 載入核心:將核心映像檔從磁碟載入記憶體
  • 轉交控制權:也可以將控制權交給其他分割區的 Boot Loader(chain loading)

掛載(Mount)的觀念#

Linux 沒有像 Windows 那樣的「C 槽」「D 槽」概念。取而代之的是目錄樹(Directory Tree)——所有的檔案系統都必須掛載到目錄樹的某個節點上。

  • 根目錄 /:目錄樹的起點,必須最先被掛載
  • 掛載點(Mount Point):一個目錄,用來作為某個檔案系統的入口

常見的分割與掛載規劃:

掛載點用途分割理由
/根目錄系統核心檔案
/boot開機相關確保開機載入器能找到核心
/home使用者家目錄獨立分割方便重灌時保留資料
/var變動資料(log、cache)避免 log 暴增撐爆根目錄
swap虛擬記憶體記憶體不足時的緩衝

如果不將 /var 獨立分割,一旦應用程式的 log 檔無限增長,可能會把整個根目錄的空間吃光,導致系統無法正常運作。這在生產環境中是常見的故障場景。

主機規劃的實務考量#

規劃一台 Linux 主機時,需要根據用途來決定硬體與分割策略:

  • Web 伺服器:需要較大的 /var(存放 log 與暫存檔)
  • 檔案伺服器:需要較大的 /home 或獨立的資料分割區
  • 資料庫伺服器:需要高速磁碟(SSD),並將資料目錄獨立分割
  • 開發環境:分割可以較簡單,但建議至少將 /home 獨立出來