l 列出各種可用的註冊編號(list known partition types)
n 在 GPT 內新增一個分區
o 新建一個空的 GPT
p 列出 GPT 內各分區資訊
q 離開 gdisk
t 修改 GPT 內分區的註冊編號(change a partition's type code)
v 驗證 GPT 內容
w 將修改的內容寫到 GPT 內
? 列出所有可用指令
如果是用隨身碟製作 GPT,在劃分完後,可能需要拔插隨身碟一遍, 讓新的分割表可以被 Linux kernel 重新識別. 使用 partprobe 就可讓 kernel 重新讀取裝置的 partition table,而無需熱插拔:
sudo partprobe /dev/sdb
為了能跑各種不同的作業系統,安裝像是 grub 2.0 的 bootloader 是一個非常實用的步驟,而要讓grub 一開機就取得主導權, 就必須先在 GPT 內新增一個編號 0xEF02 BIOS Boot partition 分區(簡稱 BBP),大小只要 1MiB 就足夠了,該分區不需要去規劃它(Format).目前我將 /dev/sdb1 保留給 grub 當作開機啟動區(BBP),大小設定成 64 MiB
但如果要啟動 EFI 相容的像是 Windows boot loader的啟動程序,就需要在 GPT 新增一個編號 0xEF00 EFI System 分區,大小約 500MiB 就夠了,該分區簡稱為 ESP (EFI System Partition),它必須規劃成(Format) FAT32,而所有用來啟動 EFI 的程序檔案就放在該分區的特定目錄底之下,底下將規劃 /dev/sdb2 成 EFI filesystem, 而 /dev/sdb3 將規劃成 ntfs:
sudo su
mkfs.fat -F32 /dev/sdb2
mkfs.ntfs /dev/sdb3
如果是要安裝 Linux 作業系統, 可以在 GPT 內新增一個編號 0x8300 Linux filesystem 分區,再規劃成(Format) EXT4 並將作業系統等檔案,甚至一些 grub bootloader 重要程序及驅動程式都可以放在該分區內,底下將 /dev/sdb2 規劃 EFI filesystem, 而將 /dev/sdb3 規劃成 Linux ext4 filesystem, 準備將 grub 開機程序注入 /dev/sdb 而 boot loader 的其它必要檔案將複製到 /dev/sdb3:
sudo su
mkfs.fat -F32 /dev/sdb2
mkfs.ext4 /dev/sdb3
準備要安裝 grub bootloader, 先將磁碟分區 /deb/sdb3 掛到檔案系統上(例如 /mnt):
mount /dev/sdb3 /mnt
傳統 BIOS 則只要安裝 grub 到 BBP 就可以讓 grub 取得開機主導權, 若是安裝 32 位元的 grub:
grub-install --root-directory=/mnt /dev/sdb
若是安裝 64 位元的 grub:
grub-install --root-directory=/mnt --target=x86_64-efi /dev/sdb
接著要製作符合 EFI 格式的 loader, 需事下載並安裝好 64 位元版的 grub-efi-amd64-bin 或是 32 位元版的 grub-efi-ia32-bin, 若是安裝 64 位元的版本,檔案會被複製到 /usr/lib/grub/x86_64-efi 目錄底下, 32 位元的版本則會被安裝到 /usr/lib/grub/i386-efi 目錄底下:
sudo apt-get install grub-efi-amd64-bin grub-efi-ia32-bin
準備將 /dev/sdb2 用來作為 EFI 開機區(簡稱ESP), 其實只要將 bootx64.efi 或 bootia32..efi 加上 grub.cfg 兩個檔案放到 ESP 特定目錄(通常 bootx64.efi 或 bootia32.efi 要放在 /EFI/BOOT, 而 grub.cfg 要複製到 /boot/grub 或 EFI/BOOT 目錄裏面), 就能讓 grub 取得開機主導權, 其中檔案 bootx64.efi 或 bootia32.efi 可以用 grub-mkimage 製作出符合 EFI 格式的執行檔, 64 位元的執行檔:
umount /mnt
mount /dev/sdb2 /mnt
cd /mnt
mkdir EFI boot
mkdir EFI/BOOT boot/grub
grub-mkimage -d /usr/lib/grub/x86_64-efi -o EFI/BOOT/bootx64.efi -p /boot/grub -O x86_64-efi fat iso9660 part_gpt part_msdos normal boot linux linux16 configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file gfxterm gfxterm_background gfxterm_menu test all_video loadenv exfat ext2 ntfs btrfs hfsplus udf cat
若是要用 32 位元的執行檔:
grub-mkimage -d /usr/lib/grub/i386-efi -o EFI/BOOT/bootia32.efi -p /boot/grub -O i386-efi fat iso9660 part_gpt part_msdos normal boot linux linux16 configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file gfxterm gfxterm_background gfxterm_menu test all_video loadenv exfat ext2 ntfs btrfs hfsplus udf cat
稍微編輯一下 /mnt/boot/grub/grub.cfg 的菜單, 將以下內容輸入存檔.
#==== begin of grub.cfg ===========
set timeout=2
set default=0
hiddenmenu
menuentry "Linux mint 173 Read Only" {
set root=(hd0,3)
set iso=/boot/linux173.iso
loopback loop $iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$iso quiet slash locale=zh_TW.UTF-8
initrd (loop)/casper/initrd.lz
}
#==== end of grub.cfg ===========
需注意的是 grub.cfg 要放在 grub 可以抓到的地方(內定是 /boot/grub/grub.cfg).否則開機找不到時會跳進命令列模式(這時可以試試用 configfile 命令去指定檔案所在的地方讓它秀出選單). 最後將 linux 的 iso 檔複製到 linux 分區, 從上述 grub.cfg 的設定可以看出來, iso 開機檔是磁碟 0 第 3 分區(hd0,3) 的檔案 /boot/linux173.iso,
p.s. 經上述過程製作好的隨身碟, 用 usb hub 將它跟滑鼠及鍵盤連接我的 windows 10 平板電腦(型號是華碩的 vivotab 8, M80TA), 先單按電源鍵開機, 等燈亮起後放開,接著同時按住電源加上音量down鍵, 直接進入 EFI BIOS, 關閉 EFI secure boot 及 fast boot, USB controller 視需要改成 EHCI 或 XHCI, 儲存之後重新開機,按住 ESC 鍵就會跳出選單,選擇從 USB 隨身碟開機,讓 vivo tab 8 進入 linux mint 的世界, 但遺憾的是無線網路不通,觸控螢幕及觸控筆都無法運作. 但玩過一遍之後,我了解了 EFI GPT 的運作模式,這是最大收穫的地方
沒有留言:
張貼留言