移动硬盘制作随身Debian(GPT+UEFI)

前言

之前写过一篇文章《 Debian 12移动硬盘安装完全指南》来说怎么在移动硬盘中安装Debian系统,那为什么还要再写一篇类似的贴子呢?因为以下几个原因:

MBR与GPT硬盘格式差异

1)上一篇文章是通过MBR磁盘格式安装的操作系统,本篇是以GPT磁盘格式安装操作系统,两者区别及优缺点如下:

磁盘支持

MBR:最大支持2.2T磁盘空间
GPT:最大支持18EP(1EB=1024PB,1PB=1024TB)磁盘空间

因此如果移动硬盘超过2T,就只能使用GPT磁盘格式

引导方式

MBR:一般与Legacy(BIOS)引导模式搭配使用
GPT:一般与UEFI引导模式搭配使用

当然,这里不是必然的,磁盘格式和引导方式是可以自由组合的。MBR+Legacy组合是历史流传下来的模式(UEFI是后来新出的引导方式),所以后来的新生代GPT+UEFI逐渐占领市场,时间长了大家也就习惯了这两种搭配。但是你要说MBR+UEFI(老牛吃嫩草)可以吗?可以(法律上不强制);GPT+Legacy(小鲜肉炒韭菜)可以吗?不可以(道德上不允许,实际上这种方式是可以使用的,但是不能正常引导启动)。

兼容性

MBR:老机器必然格式,新机器目前一般兼容(CSM兼容),目前兼容性好
GPT:老机器有可能不支持,新机器兼容,随着大硬盘普及,以后可能兼容性更好

Legacy与UEFI引导方式差异

2)上一篇通过Legacy(BIOS)模式启动系统,在新机器上要启用CSM兼容,本篇是以UEFI引导方式启动系统,引导方式更新、更快,两者优缺点如下:
Legacy模式与UEFI模式启动顺序

启动速度与兼容性

Legacy模式:启动时,系统会检测硬件状态以及初始化硬件操作,因此Legacy的硬件兼容性更好,但速度也更慢
UEFI模式:启动时,是通过ESP分区的EFI引导搭配系统预加载环境(BOOT信息)识别硬件的,无需做过多硬件检测,因此启动速度更快,但是硬件兼容性方面要差一些

引导识别复杂度

Legacy模式:比较传统的启动方式,通过检测硬盘头信息识别硬盘,通过硬盘主分区激活标识识别系统分区(识别方式固定,看似复杂实则简单,因此硬盘引导很容易被识别)
UEFI模式:比较新的启动方式,通过扫描硬盘ESP分区获取EFI信息,通过EFI信息启动系统(识别方式动态扫描,支持配置文件动态设置,但也因此看似简单实则被厂商的个性化差异导致扫描失败,因此硬盘引导很容易被遗漏)

关于UEFI模式的乱象,Debian官方有相关说明:(原文链接:Debian Wiki Page — UEFI
在这里插入图片描述
翻译过来我们看看(这里做个非必须但很重要的题外说明):
在这里插入图片描述
Debian官方的说明文档里可以看到以下几点信息:

1)UEFI全称“统一的可扩展固件接口”,但遗憾的是各供应商并未按照“统一”的标准去执行,正因为它具有高可扩展性,导致各厂商的UEFI执行标准五花八门,甚至有厂商强制挤兑其他系统的UEFI正常引导(没错,我说的就是x软)
2)厂商不统一的UEFI标准,微软有一套解决方案,但是微软的解决方案是“污染ESP分区”,这样做会让UEFI标准更糟糕
3)Debian不愿意同流合污,所以Debian默认没有像微软那样做,因此可能存在引导问题,就这个问题,Debian也提供了相关的解决方案(但是貌似并不是能解决所有场景问题)

安装系统

通过了解硬盘模式和引导模式的差异,我们回到本文来具体实操,看看如何解决GPT+UEFI相关问题。

涉及软件

VMware Workstation(安装系统时使用)
DiskGenius(硬盘格式修改及引导修复时使用)
Debian 12系统镜像(debian-12.0.0-amd64-DVD-1.iso)

安装过程

1.通过VMware创建一个Linux虚拟机,虚拟机设置注意以下三点:

① USB兼容性设置为USB3.0以上版本
② 虚拟机固件类型选择UEFI类型
③ 删除虚拟磁盘并添加且仅保留物理移动硬盘为虚拟机硬盘

可参考我上一篇文章《 Debian 12移动硬盘安装完全指南》设置虚拟机并安装操作系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
操作系统的安装过程比较简单,虚拟机设置为UEFI后,Debian系统镜像会自动启动UEFI-installer来安装UEFI模式系统,对应的会自动给移动硬盘上分出ESP分区,因此一般采用默认方式,依次点击“下一步”即可完成系统安装,这里不再做详细说明(可参照上面给出的链接参考MBR安装方式安装即可)。

引导与修复

看到这里是不是懵了?垃圾文章,写教程却不写详细过程,这不扯淡呢吗?而且通过上面的安装方式,自己摸索也能把系统安装完成,并且虚拟机还能正常引导和启动,还要你这文章做什么?

真的是这样吗?您可以尝试再建一个虚拟机,用同样的方式将移动硬盘挂到新虚拟机上运行试试,看还能正常启动吗?或者您可以重启实体机,通过F12手动选择系统引导,看看您能否找到移动硬盘的Debian引导?

