VirtualBox VMの起動時にUEFIインタラクティブシェルでスタックしてしまうと、本当に困った状況になることがあります。通常、これはEFIファームウェアが適切なブートローダーを見つけられないことを意味し、OSを起動する代わりに、そのシェルにドロップされます。OSのインストールが不完全だったり、VMの設定をいじったりした場合、あるいは単にEFIブートローダーが破損していたり、見つからない場合などによく発生します。幸いなことに、この問題を解決する方法はいくつかあります。簡単なものもあれば、少し手間はかかりますが効果的なものもあります。基本的には、VMにOSローダーの場所を指示するか、VirtualBoxの環境でより適切に動作するブート方法に切り替えることが目標です。このガイドでは、VMを再び正常に起動させるためのいくつかのオプションについて説明します。
VirtualBox が UEFI インタラクティブ シェルでしか起動しない問題を修正する方法
VirtualBox設定でEFIを無効にする
これはかなり簡単で、EFIを完全に捨て去りたい場合に適しています。ここでの考え方は、多くの場合、より寛容で互換性のあるレガシーBIOSモードに戻すことです。EFIを有効にすると、VMは特定のEFIブートファイルを探しますが、特にOSのインストールに失敗した後には、これらのファイルが失われたり破損したりすることがあります。EFIを無効にすると、VirtualBoxはデフォルトのBIOSモードを使用し、ディスクのMBRから直接ブート命令を読み取ります。通常、これによりブートプロセスは問題なく修正されます。特にEFIを必要としないWindowsやLinuxのインストールでは顕著です。
- VM が一時停止または保存された状態ではなく、完全に電源がオフになっていることを確認します。
- VirtualBox を開き、VM を右クリックして、[設定]を選択します。
- システム > マザーボードに移動します。
- 「EFI を有効にする」の横にあるボックスのチェックを外します。
- [OK]をクリックして、VM を再起動します。
システムがUEFIシェルをバイパスし、OSに直接起動することを期待してください。セットアップによっては、この修正は即座に完了します。他のセットアップでは、1~2回の再起動が必要になる場合がありますが、EFIがセットアップの必須要件でない場合は、通常、これがOSに復帰する最も速い方法です。
EFIシェルから手動で起動する
EFIブートプロセスを無効にするのではなく、修正したい場合は、EFIシェルからOSを手動で選択してみてください。少し奇妙ですが、シェルプロンプト(通常はShell>)に入ったら、OSファイルを探してみてください。この方法は、ブートローダーがまだ正常に動作しているものの、自動的に登録または選択されていない場合に便利です。
- VM を起動し、EFI シェル プロンプトが表示されるまで待ちます。
- 「map」と入力して Enter キーを押すと、すべてのディスクとパーティションが表示されます。
- FS0:、FS1: などのラベルが付いたドライブを探します。これらは EFI パーティションとシステム ディスクです。
- コロンを付けてドライブ名 (例:
FS0:) を入力し、Enter キーを押します。 - dirと入力してファイルを一覧表示します。EFI フォルダを探します。
- で EFI にディレクトリを変更し
cd EFI、Enter キーを押します。 cd Microsoft\Boot次に、 Windows やcd ubuntuLinux など、OS に対応するフォルダーに移動します。- 最後に、ブートローダー ファイルを実行します (Windows の場合は通常、次のようになります)
bootmgfw.efi。
必要に応じてフルパスを入力してください(例:\EFI\Microsoft\Boot\bootmgfw.efi)。読み込めばOSは正常に起動するはずですが、これは一時的な解決策です。より永続的な解決策としては、起動スクリプトにコマンドを追加するか、ブートローダーをフォールバックパスにコピーすることを検討してください(下記参照)。
組み込みのブートマネージャーを使用する
これはちょっとした近道です。スクリプトを書いたりファイルをコピーしたりする代わりに、UEFIブートマネージャーのインターフェースを開いて適切なブートデバイスを選択できます。EFIシェルプロンプトが表示されたら、「exit」と入力してEnterキーを押します。通常、ブートディスクまたはOSを選択できるメニューが表示されます。これは、あまり手間をかけずにトラブルシューティングを行う便利な方法です。
ブートローダーをUEFIフォールバックパスにコピーして名前を変更する
ちょっとずるいですが、OSローダーをコピーすることで\EFI\Boot\bootx64.efi、UEFIファームウェアがフォールバックパスを信頼してOSを自動的に起動できるようになります。当然ながら、Windowsは必要以上に困難にする必要があるからです。特にEFIブートエントリが壊れている場合は、これが最も確実な修正方法です。
- まず、OS インストール ISO から起動します。VirtualBox で、ISO をストレージの光学ドライブとして追加し、VM を起動します。
- Windows の場合は、起動後に押してShift + F10コマンド プロンプトを開きます。
diskpartEFI パーティションを見つけるために使用します。list vol「EFI」または「System」というラベルの付いた小さな FAT32 パーティションを入力して見つけます。- で diskpart を終了します
exit。 - 必要に応じてドライブ文字を割り当て、EFI フォルダーに移動します。
- Windows の場合、次のようにブートローダーをコピーします。
copy S:\EFI\Microsoft\Boot\bootmgfw.efi S:\EFI\Boot\bootx64.efi
Ubuntu などの Linux ゲストの場合:
- Linux Live USB から起動し、EFI パーティションをマウントします。
sudo fdisk -lEFI パーティション (おそらく /dev/sda1) を見つけます。- 次のようにマウントします
sudo mount /dev/sda1 /mnt。 - ブートローダーをコピーします:
sudo cp /mnt/EFI/ubuntu/grubx64.efi /mnt/EFI/Boot/bootx64.efi。
完了したら、VMを通常通り再起動してください。フォールバックブートパスのおかげで、OSがすぐに起動するはずです。もう一つ注意点があります。セキュアブートが干渉する可能性があるため、セキュアブートが有効になっている場合は、無効にするか、shimx64.efiに置き換える必要があるかもしれません。
この修正を永続的にするにはどうすればいいですか?
最善の方法は、OSのEFIブートローダーをフォールバック先に直接コピーすることです\EFI\Boot\bootx64.efi。こうすることで、EFIに適切なブートエントリがない場合でも、デフォルトでこのファイルが読み込まれます。Windowsの場合は、上記のようにbootmgfw.efiファイルをコピーするだけです。Linuxの場合も同様です。grubx64.efi(セキュアブートが有効になっている場合はshim)をコピーします。これは通常、再起動後やVMのスナップショット後も有効です。ただし、ブートローダーが更新されたり、ディスクが変更されたりした場合は、この手順を再度実行する必要がある可能性があることに注意してください。
それでも問題が解決しない場合は、EFIを完全に無効にするだけで(上記の方法を参照)、シェルから抜け出し、通常のブートループに戻れる場合があります。ただし、一部のOSやセットアップではEFIが必須となる場合があることに注意してください。その場合は、ブートローダーまたはEFIエントリを修正するのが最善策です。
以上です。VirtualBox の EFI の問題を修正するのは面倒な作業ですが、大部分はブートパスの再設定やブートモードの切り替えです。しばらく EFI をいじっていたので、設定を反転したりファイルをコピーしたりするだけでこんなにも状況が変わるなんて、ちょっと不思議に思います。