装了黑苹果后,同一硬盘多个分区,有不同的系统,为了统一管理,需要找一个通用性强的引导程序。
现在环境是这样的一块硬盘,MBR分区方式,4个主分区分别如下:
文件系统 | 操作系统 | 引导方式 | |
分区一(C:) | NTFS | Windows | Bootmgr |
分区二(D:) | EXT4 | Ubuntu | linux/initrd |
分区三(E:) | HFS+ | MacOSX | boot(变色龙) |
分区四(F:) | FAT32 | 无 | grldr |
分区四是目前只有1GB,预留用来存放通用引导程序的分区,这个分区是活动分区。
这样的分区方式,设计思想是各个分区负责引导各个分区的操作系统,互不干扰。
如果把grldr放到C盘根目录下,由Bootmgr来加载grldr,这不符合我的设计美学。
一开始我是这样思考的:
MBR设置为NT6 MBR,活动分区设置为分区四,分区四的PBR设置为GRUB4DOS。
也就是在分区四的根目录添加grldr文件和menu.lst文件,由它来引导这三个系统。
但很快就发现GRUB4DOS不支持HFS文件系统,不能读取分区三下面的/boot文件。
于是又想到了它的chainloader,用链式引导的方式,引导各个分区的PBR。
但很快又发现HFS系统的PBR很难正确地设置,还是无法引导/boot文件。
最终只能放弃GRUB4DOS。
目前能支持HFS文件系统的还是只有Chameleon和GRUB2。
优先考虑GRUB2这个引导程序。
好吧,先去下载GRUB2的内核文件,自己制作一个GRLDR吧:
下载地址:http://alpha.gnu.org/gnu/grub/
然后使用下面的命令生成一个支持HFS的core.img文件:
grub-mkimage.exe -C none -o core.img -O i386-pc -d i386-pc -p / biosdisk memdisk disk part_apple part_gpt part_msdos iso9660 udf fat exfat ntfs ext2 hfs hfsplus ls lsapm mmap loopback net chain ntldr linux linux16 multiboot boot reboot help
这个core.img可以用GRUB4DOS的kernel命令引导,但是无法被PBR引导。
虽然有boot.img和diskboot.img,但还是没有找到正确的引导方法。
最终我用GRUB4DOS的GRLDR前面512字节数据添加到core.img的头部,
再把这个core.img改名为GRLDR,就可以被PBR引导了。(这个地方可能有问题)
需要这个GRLDR文件的可以在这里下载:https://download.csdn.net/download/qq446252221/11214645
经过测试,这个GRUB2就厉害了,可以读取HFS分区。
但有一个问题:在Windows系统下写入到HFS分区的文件,在GRUB2下无法显示出来。
因为这些文件的权限是0,需要进MAC系统修复文件的权限为755。
最后再把过程整理一下:
1.不管你用什么方式先把三个系统分别安装到C/D/E盘。
2.进Windows系统打开BootICE,把硬盘的MBR设置为NT6.0(引导活动分区的PBR)。
3.设置分区四为活动分区。
4.用BootICE把分区四的PBR设置为GRUB4DOS(其实我们的引导文件是GRUB2)。
5.把GRLDR和GRUB.CFG拷贝到分区四的根目录。
6.重启电脑,应该可以看到启动菜单了。完美!
最后,附上一个GRUB.CFG文件仅供参考:
set timeout=5
set default=0
menuentry "Microsoft Windows" {
set root=hd0,1
ntldr /Bootmgr
}
menuentry "Ubuntu Linux" {
set root=hd0,2
linux /boot/vmlinuz
initrd /boot/initrd.gz
}
menuentry "Apple macOSX" {
set root=hd0,3
multiboot /boot
}
menuentry "Windows PE" {
linux16 /memdisk iso
initrd16 /winpe.iso
}