我想您此时应该同我一样,去网上查各种资料和各种解决方案,但遗憾的是,网上的资料千篇一律在告诉您“引导丢失”了,需“重建引导”或“修复引导”,但没人告诉你为什么引导会丢失引导是怎么丢失的,没理解原理,我们就无法判断是否真的需要去修复引导,或者我们临时修复了引导,换一台机子我们是否还需要继续修复引导(我说这些可能您现在还不太能理解,但是接下来往下看,我想您会想明白的)

我的猜测:
系统通过UEFI引导正常启动需要两个条件:
① BIOS中需要保存正确的BOOT信息【非boot程序】,以便磁盘被识别为可启动磁盘(决定是否能在BIOS中被识别出引导选项)
② ESP分区中需要保存正确的UEFI文件,并且该文件存放在“规范标准”的路径下(决定系统boot程序【非BOOT信息】能否被.efi文件引导启动并执行)

有了以上猜测,我们可以做一个验证(也就是上面提说的两种无法启动的情况),无法正常引导系统启动可以分为两种情况:【BIOS支持自定义引导文件启动系统】 和 【BIOS不支持自定义引导文件启动系统】

BIOS支持自定义引导文件启动系统

这种情况我们可以通过VMware虚拟机模拟出来。
在这里插入图片描述
此时我们可以通过开机按F2进入Boot Manager(或等待一会儿,等系统检测所有启动项超时时会自动进入Boot Manager)
在这里插入图片描述
在这里插入图片描述
然后依次进入:您的硬盘——> EFI——> debian——> 选择shimx64.efi或grubx64.efi就可以正常进入Debian系统

shimx64.efi支持在安全启动(Secure Boot)开启状态下运行未签名的GRUB
grubx64.efi在安全启动(Secure Boot)启动时,未签名的GRUB将无法启动

在这里插入图片描述
这是一种临时进入系统的方式,因为它每次都需要手动选择引导文件,这样比较麻烦,好在Debian针对引导信息丢失提供了解决方案,即通过grub-install工具重新安装引导。

sudo grub-install

但是我们真的是引导信息丢失了吗?实际上我们仅通过update-grub命令更新grub信息就可以正常引导启动

sudo update-grub

这也说明我们可能不是引导信息丢失,而仅仅是BIOS中的BOOT信息丢失而已,因此当我们将移动硬盘更换到另外一台支持自定义引导文件的电脑上时,只需第一次手动选择引导文件,然后更新引导信息即可修复完成。

理论上BIOS启动时会检测所有硬盘的ESP分区识别可启动的.efi文件,如果.efi文件被存放在个性化的路径下(非标准化路径),那系统安装时应该会在BIOS中保存对应的BOOT信息,以便BIOS根据BOOT信息找到对应的.efi文件(我的猜测,仅供参考)

BIOS不支持自定义引导文件启动系统

这种情况我的实体机就是,BIOS没有选择自定义引导文件的配置,您可以看看您的电脑是否支持。
就这种情况,我们需要更深入的想一想,为什么Debian的安装光盘镜像(debian-12.0.0-amd64-DVD-1.iso)可以在BIOS中被识别(最起码在虚拟机中被识别,或者您也可以把该镜像制作成U盘启动后发现也可以被BIOS识别)。
我们对比一下我们已经安装好的系统和安装光盘镜像文件的差异(Linux是文件系统,因此完全可以通过比对文件找出差异)
安装光盘镜像文件内容
安装光盘镜像EFI文件夹内容

通过DiskGenius查看我们的移动硬盘文件结构如下:
在这里插入图片描述
发现EFI分区中缺少了boot文件夹,而安装光盘中有这部分,那我们是不是将安装光盘中的boot文件夹及其下内容拷贝出来放入移动硬盘EFI分区中就可以实现引导修复了呢?答案是:是的,就是这么简单(但这也违背了Debian不愿意给ESP分区存放boot相关信息的初衷【ESP:55555~我脏了】)。
在这里插入图片描述
在这里插入图片描述
此时您再尝试重启进入BIOS,发现会多两个debian启动选项,这是由于boot下有bootx64.efi和grubx64.efi两个文件,而当我们将boot文件夹存放到ESP分区的EFI文件夹下时,恰好组成了标准的引导路径和引导文件,满足BIOS默认的扫描标准,所以我们能识别到相应引导信息并成功启动系统

① 磁盘是GPT格式
② 磁盘有ESP分区
③ ESP分区下存在EFI/boot/bootx64.efi引导文件或EFI/boot/grubx64.efi引导文件
④ bootx64.efi或grubx64.efi引导能够将系统指向到系统分区下/boot目录

在这里插入图片描述

bootx64.efi是一个通用名,权限丰富且大于Windows默认引导文件(假如Windows默认引导文件不存在时,完全可以使用bootx64.efi替代引导),另外将任意有效的efi文件修改为bootx64.efi都会被计算机识别并启动。
grubx64.efi是一个默认引导,这个在前面我们有提到过,并与shimx64.efi做过对比。

好了,引导修复就聊到这里,GPT+UEFI已经成为主流,但是说真的,UEFI规范真的不规范,Debian的引导在ESP分区中存放路径为/EFI/debian/xxx.efi,Ubuntu的引导在ESP分区中存放路径为/EFI/ubuntu/xxx.efi,可以说路径五花八门,一个厂家若不想兼容他们,仅需要检查/EFI/boot/下是否存在.efi文件即可,其他的路径都忽略不计,这样的操作非常有可能;更何况Windows的EFI内容,虽然做到了解决兼容性问题,但是真的是不忍直视~
在这里插入图片描述

本文包含实验和猜测部分,如不准确,欢迎留言指导,感谢您的阅读,希望对您有所帮助!

猜你喜欢

转载自blog.csdn.net/Asgard_Hu/article/details/131700377