I may have found something interesting. I really didn't expect this particular item to be "it", but so far, it's given me a 100% success rate regardless of the hardware configuration (disks/USB/etc.). I won't even consider calling it a solution until a lot of other people have tried it out, so please - give it a shot and let me know if it did anything for you.
In the OC config.plist, in the
<Kernel> <Patch>
section, add this to the array:
Code:
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>Patch gNVRAMSystemList (21may21)</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
cHJldmVudC1yZXN0b3Jlcw==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.4.9</string>
<key>MinKernel</key>
<string>20.0.0</string>
<key>Replace</key>
<data>
b3NlbnZpcm9ubWVudAAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
This has only been tested on Big Sur 11.3. If you have a beta of 11.4/11.5, you'll probably need to change
MaxKernel
to allow the patch to apply to your kernel. This patch
should be harmless, and effectively invisible, on any version of MacOS; however, I make no guarantees if you try applying it to anything other than Big Sur 11.3.
(By way of quick explanation: gNVRAMSystemList is a whitelist of NVRAM variables that was introduced in Big Sur as part of Apple's ongoing code cleanup efforts. It initially contained a long list of variables that date back to the Jurassic era. Between 11.2 and 11.3, they removed most of the entries from that list - all of the ancient variables that are no longer used and needn't be bothered with. However, they also removed one that's still current - "osenvironment". On most systems, that variable probably doesn't exist; however, its absence from the whitelist changes the startup timing. As I said above, I didn't (and still kinda don't) expect this to be
the solution, but it does appear to at least be a factor. So, what does this patch do? In the remaining whitelist, there's a variable called "prevent-restores" that appears to be ignored by the code and is left in place for some internal reason that shouldn't affect end-users. This patch replaces "prevent-restores" with "osenvironment" in the whitelist, so that the startup timing moves in the direction of what it was in 11.2. All the patch does is change some text, no code is altered.)
Once again - I'm not yet suggesting this is the answer to our problems, but on my system, it works far better than it has a right to, so please try it and give me some feedback here.
NOTE: I'm not sure why, but OC was finicky about the format of this patch. If all of the elements between (and including)
<dict>
and
</dict>
weren't tabbed (i.e. no spaces to the left of each element, only tabs), it failed to apply the patch. This failure appears in the first blob of text that appears after selecting BS 11.3 (assuming you have verbose/debug boot-args enabled); you'll see a line containing
OC: Prelinked patcher result:
and
(Patch gNVRAMSystemList (21may21)) - Not Found
. If you see that, the patch didn't take, and you'll need to examine your config.plist to see what's what.
Good luck, and please post any results (good, bad, or ugly) in this thread!