使用grub2制作bios和uefi双启动u盘

日期: 2018-03-23 分类: geeks

应对复杂的装机环境,bios/uefi,windows/linux。

假设已有一台装好grub(2.02)的linux系统。U盘的设备路径/dev/sdb

U盘分区

  1. 使用mbr分区表
    只有mbr分区表才能同时支持bios和uefi
  2. 分两个区
    /dev/sdb1大一些,日常存储文件用
    /dev/sdb2用作esp分区(需要调整分区类型为ESP文件系统,加上boot标记)

挂载U盘

按照该对应方式挂载

1
2
/dev/sdb1 >>> /tmp/data
/dev/sdb2 >>> /tmp/esp

安装grub引导文件

1
grub-install --target=i386-pc --boot-directory=/tmp/data/.boot /dev/sdb

安装uefi引导文件

1
grub-install --target=x86_64-efi --boot-directory=/tmp/data/.boot --efi-directory=/tmp/esp --removable

grub.cfg

如果安装成功,在/tmp/data/.boot下应该有grub目录。创建/tmp/data/.boot/grub.cfg即可。

可通过${grub_platform}变量判断是bios还是uefi,可以用来加载不同的配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if [ "${grub_platform}" == "efi" ]; then
menuentry "Microsoft Windows Vista/7/8/8.1 UEFI-GPT" {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --set=root $hints_string $fs_uuid
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
fi
if [ "${grub_platform}" == "pc" ]; then
menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS-MBR" {
insmod part_msdos
insmod ntfs
insmod search_fs_uuid
insmod ntldr
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
ntldr /bootmgr
}
fi

配置文件具体怎么写,我也不会。

参考文章

基于 GRUB2 制作滋瓷 BIOS/UEFI 双模式启动的 Linux/Windows 安装U盘
GRUB