November 22, 2019
English | 日本語
Install Debian on VirtualBox enabling UEFI (日本語)¶
VirtualBox で UEFI を使って Debian Buster をインストールしてみたのですが、ちょっとトラブルに会いました。
私は UEFI について良く知らないので最適な方法では無いかもしれませんが、何とか回避できたので書いてみます。
(もしかすると、Ubuntu でも同じ事が起こるかも)
UEFI って何?¶
UEFI とは BIOS を置き換えるべく生まれた新しい規格です。
BIOS はマザーボードにあるプログラムの規格で、電源が入ると CPU は最初に BIOS プログラムを走らせ、その BIOS が OS を起動する事になっています。
しかし、BIOS 自体が古く最近のハードウェア事情に合わなくなってきており、Intel が 1999 年に EFI (Extensible Firmware Interface) を提案しました。 それに基づいて UEFI (Unified Extensible Firmware Interface) が 2005 年に作られました。
どうやって UEFI を使用するの?¶
新しい VM を作ったら、VM の設定でシステムページのマザーボードタブでUEFI のチェックを入れて下さい。
後は普通に OS をインストールするだけです。(UEFI 用のパーティションを作成する事を忘れずに)
何が問題なの?¶
OS インストール自体は良いんです。 問題は、一回電源を着ると Debian が起動しなくなること。(再起動ならハードウェアが停止しないので大丈夫です。)
私の環境では、 Debian は /EFI/debian ディレクトリを作成し、そこに起動プログラムを入れていました。しかし、 VirtualBox は /EFI/boot/bootx64.efi というパスしか起動プログラムを探さないようなんですよね。
Debian の挙動は、マルチブートの環境を考慮すると自然に思えます。私は VirtualBox が規格違反しているんじゃないかと思うのですが。
VirtualBox も Debian もオープンソースなので、本来ならばパッチを作成するべきなのでしょうが、今回は問題回避だけにしました。
Debian をインストールしてから電源を入れると、下記のような画面になりました。
"Mapping table" が示すように、マザーボードはファイルシステム 1 個 (FS0) と、それ以外に 3 個のパーティション (BLK0, BLK1, BLK3) を検知したようです。
BLK0, 1, 3 については良くわかりませんが、BLK0 は CD/DVD ドライブで BLK3 は Debian の '/' パーティションだと思います。(BLK1 は SATA コントローラーの最後かな???)
いずれにせよ、重要な事はマザーボードがこれらを理解していない事です。 なので、間違いなく FS0 が UEFI パーティションでしょう。
UEFI shell は bash に似ています。 help コマンドを押すとコマンド一覧が表示されます。
Shell> help
まず、/EFI ディレクトリに行きましょう。 下記のように打って下さい。
Shell> fs0:
fs0:\> cd EFI
fs0:\EFI\>
fs0: コマンドは使用するパーティションを指定しています。 FS0: でも fs0: でも良いですが、最後の : を忘れないように。 cd は bash と同じですね。
次に、/EFI/boot ディレクトリを作成して必要なファイルを /EFI/debian から /EFI/boot にコピーします。
fs0:\EFI\> mkdir boot
fs0:\EFI\> cd debian
fs0:\EFI\debian\> cp grubx64.efi ../boot/bootx64.efi
fs0:\EFI\debian\> cp grub.cfg ../boot
fs0:\EFI\debian\>
mkdir boot と cd debian は bash と同じです。 私はファイル名補完を使いたかったので debian ディレクトリに移動しました。 (grub.cfg と同じディレクトリで cp grub. と打ってから [tab] ボタンを押下すると cfg が補完されます。) I went to directory debian to enable filename completion.
cp <src> <dst> も bash と同様ですね。 grubx64.efi が例の Debian の作った起動プログラムです。これは bootx64.efi にリネームする必要があります。 grub.cfg は設定ファイルです。起動プログラムと同じディレクトリに配置する必要が有ります。
これで終わりです。電源を再起動すると Debian が起動するでしょう。 電源の再起動は VirtualBox の電源ボタンで行っても良いですが、 reset コマンドでも同様の事ができます。
fs0:\EFI\debian\> reset
私の場合は、これで Debian を起動させる事に成功しました。