|
本帖最后由 seekyou2008 于 2025-8-27 15:30 编辑
Legacy BIOS + memdisk + 微型VHD引导跳板(三引导器集成版) 。
方案目标- 在 Legacy BIOS 下,通过外层引导器加载一个微型 VHD
- VHD 内集成 GRUB2(i386‑pc)、rEFInd(BIOS 模式)、Clover(BIOS 版)
- 内层菜单中一次性列出三引导器和直链目标系统的入口,实现最大兼容和集中管理
一、准备工作- 一台可运行 Linux 或 Windows 的环境(制作镜像)
- memdisk 程序(来自 syslinux 包)
- GRUB2、rEFInd、Clover 最新版本
- 目标系统的 EFI 文件(用于测试)
- 至少 128 MB 可用存储空间(VHD 固定大小)
二、创建微型 VHD Windows 下
diskpart
create vdisk file=D:\uniboot.vhd maximum=128 type=fixed
select vdisk file=D:\uniboot.vhd
attach vdisk
create partition primary
format fs=fat32 quick label=UNIBOOT
assign letter=B
exit
三、安装 GRUB2 (i386-pc) 到 VHD
在 Windows下:
grub-install.exe --target=i386-pc \\.\PHYSICALDRIVE1 --boot-directory=B:
PHYSICALDRIVE1 改成目标磁盘编号(用 wmic diskdrive list brief 查看)。
这会在该盘的 MBR 写入 GRUB2 stage1,并在 /boot/grub 放置核心文件。
四、加入 rEFInd 和 Clover- 将 rEFInd 的 refind 目录复制到 B:\EFI\BOOT\,并配置 refind.conf
- 将 Clover BIOS 版的 CLOVER 目录复制到 B:\EFI\CLOVER\
- 确保:\EFI\BOOT\BOOTX64.EFI → rEFInd \EFI\CLOVER\CLOVERX64.efi → Clover
五、编辑 GRUB2 菜单 (VHD 内)
编辑 /boot/grub/grub.cfg:
set timeout=5
menuentry "Boot rEFInd" {
search --file --set=root /EFI/BOOT/BOOTX64.EFI
chainloader /EFI/BOOT/BOOTX64.EFI
}
menuentry "Boot Clover" {
search --file --set=root /EFI/CLOVER/CLOVERX64.efi
chainloader /EFI/CLOVER/CLOVERX64.efi
}
menuentry "Boot Windows EFI" {
search --file --set=root /EFI/Microsoft/Boot/bootmgfw.efi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
六、外层 GRUB2 调用 memdisk + VHD
在外层 GRUB2(例如 U 盘)的 grub.cfg 中:
menuentry "Universal BIOS→UEFI Boot" {
linux16 /boot/memdisk raw
initrd16 /boot/uniboot.vhd
}
七、启动流程
BIOS
→ 外层 GRUB2
→ memdisk (raw)
→ VHD (内层 GRUB2)
→ rEFInd / Clover / 直接EFI
→ GPT/UEFI 系统
八、维护与扩展- 要更新引导器 → 挂载 VHD,替换 /boot/grub、/EFI/BOOT、/EFI/CLOVER
- 要增加系统入口 → 编辑 VHD 内 grub.cfg 或 rEFInd/Clover 配置
- 可制作多个不同配置的 VHD 文件,通过外层菜单切换
✅ 这样做的好处
- 彻底避免多盘多 ESP 冲突
- 外层稳定,内层灵活可替换
- 同一菜单中三引导器共存,遇到硬件或系统挑剔随时切换
方案的最大长处
- 双层链路:外层极简、稳定,内层灵活、可全替换
- 完全集中化:所有引导逻辑都在 VHD 内,物理盘上可以完全无 EFI 分区,消除了多ESP互抢问题
- 三合一引导器共存:GRUB2 / rEFInd / Clover
- 通吃 BIOS + UEFI:不管机器是老 BIOS 还是新 UEFI,一套 VHD 都能进
另外,我们还可以基于上面的思路扩展延伸其它玩法1:
用 Legacy BIOS + memdisk + 微型VHD引导跳板 来制作一个几十 MB 的 VHD “万能 BIOS 启动入口”,不仅加载速度快,还能链到任意 Windows 系统。
制作步骤1. 准备小 VHD
diskpart
create vdisk file=D:\bootjump.vhd maximum=64 type=fixed
select vdisk file=D:\bootjump.vhd
attach vdisk
create partition primary
format fs=ntfs quick label=BOOTJUMP
assign letter=B
exit
这里最大 64 MB,类型 fixed(固定大小)。FAT32 也可以,NTFS 在 Bootmgr 下通用性好。
2. 写入引导代码
bootsect /nt60 B: /mbr
- /nt60:写入 Bootmgr/Windows 6.x 引导代码
- /mbr:同步写入 MBR(便于 memdisk raw 模式识别)
3. 生成 Bootmgr 和 BCD假设你的真实 Windows 系统在 C:,运行:
bcdboot C:\Windows /s B: /f BIOS
- /f BIOS 强制生成 Legacy 引导结构
- 会在 B: 上写入 \bootmgr 和 \Boot\BCD
- 此时 BCD 会有一个指向 C: 系统的启动项
4. 检查/修改 BCD(可选)如果要链到其他盘/分区,可用:
bcdedit /store B:\Boot\BCD /set {default} device partition=C:
bcdedit /store B:\Boot\BCD /set {default} osdevice partition=C:
5. GRUB2 菜单配置(Legacy BIOS)在 Linux 的 /boot/grub/grub.cfg 添加:
menuentry "Windows via VHD (memdisk)" {
linux16 /memdisk raw
initrd16 /boot/bootjump.vhd
}
- /memdisk 和 VHD 文件路径要按你的实际存放位置调整
- raw 模式表示不解析分区表,直接交给 VHD 内 MBR
启动流程- BIOS 启动 GRUB2
- GRUB2 → memdisk → 将 VHD 整个读入内存并映射成一块假硬盘
- BIOS INT 13h 服务进入 VHD MBR
- MBR → PBR → Bootmgr
- Bootmgr 读取 VHD 内的 BCD,按配置链到真实系统
- 真实系统正常启动
优势- 体积小,几十 MB,加载快
- 内存占用低,适合老机器
- BCD 可随时改,指向不同目标系统
- 不需修改真实系统的引导扇区
思路扩展玩法2:PXE+iPXE 脚本+memdisk+微型 VHD
QEMU 直接测试命令(内置 TFTP 模式)
假设你在 D:\PXE-TFTP 放了:
boot.ipxe # iPXE 脚本
memdisk # syslinux 的 memdisk 程序
uniboot.vhd # 你的微型 VHD 跳板
boot.ipxe 内容示例(HTTP 改成 TFTP 可避免防火墙干扰):
#!ipxe
kernel tftp:\/\/10.0.2.2\/memdisk raw
initrd tftp:\/\/10.0.2.2\/uniboot.vhd
boot
10.0.2.2 是 QEMU NAT 网络下宿主机的固定地址
QEMU 启动命令(调试模式):
cd "D:\Program Files\qemu"
qemu-system-x86_64.exe ^
-m 1024 ^
-net nic,model=e1000 ^
-net user,tftp="D:\PXE-TFTP",bootfile=boot.ipxe ^
-boot n
QEMU 启动命令(无控制台窗口):
cd "D:\Program Files\qemu"
qemu-system-x86_64w.exe ^
-m 1024 ^
-net nic,model=e1000 ^
-net user,tftp="D:\PXE-TFTP",bootfile=boot.ipxe ^
-boot n
运行后链路- QEMU PXE ROM → DHCP(内置 NAT 提供)
- 下载 boot.ipxe
- 脚本执行:下载 memdisk + uniboot.vhd
- memdisk 映射 VHD → 内层 GRUB2/rEFInd/Clover 菜单
- 选择目标系统启动
|
评分
-
查看全部评分
|