主分區和擴展分區的區別在於主分區位於硬盤的最開始,MBR 扇區的位置,這個位置的數據在計算機啟動時,會自動被 BIOS 讀取並且執行,也就是說這個位置的分區表會自動被 BIOS 讀取到內存裡,這樣 MBR 啟動程序不需要執行什麼操作就能直接獲得主分區表信息。但因為 MBR 只有 512 字節,分區表還要占用 4x16 字節,外加還有個 55AA 標志占用2字節,實際 MBR 可以放置可以運行的程序代碼空間就只有 446 字節了。這 446 字節限制寫出來的程序體積太小而不足以實現某些功能,所以這個時候系統需要使用一些 BIOS 提供的系統操作實現簡單的啟動工作,這個簡單的代價就是 446 字節的程序不能直接讀取擴展分區裡面的邏輯分區的數據並且啟動系統,因為擴展分區的邏輯分區表在硬盤的後部,也就是數據區裡面,位置不固定需要多次查找才能找到對應的分區位置。446 字節的程序根本沒辦法進行操作。
而且因為還沒有能進入完整的系統,所以 BIOS 提供的功能雖然很多,但仍然不夠進行某些特殊操作的功能要求。
這就是為什麼 Windows 就算你安裝到擴展分區,他也會在 C 盤上放上很多東西的原因。因為 Windows 要求 C 盤必須是主分區才能啟動系統。
Linux 的 GRUB 可以安裝到擴展分區是因為他用了 MBR 的 446 字節後,MBR 之後的幾個閒置扇區,大概有 8k 的容量繼續放他的程序,這樣的設計使得體積限制得到了緩解。這樣他可以繼續調用硬盤特定位置的程序代碼繼續啟動而不一定非要主分區。
綜上說的基礎,主分區和擴展分區主要的區別就是啟動系統的問題。BIOS 這個古老的硬件設計害死了不少程序員的腦細胞。