本文并不是详细教程,只是交流下解决相关问题时学到的一些知识,不会特别标注某些操作步骤
起因是当我格式化整盘,单独安装Linux,准备彻底迁移到Linux时,发现开机无法正常引导,提示我没有可启动的设备,随后进bios主板添加uefi启动项,重启无用,F12选择启动项界面也并没有列出我的硬盘。切换到传统引导,因为并不是mbr分区,也没能引导成功,无奈,只能装回windows,这时主板才能识别硬盘,然后装Linux,默认启动Linux,这样过着双系统的日子,一想到电脑里还躺着一个几十G大小的系统当我启动的跳板,就十分难受

在一次次的查找解决方案过程中,找到了问题所在
根据 UEFI 标准,操作系统 / 引导安装程序 应该在 ESP 分区下,建立出如下的目录结构以使主板识别

如图所示,根据标准,不同的系统应该建立对应名字的目录,其中放置有efi 文件以使主板能够加载对应的系统引导程序
BOOT 文件夹是 Fallback 的,即兜底的,默认的,它只应该在主板没有找到其它任何“系统”的情况下,被读取里面的内容,进行引导
正常情况下,当用户指定默认启动项后,比如指定 Fedora 后,主板应该直接去找 Fedora 目录,引导 Fedora 系统开机
然而 6
某些OEM厂商,不知道是默认判断用户不会安装其它系统?亦或者是和Microsoft有着利益抱团的行为,他们的某些电脑的主板BIOS上,只会寻找 BOOT 和 Microsoft 两个目录,如果找不到,就认定该硬盘没有可启动的项目(系统),比如我某品牌的台式机和笔记本,或者当下新的电脑已经不存在这些问题了,但是不能否认这些问题存在过出现过

正是因为上述原因,当我们格式化硬盘时,原先的双系统 ESP 分区也一并丢失,包括里面的BOOT目录,新建立的ESP分区下,只会有你的发行版的目录,比如,debian ,比如 fedora ,比如 Mint
Linux发行版默认情况下并不会篡改计算机用户设定好的 Fallback 即 BOOT 目录,它是启动电脑最后的保障,也是默认的,Linux不会主动建立BOOT目录以免覆盖或破坏用户的引导选择
所以,问题说到这里,答案已经有了
建立BOOT文件夹

在说如何建立BOOT之前,先提一下BOOT文件夹下都有什么文件
在成功进入系统之后,查看了ESP分区下的构成,发现BOOT下的文件几乎和debian目录下一样

此时,不难发现,BOOT文件夹的建立其实就是把你所希望启动的系统目录复制过来,改名为BOOT即可,也就是无论主板选择这两个目录其中哪一个,都是启动同一个,特别是当主板不够规范,只识别 BOOT 和 Microsoft 的情况下
但是有一个文件需要特别注意,还是以 debian 为例,目录下有一个 shimx64.efi ,或者说任何支持 UEFI + Security Boot 启动的现代 Linux 都有这个,它是支持 UEFI 安全启动,经过签名后生成的引导文件,主板正常情况下会加载它来开机,grubx64 是第二选择(未签名,不支持安全启动)
BOOT目录下有一个 BOOTX64.EFI ,它就是当主板选择BOOT目录启动时,默认选择的启动文件
当我计算 shimx64.efi 和 BOOTX64.EFI 的md5值后发现,两个文件校验值相同,其它同名文件校验值也是相同,就不额外贴图了
即
BOOT文件夹是debian直接复制过去的,里面所有文件保持不变,shimx64.efi 改名为 BOOTX64.EFI

解决办法,任意一个:
有的iso镜像提供高级安装模式,比如 debian 在安装起始界面可以选择“高级选项--专业安装”,提供各个流程更详细的控制,在随后安装grub的图形化界面中,安装包会提供安装到 “可移动介质” 选项,选择后和下面的操作结果是一样的,更简单方便些
在iso镜像安装过程中,通过切换 tty 或者 进入安装镜像提供的 shell 界面,手动安装 grub ,添加 removable 参数,会覆盖、建立BOOT文件夹。Arch Linux等手动安装方式也可以这样添加参数,注意不要照抄硬盘路径,以你的为准
grub-install /dev/sda --removable 或者在iso安装完grub后,切换 tty 或者进入安装包提供的 shell 界面 ,进入 /mnt 或者 /target ,找到启动目录,手动复制粘贴对应文件 (大多数Linux在安装过程中都是将新系统挂载到 /mnt 或者 /target 目录下进行安装的)
如果不知道如何 或者 不能手动安装grub,就保持安装镜像的行为,在安装完成之后,通过手头的各种镜像盘,如 live 镜像启动、win-pe启动、或者拆下来装到其他机器上等各种手段,直接挂载该硬盘,手动进入ESP目录下复制粘贴,并改名,参照上一节内容
通常,只要不是格式化整盘导致ESP分区丢失,重新安装系统就不必重复这样处理
如果你的硬盘取下又装上,或者换了台电脑装上后无法加载启动,也可以检查下是不是因为这个原因
如果BOOT文件夹建立后没能开机成功。通常不会这样。如果是,那就进入BIOS添加一次启动项即可,启动路径和文件上面已经讲过
围绕这个点,排除文件损坏或者用户自己编辑grub失误的情况,大多数启动引导问题都能解决,以及双系统引导