UEFI ShellをBIOSから起動する

EFI System Partition (ESP)の中のconfig.plistやkext類を変更して、macOSが起動しなくなってしまうことがあります。そんな時のためにUEFI shellを使えるようにしておくと復旧作業に役立ちます。CloverやOpenCoreにはUEFI shellを起動する機能がありますが、BIOSメニューから起動する方法をまとめました。

UEFI Shellで復旧する(おさらい)

UEFI shellを使えば、OSが起動する前段階のUEFIが制御している状態で、ファイルシステムの中身を編集できます。なのでOSの起動に失敗している場合に、その状況を治せる可能性があります。ただしUEFIから読み書きできるファイルシステムに限定されるので、APFSやHFS+の中身は見ることも書き換えることもできません。でも、通常FAT32でフォーマットされるESPは編集可能です。ESPの中のconfig.plistやkext類を変更して起動しなくなってしまった場合は、UEFI shellで編集できるので、システムを復旧させることが可能です。UEFI shellについては、過去の記事でも紹介しました。

この記事では、CloverまたはBIOSからUEFI shellを起動して、ESPを復旧する方法を説明しました。OpenCoreでも、EFI/OC/ToolsにOpenShell.efiを入れておき、config.plistでこれを認識するよう設定すれば、OpenCoreの起動メニューからUEFI shellを起動できます。この先は、以前の記事のダイジェストになりますが、基本的には

  1. OpenCoreを入れたESPの場所を探して、
  2. shellコマンドで編集する

という作業を行います。UEFI shellの使い方は、こちらのサイトの説明が簡潔でわかりやすかったです。

UEFIから見えるボリュームは、fs0:, fs1:, fs2: …のように名前がついています。shellコマンドから

ls fs0:

などと入力すれば、この例ではfs0:のルート部分が見えます。この内容を見ながら、OpoenCoreが使っているESPの場所を探して行きます。接続されたボリュームの数が少なければ、fs0:かfs1:くらいでOpenCoreのESP見つかりますが、多い場合は探すのが大変です。そんな時に、mapコマンドが便利です。mapとタイプすると(またはmap -bとすれば画面に合わせて表示が停止します)、例えば以下のような表示がされます。長いので…で省略してます。

