切割硬碟有兩種方式。 已沿用幾十年的舊式 MBR 分割方式 最多只能切成 3+1 個主分割區且只支援容量 2T 以下的硬碟。 較新的 GPT 分割方式則可切成最多 128 個分割、 支援硬碟容量是 MBR 限制的 2^32 倍 (約 40 億倍)。
另一方面, 主機板的韌體也有新舊之分。 二十世紀的板子採用 BIOS; 近十年來的板子幾乎都是較新的 UEFI。 新舊不同方式切割的硬碟, 搭配新舊不同的主機板韌體, 會產生四種組合。 本文關心其中一種組合 (表格左下角) 的 linux 開機設定方式。 (表格畫法參考 這篇)
主機板 | |||
---|---|---|---|
BIOS/模擬 BIOS | UEFI | ||
硬碟 | MBR | 2TB 限制 | 把 檔案放在 正確位置 即可 |
GPT | 要設定分割屬性 |
因為硬碟越來越大, 現在買硬碟, 切割方式勢必得選 GPT。 但是新的 UEFI 韌體真的有比較好嗎? 大推 巴哈姆特上的名詞與觀念解釋教學文。 簡單地說, UEFI 的效能與圖形介面等等各方面確實較佳; 但是 UEFI 其中有一個 secure boot 機制, 其實是大廠逐步奪權的陰謀: 它讓硬體廠商可以沒收你的開機鑰匙, 還企圖說服你 棄權比較安全。 還好目前不需要啟動 secure boot 也還是可以 從 UEFI 模式啟動隨身碟。
理論上關掉 secure boot 也就可以用 grub2 => linux 自由開機了。 可惜我的 grub2 程度只夠實現 開機光碟蒐集狂人 的野心。 較熟悉習慣的 extlinux 最近才開始支援 UEFI, 還來不及學 :-) 所以今天要介紹的是表格左下角: 在新主機板上, 用 UEFI 模擬 BIOS, 並啟動 GPT 分割硬碟上的 linux 作業系統。
首先, 在 UEFI 裡面必須設定: 關閉 secure boot、 啟用 csm (compatibility support module)、 啟用 legacy boot (傳統開機方式)。 這樣才能模擬傳統的 BIOS 開機。
再來, 用 gdisk 切割硬碟。 其實也根本用不到 128 個分割。 自從用慣空間可以靈活彈性分配的 lvm 之後, 現在我的切割方式變成:
- /dev/sdx1: type 為 "ef00" 的 512 MB 分割, 保留給 (將來如果改採表格右下角的) UEFI 模式開機時使用。
- /dev/sdx2: 至少 1G 或 2G, 多版 linux 共用的 boot 分割, 用來安裝 extlinux, 及很多個版本的 vmlinuz 與 initrd.img 。
- /dev/sdx3、 /dev/sdx4、 ...: 幾個 20G 左右的 ext4 (有必要的話甚至也可以格式化成為 ext3 或 ext2) 分割, 為防萬一, 要讓很舊版本的 linux 也可以安裝、 開機。
- 剩下全部空間分給一很大個 lvm 分割。 各個較新版本的 linux 在裡面各佔一個 logical volume。 另外也可以有一個或數個 logical volume 用來放置 live CD 的 root.squashfs -- 但這還需要搭配 以 live-media 選項指定它位於哪個 logical volume。
再來指定要從哪個分割區開機, 並且安裝 extlinux:
ls -l /usr/lib/syslinux/mbr/gptmbr.bin
確認一下檔案只有 440 bytes 大小, 然後安裝 gptmbr:dd </usr/lib/syslinux/mbr/gptmbr.bin > /dev/sdx
(注意: sdx 後面沒有數字)- 假設硬碟已切成 6 個分割區, 而 extlinux 即將裝在 /dev/sdx2。
先用
sgdisk /dev/sdx --attributes=2:set:2
設定第二分割區可以開機。 set 之前的 2 是分割區代號; set 之後的 2 是固定不變的 「開機屬性欄位代號」。 意思跟以前的 fdisk 裡面的 "a" (active) 指令一樣。 再用for i in 1 2 3 4 5 6 ; do sgdisk /dev/sdx --attributes=$i:show ; done
確認只有 /dev/sdx2 可以開機。 - 掛載 /dev/sdx2、 把 /usr/lib/syslinux 複製過去,
用
extlinux -i /掛載點/syslinux
安裝 syslinux。
以上主要參考
archlinux 文件 及 gentoo 文件。
對照一下更清楚: 我寫的
mbootuz.py 只支援 mbr 硬碟; 以上三個動作作用於 gpt 硬碟,
就相當於 mbootuz.py mkboot /dev/sdx
作用於 mbr 硬碟。
快拿一顆空的大容量硬碟來玩玩看吧! 對了, 如果要用
kvm 虛擬機 測試的話, 每次動過硬碟之後,
卸載所有分割區還不夠, 可能還必須 partprobe /dev/sdx
把更底層的 cache 寫出去, 這樣虛擬機才會看得到最新的變化。
照著本文製作 gpt 開機硬碟/隨身碟, 如果失敗的話,
歡迎留言, 記得要貼貼畫面截圖的網址或錯誤訊息文字。
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。