鸽了五年来填坑了
随着人年龄越来越大,逐渐对U盘的数量不再那么感兴趣,反而觉得一串串的U盘变成了随身携带的累赘,生怕一不小心就弄丢了。
几年前就试图给自己整个活,弄一个支持Windows+Linux+MacOS的三合一安装启动盘,无奈学识尚浅,花了几周都没搞定。
最近正好手头有装服务器的需求,心中的整活之魂又燃起来了,花了一下午时间总算把坑填好。
一 明确需求
由于通常情况下不论哪个系统都要求使用一个完整的U盘(尤其是MBR时期,刻盘是最方便的MBR更新方式),所以常规情况下换个系统就要重刻一张盘。
因而本项目的基本需求就是一个U盘能够在不修改引导的情况下完成三类系统的安装,且最好同时支持兼容(后文简称为MBR)+UEFI模式。
二 设计方案
三种不同的系统安装方法有所不同,虽然W/L/M三家都支持原装启动盘启动,但是Windows的官方启动盘功能实在是少得可怜,远比不上*nix两家的shell好用,所以大部分情况下会使用PE+WinNTSetup的方法,附加工具多,可定制化程度高。因而在整体方案上,使用PE工具建立Windows安装环境,Linux、MacOS则原盘启动安装。
好在MBR/UEFI的启动方式不同,一个是读扇区,一个是读文件系统,因而两者具有共存的余地——实际上现在的绝大部分启动盘都是同时支持两种模式的。
由于MacOS很早就抛弃了MBR启动,所以MBR启动不做MacOS支持(其实也不难,加个Chameleon iso引导就行);其他方式能支持则尽可能支持:
|
Windows |
Linux |
MacOS |
MBR |
√ |
√ |
× |
UEFI |
√ |
√ |
√ |
三 大致步骤
由于MBR模式和UEFI模式在引导方式上有区别,因而要采用不同的方式对待。由于需要支持MBR模式,因而整体上U盘还是需要保持MBR格式的。
对于UEFI启动比较简单,首先到网上找一份efi shell,放到efi分区(也就是U盘物理地址上第一个分区)。然后启动进入efi shell之后,直接用命令行执行要uefi启动的系统引导即可。
由于只有MacOS本身可以正常操作其文件系统,通常要为MacOS的安装盘单独准备一个分区,然后在MacOS里用磁盘工具恢复分区。(对,手头需要先有一个能用的MacOS,不论是白的还是黑的)
MBR模式的稍微麻烦一点,我这里是基于大白菜魔改的。大白菜的多级菜单引导模式是基于grldr
做的,也就是大名鼎鼎的grub4dos
,因而需要通过修改菜单,让grub4dos
来引导Linux系统的启动流程。
需要准备一个工具fbinsttool
,用来读写大白菜的隐藏文件系统。大白菜专门预留了一个文件用来给我们制作自定义的启动菜单,在(ud)/IDBC/GRUB/DIY.LIST
位置,在里面照抄现有启动项即可实现自定义启动项的添加。
以我配置的Rocky Linux 9为例:
title 【01】 Install Rocky Linux 9 Minimal
# find只支持定位文件,不支持文件夹!
find --set-root --ignore-cd --ignore-floppies /RPM_GPG_KEY_ROCKY_9
kernel /ISOLINUX/VMLINUZ inst.stage2=hd:LABEL=Rocky_9_0-x86_64-dvd quiet
initrd /ISOLINUX/INITRD.IMG
boot
需要注意的是,这里最好用dd直接把光盘镜像的分区写入到U盘,不然后面的Anaconda安装可能找不到本地安装源。然后偷懒使用光盘内特有的文件来定位该分区(因为grub4dos
不支持用分区名定位)。然后照常加载kernel和initrd即可完成启动。需要注意的是inst.stage2
参数,该参数用于指导安装器Anaconda的加载,要是填错了或者没填会导致启动失败。(在光盘里这俩文件在不同位置出现了几次,估计是为了支持不同的启动方式吧)