admin管理员组

文章数量:1636263

这篇文章主要介绍UEFI启动流程、Linux系统下的备份还原以及grub引导修复。

UEFI相关知识

UEFI启动要求硬盘上有一个特殊的分区——EFI系统分区。它是FAT32格式带有efi、boot标志的分区,大小一般在300MB到500MB之间,用来存储系统的EFI boot loader以及启动时固件使用的应用程序。

Boot Loader 是在操作系统内核运行之前运行的一段小程序。这段小程序可以将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

我们看看自己电脑上的情况,先用 fdisk 找到EFI分区,再用 df 找到挂载点,一般是在 /boot/efi 目录下。

$ sudo fdisk -l

Disk /dev/nvme0n1: 238.5 GiB, 256060514304 bytes, 500118192 sectors

.......

Device Start End Sectors Size Type

/dev/nvme0n1p1 2048 616447 614400 300M EFI System

/dev/nvme0n1p2 616448 23685119 23068672 11G Linux swap

/dev/nvme0n1p3 23685120 118970367 95285248 45.4G Linux filesystem

......

$ df -lh

文件系统 容量 已用 可用 已用% 挂载点

/dev/nvme0n1p3 45G 9.3G 33G 22% /

/dev/nvme0n1p1 300M 32M 269M 11% /boot/efi

/dev/nvme0n1p4 89G 8.4G 77G 10% /home

.....

# 再看看这个目录下有哪些文件

# jzc @ jzc-PC in /boot/efi/EFI [12:11:08] C:130

$ tree -L 2

.

├── boot

│ ├── bootx64.efi

│ ├── grub.cfg

│ └── grubx64.efi

├── deepin

│ ├── fbx64.efi

│ ├── grub.cfg

│ ├── grubx64.efi

│ ├── mmx64.efi

│ └── shimx64.efi

├── Microsoft

│ ├── Boot

│ └── Recovery

└── ubuntu

├── grub.cfg

└── grubx64.efi

EFI分区有一个顶层目录——EFI文件夹,里面有不同的操作系统创建的子文件夹(例如ubuntu deepin Windows)。其中bootx64.efi是默认的引导程序,grubx64.efi是grub引导程序,shimx64.efi是shim引导程序(shim用于安全启动Secure Boot,调用grub)。一般安装Linux的电脑会关闭Secure Boot,这样grubx64.efi 和 shimx64.efi 就没什么区别了。

如果要启动Windows系统,UEFI应加载 EFI/Microsoft/Boot/bootmgfw.efi 。

如果要启动deepin系统,UEFI应加载 EFI/deepin/grubx64.efi 。

那么*.efi 文件是从哪里来的呢?

操作系统安装器会创建 /EFI/ 目录,把引导程序(grubx64.efi)放入其中,然后在UEFI 启动管理器中创建入口点(开机按下F12键选择从何处启动)。

Win8安装时会首先创建自己的目录/efi/microsoft/boot,并在里面放置bootmgfw.efi ,然后再把bootmgfw.efi拷一份到/efi/boot里并命名成bootx64.efi,这样系统默认就从win8启动了。

然后你装ubuntu的时候,ubuntu也会创建/efi/ubutntu/这个目录并放一个grubx64.efi,作用类似于win8的bootmgfw.efi。

UEFI 启动管理器

简单来说,你可以把 UEFI 启动管理器视为启动菜单。例如开

本文标签: 备份过程LinuxUEFI