我有一台装有黑苹果的电脑,MacOS和Win10分别装在两个不同的固态硬盘中,Opencore引导安装在有MacOS系统的固态硬盘的EFI分区下,所以想进MacOS系统时必须得把其所在的硬盘提到第一顺序上来,然后进Win10就得提它所在的盘到第一顺序上来,这样感觉特别麻烦,就想,能不能用Opencore来引导这两家的系统?
答案是肯定的,但是一开始我是不成功的。
首先,我这种双硬盘,分开安装两个系统的方案是最安全,设置也最简便的,opencore官网教程如是说。
一开始,我信心满满,因为当我把两个硬盘都挂上的时候,我看到Opencore 开机的第一选项默认就是Windows,开心的选择它开机,也确实出现了Windows开机画面,然后就是蓝屏,与时俱进的蓝屏——带二维码的蓝屏!吓得我赶紧网上查什么原因,有说尝试打开 Booter-Quirks-SyncRuntimePermissions 的,有说在Misc-HideSelf去掉勾选,然后在Misc-BlessOverride添加\EFI\Microsoft\Boot\bootmgfw.efi子选项的,有说打打ACPI补丁的,我的ACPI是我根据官网教程自己用软件制作的,应该没问题,就试了一下调参数,还是不行。
网上有些人说,像我这样的双系统他们什么都不用做,就能很好的引导win10,为什么到了我这里就不行了?问题出在哪里?这点困扰了我很长一段时间,前两天换了一个平台才搞明白,原来是EFI引导搞的鬼。之前,我用的平台是老旧平台,也就是传统的BIOS legacy引导,黑苹果也是在Opencore里模拟的EFI环境来启动的,而到了引导win10就不行了,明明win10的所在的硬盘由MBR转成了GPT,也创建了EFI引导所要求的ESP分区,也通过微盘PE之类的PE系统修复了UEFI引导,可就是一引导就蓝屏!搞得我不得已,又转回MBR分区表,然后通过PE系统修复MBR引导,用着传统的引导模式使用着win10,总有点不舒服的感觉,就是一朵鲜花插在牛粪上的感觉!
前两天,我灵机一动,会不会是因为我那套平台太老旧了,不是真正的带UEFI引导的主板造成的,想到这点,立马换了一套平台,酷睿四代的平台,主板也是配套的带UEFI引导的,首先,又是一顿反转操作,用PE系统的diskgenius把分区表由MBR转换成GPT的,然后用PE系统自带的修复引导软件,选择修复UEFI引导,把EFI引导修复了,再次开机,这回选择第一选项Windows,成功引导进入系统,证明Opencore确实是能做到MacOS及Windows双引导。
那为什么我之前的老旧平台不行呢?问题就是出在EFI引导上。老旧平台不带EFI引导功能,所以,虽然硬盘分区是按照EFI引导的要求建立了一个ESP分区,然后也修复了UEFI引导,这里所谓的修复UEFI引导,其实就跟opencore引导是一样的,只不过是把EFI引导所需的文件拷贝到ESP分区而已,所以有了这些引导文件后的ESP分区并不就意味着有了EFI环境了,还得模拟一把,而之前我犯了一个常识性的错误,在MacOS系统所在的硬盘的EFI分区是安装了模拟EFI环境的DuetPkg的,而我就据此认为,Windows系统所在的盘也有了EFI环境了,因为我是用的opencore在引导嘛,而opencore所在的盘是有模拟了EFI环境了,所以它应该也能传导到win10所在的盘,但事实情况不是如此,它们两个是独立的!我需要在的win10所在的硬盘的ESP分区上安装模拟EFI环境的DuetPkg。我之前的文章上有写怎么安装这个模拟环境,使用Bootice这个小工具可以做到。
我很多年之前就养成了系统出故障不重装的习惯,不管是蓝屏还是引导损坏,或是驱动故障还是病毒所致(很少碰到),基本都能搞定,算下来,Windows系统已经稳定的运行十多年了,从来没有重装过,从windows XP升级到windows 7, 整个win7的生命周期安然渡过,直到某天被自动升级到win10,到了win11,实在是老旧平台(第一代酷睿平台)不支持了,才换了一个四代的平台,但系统依然是之前从win7升上来的win10系统。
UEFI引导的主板出来后相当长一段时间,我用的依然是老旧平台,所以对于UEFI引导以及BIOS legacy引导处于一知半解的状态,因为没有用过UEFI平台的主板,我认为我对EFI引导没怎么搞清楚,也确实是这样。帮同事从旧平台切换到UEFI平台的时候,吓过几次,直接把带系统的硬盘挂到新平台上,进不了系统,由于是生产环境使用的硬盘,加上多年养成的习惯,肝了一两次到深夜才解决,bcdedit修复启动项也摸过好几回,修复引导也试过好多回,还是不太懂其中的原理,后来玩opencore,才慢慢有些理解EFI引导这玩意。
之前就说过,作为大一统的windows,其兼容性之强是其他系统所无法比拟的,在windows7出来后,就要考虑到市面上既有老旧平台,又有UEFI的平台,并且新出来的UEFl引导的主板也向下兼容,可以设定为使用传统引导模式,也就是主板的CSM兼容模式选项,那么它安装时就得有一个判断机制来辨别这种差别,以便安装不同的引导,通过以管理员身份运行命令提示符工具输入:bcdedit /enum命令,接下来的输出如果看到Winload.efi,则说明这是通过EFI引导的。
如果看到是winload.exe,则表明是MBR分区表的传统BIOS引导,也叫 legacy 引导
一个传统的MBR分区表的硬盘如下:
当然,你看到的这张图,是我从GPT分区表强行转成MBR后的样子,所有在系统盘分区前面还有一个小分区,就是所谓的ESP分区,不过在转为MBR分区表后,它就是一个普通FAT32分区了。
带EFI分区的GPT分区表的样子:
比前图比起来,就是在分区图前面的描述有点不同,一个是基本MBR, 一个是基本GPT,但是对于ESP分区所占的盘符的称呼不同了,MBR分区下,就叫“本地磁盘”,在GPT分区表下叫"ESP",前者是一个普通的,可用来存放文件的磁盘分区,后者,是一个特定作用的磁盘分区,一般用来存放EFI引导用的文件。
可以看到我的这个硬盘的ESP分区,也就是EFl引导用来存放文件所在的分区,大小为600MB,分区格式为FAT32, 如果使用系统安装盘安装系统时,默认的分区大小是200MB,该分区为隐藏分区,且不可读写,用diskgenius给该分区指定盘符后,在PE系统里可以挂载到根目录下,变成一个普通的可读写的分区,在Windows系统下面,里面的文件是这样的:
有很多从WinXP升级到Win7的用户,尽管其用着新平台,但其引导模式依然是MBR+传统Bios引导,另一些用户由于分区是MBR分区,主板的CSM兼容模式默认打开,然后安装的时候自然也就是传统引导模式了,又加上早些年固态硬盘贵,自然就看那用不上的200MB分区碍眼,总想把它删了然后利用上,对于非UEFl引导来说,这没毛病。
实际上,当我把GPT分区转为MBR后,那600MB的ESP分区真的好想删了它!但是我不能够这样做!
UEFl引导的引导文件在ESP分区下,传统引导的引导文件在C盘的Windows文件夹下,那传统引导的Windows系统的EFl引导文件在哪里?我们知道传统引导的系统用不上这些文件,但用不上是一回事,有没有又是另一回事,出于兼容性考虑,Windows系统是两种引导的引导文件都有的,不管有没有UEFl引导专用的ESP分区,这些用于UEFl引导的文件位于C:\Windows\Boot\EFI文件夹之下,没有PE系统的时候,可以把硬盘挂在另一台电脑上,然后直接把这些文件拷贝过去,应该跟修复引导的做法是一样的功效。
好了,前面说了这么多,就是想搞明白,传统的BIOS引导的主板能不能够使用Opencore的多引导功能,答案是肯定的,另外,我试过了,在config.plist文件里Misc-BlessOverride加不加\EFI\Microsoft\Boot\bootmgfw.efi子选项,都没有影响,只要如下操作就能行:
1、用PE盘的diskgenius工具把硬盘的分区表用由MBR转为GPT
2、如果没有EFI分区,要调整系统盘C盘的空间以方便新建一个ESP分区
3、用PE盘的修复引导工具修复一下UEFI引导
4、用PE盘的bootice扇区编辑工具修复一下主引导记录,以及分区表引导记录
修复主引导记录时选中要修复引导的磁盘,对应的文件为boot0;
修复分区表引导记录时选中要选择EFI引导的ESP分区,对应的文件为boot1f32
把bootX64文件拷贝到EFI分区根目录下并更名为:boot
以上三个文件在openocore的Utilities\LegacyBoot文件夹里面,做完这些后,你的传统BIOS主板就摇身一变成带UEFI引导环境的主板了,这是一种软实力提升,然后就可以愉快地使用opencore引导来玩耍MacOS和Windows10双系统了。
题外话:如果你的黑苹果系统是安装在移动硬盘里的,把win10系统的EFI引导分区里的Micosoft文件夹拷贝到黑苹果的EFI分区下面的EFI文件夹里面的话,开机进入Opencore引导画面,将会看到有两个windows引导选项,其中一个被标上了(external),也就是从外部设备启动windows的意思,我试过了,都是可以的,相当于有了一备份的引导。