升级MBR引导到GPT的UEFI引导

MBR(Master Boot Record),是一种传统的引导方式,主引导记录,是位于硬盘或其他存储设备第一个扇区(扇区0)上的特殊数据区,包含启动加载程序和分区表等信息,是计算机启动过程中的关键环节。

MBR的作用主要有以下几点:

  • 加载操作系统引导程序: MBR中的启动加载程序负责读取分区表并根据活动分区的标识符,将控制权交给该分区内的操作系统引导程序。
  • 维护分区表: MBR中包含一个分区表,用于记录硬盘上的分区信息,包括分区类型、起始扇区号、结束扇区号等。
  • 启动计算机: 当您打开计算机时,BIOS会首先从硬盘的MBR中读取信息,然后根据分区表中的信息找到活动分区的引导程序,并将其加载到内存中执行,最终启动操作系统。

当代新安装的系统及硬件都基本上已经变成GPT的UEFI引导了。GPT(GUID Partition Table)分区表已成为主流的分区表格式,GPT使用GUID来唯一标识每个分区。GPT与MBR最主要的区别在于:

特性 MBR GPT
最大分区容量 2TB 18EB
分区数量 最多4个主分区或3个主分区+1个逻辑分区 无限制
兼容性 适用于旧版操作系统和BIOS 适用于新版操作系统
防病毒能力 较弱 较强
MBR TO GPT UEFI BOOT
MBR TO GPT UEFI BOOT

本文记录将旧的MBR系统盘升级到GPT的UEFI引导,节省重新安装及配置系统的问题。

第一步:将旧系统盘MBR分区转成GPT分区格式

方法一:进入PE系统中,使用DiskGenius将系统盘直接转成GPT格式保存(推荐)

方法二:进入Linux USB启动盘,进入Terminal终端命令行,下载安装gdisk, 可以先使用lsblk -f, 或fdisk -l 检查自己硬盘信息,确认盘符;再执行以下命令进行转换

sudo gdisk /dev/sdX

Enter r to go to the recovery and transformation options.
Enter g to convert GPT to MBR and exit.
Enter w to write the changes and exit gdisk.

注:使用linux USB启动盘进入Terminal要进入到rescue mode并且是图形,方便向上翻看内容,相比命令行模式要简单

第二步:创建EFI分区

方法一:进入PE系统中,使用DiskGenius将可以直接生成EFI分区,同时会生成windows保留分区,可忽略或后期删除(推荐)

方法二:进入Linux USB启动盘,进入Terminal终端命令行,下载安装parted, 命令行parted -l也可以查看分区信息。

使用gdisk创建EFI分区

gdisk /dev/sda

sudo gdisk /dev/sda
n # New partition
# Accept defaults for partition number and start sector
+512M # Size of the partition
EF00 # Type code for EFI System Partition
w # Write changes

使用parted创建EFI分区
sudo parted /dev/sda

sudo parted /dev/sda print 查看分区信息

Create the 500MB ESP:
mkpart primary fat32 1MiB 501MiB  # Adjust the start and end points if necessary
set 2 boot on
set 2 esp on
quit

Format the ESP:
sudo mkfs.fat -F32 /dev/sda2
安装mkfs.fat:apt install dosfstools

在下一步安装GRUB for UEFI之前,推荐fdisk -l检查一下盘符信息

系统盘 /dev/sda 并确保文件系统为liunx, 验证方法

lsblk
sudo parted /dev/sda print

修改方法

sudo gdisk /dev/sda

Enter t to change the type.
Enter the partition number (e.g., 1).
Enter the type code for Linux filesystem (typically 8300).
Enter w to write the change
Enter y to save the change

主分区/dev/sda1

ESP分区/dev/sda2

第三步,安装GRUB-UEFI引导

进入Linux USB启动盘,进入Terminal终端命令行

sudo mount /dev/sda1 /mnt  # 系统分区
sudo mkdir -p /mnt/boot/efi
sudo mount /dev/sda2 /mnt/boot/efi  # EFI分区

挂载必须要系统文件
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

进入原安装系统中
sudo chroot /mnt

安装
apt update
apt install grub-efi-amd64

验证efivarfs文件是否挂载
mount -t efivarfs efivarfs /sys/firmware/efi/efivars

安装GRUB到主硬盘
grub-install /dev/sda

更新GRUB配置
update-grub

退出chroot
exit

解挂文件系统并重启
sudo umount /mnt/boot/efi
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt
sudo reboot

在GRUB中启用操作系统探测器os-prober的步骤

sudo nano /etc/default/grub

去掉注释#
GRUB_DISABLE_OS_PROBER=false

:wq保存退出,如需要,先安装
sudo apt update
sudo apt install os-prober

并更新
sudo update-grub

操作系统探测器os-prober验证

sudo mount /dev/sda2 /boot/efi
sudo os-prober

检查以下文件是否存在
/etc/grub.d/
/boot/grub/

重启后,就可以看到原来的系统。

重建Initramfs

当旧的MBR系统中构建过RAID陈列,有进入系统中有可能出现“running /scripts/local-block ... mdadm: no devices listed in conf file were found”错误,这将需要重建Initramfs.

重建Initramfs仍然需要在进入Linux USB启动盘后,进入Terminal终端命令行重建,并且按照上述命令挂载必要系统与系统文件,使用以下命令进行重建initramfs
update-initramfs -u

但如果提示以下错误“/var/tmp/mkinitramfs_NJ20KL/lib/modules/4.19.0-21-amd64: no such file or directory”,这是因为我们是live USB终端下进行的,并没有系统kernel存在。需要重新安装一次.
apt install linux-image-amd64

检查/var/tmp/目录下是否已经存在旧的,如果存在则需要先删除,正常是不存在,要不然也不会报错了。
rm -rf /var/tmp/mkinitramfs_*

然后再更新initramfs
update-initramfs -u

检查RAID配置是否正确
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u

再回到第三步,重新安装一次grub-efi-amd64重启即可

结束