U 盘分区安装 deepin live 和 win10 pe 2 个系统,并支持 UEFI 和 LEGACY

分四个分区,ESP 100M fat32,deepin live 500M fat32,win10 pe 500M fat32,其他数据分区

legacy 模式安装

grub-install /dev/sda

uefi 模式,先将 efi 分区挂载到 /boot/efi,然后 grub-install

LEGACY 主引导记录在 ESP 分区。通过 grub 控制

bootice 分区管理,选中 ESP 分区,激活;选中其他分区,隐藏;选中数据分区,设为可见

U 盘用 grub4dos 实现多分区多系统估计会更简单点,不过这里采用 grub2,不完美,不过也足够了。

U 盘分区
在分区编辑器中将 U 盘分为你需要的分区,注意 UEFI 引导分区用 fat32 文件系统。当然了,各个系统的安装分区都改成 fat32 文件系统,UEFI 分别启动,也可以。分区少的话采用 MBR 分区表就行,这里分了三个区分别是 live、pe,数据。

安装系统
分别将系统安装到各个分区上。
如果是 PE 或 livecd,可以直接将文件从 ISO 中复制到分区上。或者先用安装工具安装到其他 U 盘上,再从其他 U 盘上复制到当前制作 U 盘对应分区。

系统引导
如果是安装系统,注意引导工具的安装位置一定要是当前 U 盘。如果是直接复制的,则需要手工安装引导工具

Legacy 引导模式,需要修复主引导记录 MBR。在文件管理器中导航到要引导系统所在分区挂载的文件夹,然后右键-打开终端

sudo grub-install --target=i386-pc --boot-directory=./boot /dev/sdb

UEFI 引导模式,可以使用各个分区自己的 EFI 引导文件。如果创建了单独的 EFI 分区(sdb1)的话,可以在文件管理器中导航到要引导系统所在分区挂载的文件夹,然后右键-打开终端

mount /dev/sdb1 /mnt
sudo grub-install --target=x86_64-efi --efi-directory=/mnt --boot-directory=./boot --removable

有需要的话应该也可以安装 ia32-efi,不过系统中默认没安装相关文件,需要安装。

然后编辑 ./boot/grub/grub.cfg,添加 U 盘上的引导项。具体怎么添加可参考硬盘系统上的版本 /boot/grub/grub.cfg

Windows 或 WINPE 最好使用 grub4dos 来引导。将 grldr 放到引导分区根目录,同目录创建 menu.lst,内容

default 0
timeout 0

title Windows PE
root (hd0,1)
chainloader /bootmgr

grub.cfg 添加

menuentry "WinPE" {  
    insmod part_msdos
    insmod ntfs
    insmod ntldr
    set root=(hd0,2)
    ntldr /grldr
}

如果添加了 EFI 分区,需要将 EFI 引导菜单聚合,可以修改 EFI 分区的 grub.cfg。不过个人感觉 U 盘并不需要。

隐藏分区
有些维护用系统可能不太希望被看到,可以在分区编辑器中给分区添加隐藏参数 hidden

想了想,还是改成带 ESP 分区的好了。不然 UEFI 启动菜单显示 UEFI:INIT13(USB:0x80),鬼知道什么意思。

分区方案:ESP、live(ext4)、pe(ntfs)、数据(ntfs) 四个分区

在 live 分区

sudo grub-install --target=i386-pc --boot-directory=./boot /dev/sdb

在 esp 分区

sudo grub-install --target=x86_64-efi --efi-directory=./ --boot-directory=./boot --removable

没想到 UEFI 这样还无法引导。只能复制了 livecd 的 EFI 和 boot 文件夹到 ESP 分区。
奇怪,UEFI 下同一个磁盘居然不是 hd0,而是 hd2。不知道通用不通用。

ext4 分区在分区编辑器中还不能隐藏?只能在 Windows 分区工具中隐藏。

esp 分区 100MB 足够了,只需要 grub 的引导文件,不需要系统本身的引导文件。