mbr(legacy)引导增加UEFI引导

前言:以下将会唠叨一大堆内容,建议不要读直接进入正文。现已安装了一个debian xfce的操作系统,分区表是MBR(l传统模式引导),

通过写盘工具烧录,能在烧录大多x86的板子上面运行.现有遇到一种奇葩的终端-z8350, 只支持UFFI引导, 看了bios的设置,只有寥寥

几个选项.最终判断它真的只能是UEFI引导, 不知道是bios被去掉的原因,还是这个板子或芯片原因. 由于对bios又不熟,只能从系统引导

层入手了(其实这个也不熟).那为什么不直接在8350。这款终端上面直接安装UEFI引导呢.主要两方面原因:1原本已经稍好的系统,

做了大量的系统更改,编译安装不少软件,前后升级软件依赖库的,再重新安装巨麻烦,容易漏掉哪个细节而留下bug.2 另一原因

是Debian使用UEFI安装,无法烧录到其他板子上,即使是相同型号的板子也不行。但在一些Ubuntu和fedoras的UEFI可以,发现有一

个地方不一样,fedoras的UEFI的分区表是MBR,而debian的分区表是gpt的,也许是这个原因,以前刚开始做这个debian系统时,

尝试过安装debian转换MBR分区表,要么安装失败,要么安装完又变回gpt分区表,所以就放弃这个想法了。

 

正文

     1、新建一个EFI分区 (好在之前保留了一个vfat分区,可以直接拿来用,不然就只能缩容了,我的全部分挂载在/

           目录,而且还是非lvm,要对这里动刀十分麻烦。)

             (1)新建efi分区,这里使用 fdisk /dev/sdx 命令新建,然后mkfs.vfat格式化。

                还有需要将分区标记为efi分区,fdisk这个命令应该可以修改,但我没折腾,直接装gparted图像化工具改(apt install gparted)。

             (2)创建/boot/efi,目录然后将刚新建的efi分区挂载上去。

                 在/etc/fstab编辑增加, (使用blkid查看分区uuid)

                    UUID=xxxx-xxxx  /boot/efi vfat rw 0 0  

                 # mount -a   (挂载/etc/fstab刚填写的)

            

     2、安装grub-efi

       sudo apt install grub-efi

 

  3、使用grub-install 生成efi引导信息 (如果不安装grub-efi会报错缺少modinfo.sh)

           # grub-install --boot-directory=/boot/efi --target=x86_64-efi --efi-directory=/boot/efi --removable

           会在/boot/efi/生成 EFI/BOOT/BOOTX64.EFI

           # grub-install --target=x86_64-efi --boot-directory=/boot/efi  --efi-directory=/boot/efi

       会在/boot/efi/生成 EFI/debian/grubx64.efi

           --boot-directory加不加也不影响最后结果,不加--boot-directory这里执行会可能报错,提示啥未注册或者环境不支持类似(记不太清),

           报错没太大关系,只要/boot/efi 目录下 生成对应的efi文件,有就可以了

    4、重启进入BIOS

             进入BIOS后找到引导项将会看到一个硬盘名字,一个是UEFI+硬盘名字, 还有一个是 写着Debian。

            (1)硬盘名字:原先的mbr传统引导

            (2)UEFI+硬盘名字:  这个是加了 --removable 用于移动设备,比如U盘

            (3)Debian:这个是没加--removable 参数,个人理解是对于非移动设备

              结果3个都可以引导进去。搞那么一个--removable,只是为了兼容性好一点,将做好这个系统,烧录到z8350也可以通过UEFI成功引导。

 

拓展记录:

         1,grub-pc 的-pc是指MBR分区传统引导的对应/usr/lib/grub/i386-pc

         2,grub-efi 的是指uefi引导的,安装了才会有/usr/lib/grub/i386-efi

         3,grub-pc和grub-efi这两个包冲突,只能存在一个,grub-install --target 参数依赖用到

         4,网上提到bios是否支持UEFI,查看 /sys/firmware/efi 这个目录是否存在,其实并不是很正确。

         按我实验所得出的结果是,使用传统引导就不存在/sys/firmware/efi, 而使用UEFI 引导进去

         则才会有这个目录/sys/firmware/efi ,所以并不能说明bios是否支持UEFI。

   linux使用UEFI引导可能需要把secury boot 选项关掉,由于UEFI签名的问题。

         5,由于grub-install 误操作生成一些其他的文件在/boot/efi/, 那先把这个目录所有文件清除

         6,进入grub>命令行,手动引导方法:

             (1)用 ls 查看文件 ,我的机器是列出(hd0) (hd0,msdos1) (hd0,msdos2) 

                     grub> ls (hd0,msdos2)/   查看哪个是root分区,我这里就是(hd0,msdos2)

                     grub> set root=(hd0,msdos2)

              (2) 加载/boot/grub/grub.cfg 文件,这个命令需要在set root=(hd0,msdos2)之后,不然找不到这个文件

                    grub> source /boot/grub/grub.cfg   不知这条命令后面会提示no suitable video mode found

              (3) 装载内核:linux /boot/vmlinuz-xxxx root=/dev/sdx  (这里的xxxx根据你系统内核版本,按tab就可以补全, sdx 这里是根分区,根据实际情况,不能直接(hd0,msdos2)格式)

                   grub> linux /boot/vmlinuz-4.9.0-9  root=/dev/sda2 

                   grub> initrd /initrd.img  

             (4)启动m 看能否引导到桌面系统,反正我是成功了,如果报其他错就自行解决了。

                     grub> boot

  

posted @ 2020-11-09 14:57  海里木有鱼  阅读(1196)  评论(0编辑  收藏  举报