前言:以下将会唠叨一大堆内容,建议不要读直接进入正题。现已安装了一个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,将会看到一个硬盘名字,一个是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