應用場景
自己有一個可啟動移動硬盤,是屬於老式的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鏡像。