UEFI和Legacy相容啟動U盤製作

WuPeng發表於2021-05-29

應用場景

自己有一個可啟動行動硬碟,是屬於老式的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映象。

相關文章