升级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系统盘升级到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重启即可
结束
Say Something!