應用場景
自己有一個可啟動行動硬碟,是屬於老式的BIOS啟動方式,最近換了新電腦,因為電腦只支援uefi的啟動方式,所以決心為行動硬碟增加uefi啟動支援,如何將一個只支援BIOS啟動(或者 Legacy啟動)的U盤或者行動硬碟增加UEFI啟動支援?
主要問題
網上有很多此類的資料,Switch Debian from legacy to UEFI boot mode,中文翻譯,按方法的操作後始終不能支援用Legacy的方式啟動,另外的所謂的要將主分割槽放在第二個的設定,仍然不能達到期望。最
知識要點
uefi啟動並不直接要求分割槽表是gpt格式,他只要求分割槽中能找到esp分割槽,並且esp分割槽中有efi資料夾,在efi資料夾下,有boot資料夾,並且資料夾下有可啟動的efi映象。
製作辦法
安裝grub-efi
可以最開始就將 grub-efi 安裝好,當然也可以後續安裝
修改分割槽
利用gparted 、diskgenius 等工具修改行動硬碟分割槽,將MBR分割槽表改為GPT分割槽表(兩者主要的區別),增加esp分割槽(ESP雖然是一個FAT16或FAT32格式的物理分割槽),大小根據啟動檔案的大小而定,100Mb一般夠用,再用分割槽工具將GPT分割槽表格式直接轉換為MBR分割槽表,這才是重點。
重新安裝GRUB
啟動Debian Live CD 重新安裝 grub。
掛載檔案系統
主要是為下步chroot中操作設定環境,所以,至少要掛載 / ,/boot,/boot/efi, /dev/, /dev/pts ,/proc, /sys,其他視情而定,比如tmp,var 等單獨分割槽的話還要單獨掛載。以下是一個示例。
# mount /dev/sdb1 /mnt/boot
# mkdir /mnt/boot/efi
# mount /dev/sdb2 /mnt/boot/efi
# for i in /dev/ /dev/pts /proc /sys ; do mount -B $i /mnt/$i ; done
注意 這是一個示例,/dev/sdXX根據實際進行修改,示例程式碼中 /dev/sdb1 是我們原boot分割槽,/dev/sdb2是我們新建的esp分割槽。
如果前面沒有安裝 grub-efi,可能需要在chroot裡面訪問網路,則要進行正確的網路設定,當然,如果你行動硬碟中系統本來就可能訪問網路,則不需求進行其他設定。
將esp分割槽加入fstab
檢視esp分割槽的uuid。
# ls /dev/disk/by-uuid
fat32格式一般是形如 ABCD-EFGH 的樣子,可能看到多個esp分割槽分辨不出來,其實在分割槽工具中新建的時候可以記下來。
將分割槽設定為自動掛載。
# echo "UUID=ABCD-EFGH /boot/efi vfat defaults 0 2" >> /mnt/etc/fstab
當然這也可以在進入到chroot環境後再設定,只是/mnt/etc/fstab 變為 /etc/fstab罷了。
進入chroot環境
# chroot /mnt
安裝efi啟動檔案
# grub-install /dev/sdb
其他設定
Debian 9 系統上安裝啟動檔案後,在esp分割槽的efi資料夾中會生成 debian資料夾,沒有boot資料夾,將其複製一份
# cp -r debian boot
總結
uefi啟動並不直接要求分割槽表是gpt格式,他只要求分割槽中能找到esp分割槽,並且esp分割槽中有efi資料夾,在efi資料夾下,有boot資料夾,並且資料夾下有可啟動的efi映象。