应对复杂的装机环境,bios/uefi,windows/linux。
假设已有一台装好grub(2.02)
的linux系统。U盘的设备路径/dev/sdb
。
U盘分区
- 使用mbr分区表 只有mbr分区表才能同时支持bios和uefi
- 分两个区
/dev/sdb1
大一些,日常存储文件用/dev/sdb2
用作esp分区(需要调整分区类型为ESP文件系统,加上boot标记)
挂载U盘
按照该对应方式挂载
/dev/sdb1 >>> /tmp/data
/dev/sdb2 >>> /tmp/esp
安装grub引导文件
grub-install --target=i386-pc --boot-directory=/tmp/data/.boot /dev/sdb
安装uefi引导文件
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,可以用来加载不同的配置文件。
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
配置文件具体怎么写,我也不会。