> map
Mapping table
FS0: Alias(s):HD0c0a0b:;BLK1:
PciRoot(0x0)/Pci(0x14,0x0)/USB(0x2,0x0)/USB(0x0,0x0)/HD(1,MBR,...
FS1: Alias(s):HD1a65535a1:;BLK3:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x0,0xFFFF,0x0)/HD(1,GPT,...
FS2: Alias(s):HD1a65535a2:;BLK4:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x0,0xFFFF,0x0)/HD(2,GPT,...
FS3: Alias(s):HD1a65535a4:;BLK6:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x0,0xFFFF,0x0)/HD(4,GPT,...
FS4: Alias(s):HD1a65535a5:;BLK7:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x0,0xFFFF,0x0)/HD(5,GPT,...
FS5: Alias(s):HD1b65535a1:;BLK9:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x1,0xFFFF,0x0)/HD(1,GPT,...
FS6: Alias(s):HD1c65535a1:;BLK12:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x2,0xFFFF,0x0)/HD(1,GPT,...
FS7: Alias(s):HD1d65535a1:;BLK15:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x3,0xFFFF,0x0)/HD(1,GPT,...
FS8: Alias(s):HD2b:;BLK20:
PciRoot(0x0)/Pci(0x1B,0x4)/Pci(0x0,0x0)/NVMe(0x1,...)/HD(1,GPT,...
...

これを見れば、探すべきドライブの検討をつけることができます。接続方式がUSB, SATA, NVMeと分類されています。またパーティションマップが、MBRなのかGPTなのかもわかります。このマシンでは、NVMeにOpenCoreのESPを入れているので、fs8:が探しているボリュームだとわかります。その場合、

fs8:

とタイプしてそのボリュームに移動します。Windowsでcドライブやdドライブに移動する方法と同じです。次に、cdコマンドでOCのディレクトリに移動して、

cd EFI\OC

ここでls, cd, cp, mv, cp, rm, edit, type (Unixのcatに相当)コマンドを駆使して、ファイルを操作します。ディレクトリの区切りが、macOSやLinuxと違い、Windows風の逆スラッシュになってます。config.plistのバックアップがあってそれがもしconfig_old.plistという名前なら、

mv config_old.plist config.plist

コマンドで元に戻せます。config.plistを変更する場合には、このように確実に動くバージョンを残しておくと、簡単に元に戻せるので楽です。config.plsitを編集したい場合は、

edit config.plist

でエディタを起動します。このエディタでは、コントロールEでヘルプが表示されます。操作は簡単で、

  • Ctrl-G 行に移動。行番号の入力を促される
  • Ctrl-S ファイルを保存する
  • Ctrl-Q 終了する
  • Ctrl-F 検索する
  • Ctrl-R 検索・置換する
  • Ctrl-K 行をカットする
  • Ctrl-U 行をペーストする
  • Ctrl-O ファイルを開く
  • Ctrl-T ASCIIとUNICODEの切り替え
  • Ctrl-E ヘルプを開く
  • Ctrl-W ヘルプを閉じる

です。これで大体の編集は可能なので、config.plistを元に戻すことができます。config.plistを保存し、エディタを終了した後で、

exit

もしくは

reset

コマンドをタイプしてシェルを抜けます。resetコマンドはシステムがリセットされます。exitコマンドでは、OpenCore選択画面に戻ります。大体はexitコマンドでokですが、変更内容によっては変更が反映されないことがあります。resetの方がより確実です。

USBメモリーから起動する

UEFI shellはCloverやOpenCoreの選択画面から起動するだけなく、UEFI環境でshellを直接起動することもできます。UEFI shellはHackintoshのためのツールではありませんので、こちらが本来の使い方です。

通常のUEFIマザーボードの起動ステップでは、FAT32でフォーマットされたドライブの中にある、EFI/Boot/bootx64.efiというファイルを実行しているようです。実際に、OpenCoreのESPにもEFI/BOOT/BOOTx64.efiというファイルがあります。WindowsをインストールしたドライブのESPにも、EFI/Boot/bootx64.efiというファイルがありました。ディレクト名やファイル名の大文字小文字はどちらでも良いようです。UEFI shellのプログラムにbootx64.efiという名前をつけて、このディレクトリにおけば良いようです。

そこで、まずはUSBメモリをFAT32でフォーマットします。パーティションマップはMBRでもGPTでも良いようですが、今回は単純にMBRで試しました。次にこのUSBメモリに、EFI/Boot/というディレクトリを作ります。この中に、OpenCoreで配布されている一式に含まれるOpenShell.efiをコピーして、これをbootx64.efiという名前に改名します。OpenShell.efiは、OpenCoreの起動メニューから動かすために、通常はEFI/OC/Tolls/の中に入れているファイルです。その結果、USBメモリには、

EFI/Boot/bootx64.efi

のような位置と名前で、OpenShell.efiが入ります。このUSBメモリを挿したままコンピュータを起動し、BIOSメニューに入ると、Boot選択の画面に、以下のようにUSBメモリが現れるはずです。

ここでは、

UEFI: JetFlashTrabscend 4GB 8.07, Partition 1 (4.0GB)

という名前で見えています。 小さなサイズのUSB 2.0のUSBメモリを使いました。このボリュームを選択して起動すれば、UEFI shellが起動します。使い道のない古いUSBメモリですが、UEFI shellを入れておけばいざというときに役立ちます。

BIOSメニューから起動する

マザーボードのBIOSメニューに、UEFI shellを起動する機能が提供されていることがあります。マザーボードメーカによって、事情が異なるようです。最近の状況を調べてみました。

MSIマザーボードの場合

以前の記事ではMSIのマザーボードの例を書いていました。MSIのマザーボードでは、独自にUEFI shellのソフトウェアを用意しているようで、BIOSメニューから選択するとそのshellが起動しました。なので、CloverやOpenCoreで用意したshellとは違うバージョンのshellが起動しました。現行のMSIマザーボードが手元に無いので確認できませんが、MSIのZ590マザーボードのマニュアルを見る限りでは、Settings/Save & Exit/Boot Overrideのメニューに、UEFI: Built-in EFI Shellという選択肢が健在のようですので、

引き続き内蔵のshellが起動できるようです。

ASUSマザーボードの場合

Z390 ROG MAXIMUS XI HEROでは、Exitメニューの中に、Launch EFI Shell from USB drivesという項目があります。USBメモリーのルートにUEFI shellのプログラムを、Shell.efiという名前で入れておけば、ここから起動できます。これ以外の名前ではダメなようです。

ただし、BIOS設定でCMSをenabledにしてレガシー起動を可能にしておく必要があります。

Shell.efiを置く場所は、UEFIが見ることのできるボリュームのルートならどこでも良いようです。USBメモリがFAT32でフォーマットされているなら、そのルートで良いです。でもHFS+やAPFSはUEFIから見えないのでダメです。ESP (EFIシステムパーティション)でもokです。また、BIOSメニューにはUSBメモリから起動とありますが、それ以外のドライブでも起動できます。なので、OpenCoreを起動しているESPのルートに、OpenCoreのToolsフォルダからUEFI shellを次のようにコピーしておくと良いと思います。もちろんファインダーのドラッグ&ドロップでもokです。

 % cp /Volumes/EFI/EFI/OC/Tools/OpenShell.efi /Volumes/EFI/Shell.efi

この作業をしておけば、ESPの内容をうっかり間違って設定してしまっても、UEFI shellを起動できます。

GIGABYTEマザーボードの場合

実を言うと最近はGIGABYTEマザーボードを使っていないので、良くわかりません。マザーボードメーカを、GIGABYTE –> MSI –> ASUS –> ASRockと遍歴してきたので、最近の事情に疎くて、UEFI shellがBIOSから起動できるかどうかわかりません。マニュアルを取り寄せて見た限りでは、BIOSメニューからUEFI shellを起動する機能に関しての記載が無いようです。もしかしたら起動できないのかもしれません。ご存知の方いらしたら情報よろしくです。

ASRockマザーボードの場合

ASRockの場合は、Exitメニューの中に、Launch EFI Shell from filesystem deviceという項目があります。これを選択すると、M.2, SATA, USBなどに接続されていてUEFIでアクセスできるファイルシステムのルートに置かれたshellプログラムを起動してくれます。ASUSの機能と全く同じです。なのでASRockでも、OpenCoreでは通常EFI/OC/Toolsに置かれるOpenShell.efiを、EFI直下にコピーして入れて置くと、このメニューからそれが起動します。

ASRockの場合は、シェルプログラムのファイル名はなんでも良いようで、例えばOpenShell.efiのままでも起動しました。OpenCore用に入れているOpenShall.efiを以下のコマンドのようにしてコピーしておくだけです。もちろんファインダーのドラッグ&ドロップでもokです。

 % cp /Volumes/EFI/EFI/OC/Tools/OpenShell.efi /Volumes/EFI/.

とはいえ、ASUSに合わせてShell.efiにしておいた方が混乱しなくて良いかもです。

各社UEFI shell機能のまとめ

各社のBIOS画面からのUEFI shell起動機能をまとめると

  • MSI: マザーボードに内蔵されているshellプログラムを起動する。
  • ASUS: EFIがマウントできるボリュームのルートに置いたshellプログラムを起動。プログラム名はShell.efiであること。
  • GIGABYTE: 不明。起動できないかもしれない。
  • ASRock: ASUSと同じく、EFIがマウントできるボリュームのルートに置いたshellプログラムを起動。プログラム名は任意のようで、OpenShell.efiなどでも起動。

となりました。MSI > ASRock = ASUS > GIGABYTEの順番に、利便性が良いと思います。ASUSとASRockの場合は、起動ボリュームのEFIにShell.efiとして入れておくと、いざという時に役立ちます。MSIは、shellプログラムがマザーボードに内蔵されているのでもっと安心です。

まとめ

Hackintoshの設定を変更して起動しなくなる経験は誰にでもあると思います。そんな時に便利なUEFI shell機能は、

  • OpenCoreやCloverの起動メニューから立ち上げる
  • 起動ボリューム(USBメモリでも可)から立ち上げる
  • BIOSメニューから立ち上げる

などの方法で起動可能です。UEFI shell起動の方法と使い方を知っておくと、いざという時に対処できるかと思います。

3件のコメント

  1. Boot macOS 運営管理者様
    お世話になっております。Eleven Tenthsの板野です。
    先日ご連絡させていただいた電子部品のオンライン販売会社とのコラボレーションのご相談につきまして、ご検討状況はいかがでしょうか。
    具体的な内容につきましてはご意向を伺いながら、ご相談させていただけますと幸いです。是非ご意向をお聞かせいただけましたら幸いです。
    もし、ご検討にあたり不明点がございましたら、いつでもご連絡いただければと存じます。
    ご協力いただけると大変光栄でございます。
    ご連絡をお待ちしております。
    Eleven Tenths 板野
    seina@eleven-tenths.com

  2. ども、お館さま。。。お疲れさまです。。。

    >手元の環境では、Secure Bootをdisabledにせよと言われて起動しません。
    Secure Boot Keyとやらの削除の儀の話が見当たらないのでありますけど、鍵が登録されちゃっててこれがあるので嫌がっている気がしなくもないですね?。。。
    削除したらUEFI Shellが起動できちゃったりするんですかね?

    「セキュアブートキーの削除」
    http://jisaku-pc.net/hddnavi/uefi_bios_01.html

    1. アドバイスありがとうございます。確認したらCMSの設定を勘違いしていたようです。本文を訂正します。

返信を残す

メールアドレスが公開されることはありません。