為什麼磁碟分割值得深入理解#
磁碟分割不只是安裝 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#
- 電源開啟,BIOS 執行自我測試(POST)
- BIOS 讀取第一顆開機磁碟的 MBR(第一個磁區的 446 Bytes)
- MBR 中的開機管理程式(Boot Loader)載入
- Boot Loader 載入作業系統核心
現代 UEFI + GPT#
- UEFI 韌體從 ESP(EFI System Partition) 讀取開機程式
- ESP 是一個 FAT 格式的分割區,存放各作業系統的開機載入器
- UEFI 可以直接讀取檔案系統,不受 MBR 446 Bytes 的限制
- 支援 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獨立出來