UEFI和Legacy兼容启动U盘制作
应⽤场景
⾃⼰有⼀个可启动移动硬盘,是属于⽼式的BIOS启动⽅式,最近换了新电脑,因为电脑只⽀持uefi的启动⽅式,所以决⼼为移动硬盘增加uefi启动⽀持,如何将⼀个只⽀持BIOS启动(或者 Legacy启动)的U盘或者移动硬盘增加UEFI启动⽀持?
主要问题
如何设置u盘启动⽹上有很多此类的资料,,,按⽅法的操作后始终不能⽀持⽤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镜像。