为什么 Bless 不会让 rEFInd 默认启动?

为什么 Bless 不会让 rEFInd 默认启动?

我在 OS X 中。在refind-install脚本中,有一个正在运行的 bless 命令,但似乎不起作用:

   elif [[ "$TargetDir" != "/EFI/BOOT" ]] ; then
      bless --setBoot --folder "$InstallDir/$TargetDir" --file "$InstallDir/$TargetDir/$Refind"
      echo BLESS COMMAND: bless --setBoot --folder "$InstallDir/$TargetDir" --file "$InstallDir/$TargetDir/$Refind"
   fi

我添加了额外的echo行来查看命令的样子,这是输出:

BLESS COMMAND: bless --setBoot --folder /Volumes/efi///EFI/refind --file /Volumes/efi///EFI/refind/refind_x64.efi

我正在像这样运行安装脚本:

sudo ./refind-install --root /Volumes/efi

其中 /Volume/efi 包含 disk0s6 上自定义 EFI 系统分区的根目录,而不是我的 MacBook 的默认 disk0s1 ESP。

知道为什么它不起作用以及如何让 rEFInd 默认启动吗?

编辑:

好吧,我想我可能知道哪里出了问题。因此,我能够通过将选项替换--rootrefind-install选项来使其正常工作--usedefault,如下所示:

sudo ./refind-install --usedefault /dev/disk0s6

现在,接下来发生的事情是脚本忽略/dev/disk0s6并继续将 rEFInd 安装到/dev/disk0s1主 OS X ESP(这不是我想要的,但它可以工作)。

然后脚本继续运行其他祝福命令:

   if [[ $InstallToEspOnMac == "1" ]] ; then
      bless --mount "$InstallDir" --setBoot --file "$InstallDir/$TargetDir/$Refind" --shortform
   elif [[ "$TargetDir" != "/EFI/BOOT" ]] ; then

重启后,一切正常,rEFInd 默认启动。我猜想这是因为 rEFInd 默认安装/EFI/BOOT/bootx64.efi在 OS X ESP 分区内。

但这不是我想要的。我想将 refind 安装在 上/dev/disk0s6/EFI/refind/而不是 上/EFI/BOOT

编辑:

另请注意,使用该--usedefault选项时,安装脚本会安装refind_aa64.efi/EFI/BOOTOS X ESP(disk0s1)中,但使用--root安装到 disk0s6 的选项时,脚本会安装refind_x86.efi

另外,我不确定是不是因为--mount一个 bless 命令中有选项,而另一个命令中没有,所以造成了差异。

编辑:

我能够将 /EFI/BOOT 从 disk0s1 复制到 disk0s6,然后运行--mount与脚本中相同的 bless 命令,这样就成功了。

编辑:

好吧,我们越来越接近了。我修改了剧本,并改变了

   elif [[ "$TargetDir" != "/EFI/BOOT" ]] ; then
      bless --setBoot --folder "$InstallDir/$TargetDir" --file "$InstallDir/$TargetDir/$Refind"
   fi

   elif [[ "$TargetDir" != "/EFI/BOOT" ]] ; then
      bless --mount "$InstallDir" --setBoot --file "$InstallDir/$TargetDir/$Refind"
   fi

现在一切按我的要求运行:refind 安装到使用选项/EFI/refind指定挂载点的分区上--root。虽然这给了我想要的结果,但现在有一个小问题:启动时需要大约 30 秒或更长时间才能最终到达 rEFInd,出于某种原因,这真的很慢。我要重置 NVRAM 并重试...

编辑

啊哈!在重置 NVRAM 之前,我尝试--shortform向 bless 命令添加选项,这解决了上次编辑中的滞后问题!

为什么第二个 bless 命令处于 --folder 模式?似乎在 --mount 模式下工作得更好。

因此,目前的解决方案是修改脚本中的第二个 bless 命令,使其与第一个完全相同,以便脚本的该部分如下所示:

   if [[ $InstallToEspOnMac == "1" ]] ; then
      bless --mount "$InstallDir" --setBoot --file "$InstallDir/$TargetDir/$Refind" --shortform
   elif [[ "$TargetDir" != "/EFI/BOOT" ]] ; then
      bless --mount "$InstallDir" --setBoot --file "$InstallDir/$TargetDir/$Refind" --shortform
   fi

我使用了--root选项来refind-install指定目标分区的挂载点。

mkdir /Volumes/efi
sudo mount -t msdos /dev/disk0s6 /Volumes/efi
sudo ./refind-install --root /Volumes/efi

答案1

首先,该--root选项不用于指定 ESP;它用于指定正常安装的根 ( /) 目录。它旨在用于从 Linux 紧急系统安装 rEFInd,尽管它可以可以在 OS X 系统上使用(但在那里可能不太有用,除非或许结合使用--notesp-- 但我还没有测试过)。因此,您在尝试使用该选项时基本上是“找错了方向”。

refind-install脚本实际上没有任何明确的选项来将 rEFInd 安装到辅助 ESP。在 Linux 中,您可以通过在/boot或上安装所需的 ESP 来控制 ESP /boot/efi;但在 OS X 中,ESP 通常不会安装,因此脚本会尝试找到 ESP,如果您有多个 ESP,则不能保证使用您想要的那个。在这种情况下,您几乎必须回到手动安装,如下所述:

http://www.rodsbooks.com/refind/installing.html#osx

或者,您可以使用--ownhfs将 rEFInd 安装到专用的 HFS+ 卷。请注意,拥有两个 ESP 可能没什么用。我知道你说你想要两个 ESP,但你没有说为什么你想要,在没有理由的情况下,我的建议是你忘掉它,因为可能没有任何好处。ESP 是意味着跨操作系统共享。存在一个操作系统弄乱 ESP 上另一个操作系统的文件的风险,但保留备份应该可以让您从此类问题中恢复。

据我所知,--folder选项bless在安装到 HFS+ 卷时有效,但在安装到 FAT 卷时无效。不过,此命令的一些细节似乎没有很好的文档记录——或者至少,我没有找到好的文档记录。如果我没记错的话,当我写的时候refind-install,我从不同的网站获取了示例并进行了实验,直到我得到了一些可行的东西,然后根据其他用户的反馈随着时间的推移对其进行了调整。

答案2

我可能错了,但如果您希望在启动后显示 refind,我相信您必须选择您的 ESP 分区进行 refind。

您是否尝试从 Linux 还是 Mac OS X 安装?

相关内容