这里主讲UEFI模式和GPT(分区类型),就不说传统BIOS模式和MBR(主引导记录,也是分区类型)了,毕竟它俩是旧的技术,而我喜欢新的技术
先说启动过程。可能需要先明白一些概念,如果不懂就…查啊
术语
firmware:固件(也就是固化在硬件里的软件
BIOS:Basic Input/Output System
,基本输入输出系统
UEFI:Unified Extensible Firmware Interface
,统一可扩展固件接口
GUID:globally unique identifier
,全局唯一标识符
GPT:GUID Partition Table
,GUID分区表
EFI:Extensible Firmware Interface
,可扩展固件接口
ESP:EFI system partition
,EFI系统分区
Linux启动过程
UEFI用于替代传统BIOS启动模式,因为比传统的模式少了BIOS自检这一步骤,所以能提高机器启动速度
Linux终端下面使用systemd-analyze plot > plot.svg
可以生成一张SVG,里面显示了开机时间的详情。可以看见,UEFI的启动过程是这样的:
firmware → loader → kernel → systemd
其中,这里的firmware是UEFI
,loader是GRUB
,kernel是Linux内核,而systemd
是在内核准备完毕后启动的第一个进程,它管理着Linux的所有服务(上图中systemd下方),包括CLI和GUI。systemd
在被内核启动后启动其他的服务,直至系统准备完毕
注意,kernel和systemd同属于操作系统
如果是传统的BIOS模式,那在BIOS初始化之后,在启动loader之前还要多一步——BIOS自检
分区方案
首先要知道ESP分区(文件系统类型为EFI System
)是个什么东西。ESP通俗地讲就是一个系统引导分区,里面包含已安装系统的引导程序或内核,硬件的驱动等
在讲我的分区方案之前,先来看看女儿Manjaro
的一般分区方案
Manjaro一般分区方案中的ESP
安装时选择的自动分区就是一般的分区方案(这里请注意!硬盘已存在另一个系统是不要选择自动分区
输入lsblk
命令查看,结果如下
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT |
可以看见,sda1分区就是ESP分区,而sda2是根分区
P.S. ESP分区要作为第一个分区
由此可得,Manjaro把ESP分区挂载到/boot/efi
目录了。我们都知道/boot
是操作系统的内核目录,ls -al /boot
命令查看,结果如下
1 | total 45812 |
ls -al /boot/efi/EFI/
结果如下
1 | total 16 |
常见的分区方案中的ESP
在很多教程中,ESP都被直接挂载到/boot
了,内核也放在这里,这样在命令行下安装Linux时比较方便,操作也简单
但是,作为一个有洁癖的人(还是强迫症?),这样不符合我的原则
我的分区方案
起初装Arch的时候,我用引导程序的并不是以GRUB为主,而是rEFInd
(虽然现在只用GRUB…),在网上搜教程的时候找到了这个帖子,来看图
看到没,这才是更完美的分区方案,ESP分区的位置这样最合适不过了
具体结构看终端运行命令的结果。先说明,目前本子里有,256G固态+1T机械双硬盘,Arch Linux+Windows 10双系统,Arch里有默认和LTS双内核,其中ESP分区和双系统在固态硬盘(Arch占空间略多),/home
分区(500G)和Windows的D盘和E盘在机械硬盘
P.S. 没有分配swap,因为服务器才需要,而我用作桌面
lsblk
命令:
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT |
ls -al /boot
命令:
1 | total 85564 |
ls -al /esp/EFI/
命令:
1 | total 28 |
df -h
命令:
1 | Filesystem Size Used Avail Use% Mounted on |
这种结构在WiKi里也有详细介绍,现在总结一下我的分区方案挂载与安装grub时的操作
挂载:
如果固态硬盘不支持nvme协议,请把nvme0n1p1
换成sda1
,依次推类
1 | mount /dev/nvme0n1p2 /mnt |
文字描述就是
- 挂载
nvme0n1p2根分区
到临时根目录/mnt
- 在根目录下创建
esp目录
- 把
nvme0n1p1即ESP分区
挂载到esp目录
- 递归创建
Arch目录
(在ESP分区,或esp目录下 - 创建
boot目录
- 挂载子目录Arch到boot目录(所以加了-B选项
- 创建
home目录
- 挂载
sda1即home分区
到home目录
安装grub:
1 | grub-install --target=x86_64-efi --efi-directory=/esp --bootloader-id=GRUB |
注意上面--efi-directory
的参数,和所生成配置文件的目录
至于ESP分区的大小,上面可以看见,我是分了512M的,要知道我可是装了双系统且Linux装了双内核并有两个grub主题,再看看已用的空间占比,仅28%
,而已
目录树形结构
最后分别是Arch和Manjaro的相关目录树形结构,空行表示中间删掉了大部分不关紧要的,不删会很长很长
Arch的
tree /esp
1 | /esp |
Manjaro的
tree /boot
1 | /boot/ |