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 のチェックを入れて下さい。

https://dq1xd0takmkns.cloudfront.net/img/fdffc2cbca785f3ee0330cc4b6c838bc.png

後は普通に OS をインストールするだけです。(UEFI 用のパーティションを作成する事を忘れずに)

何が問題なの?

OS インストール自体は良いんです。 問題は、一回電源を着ると Debian が起動しなくなること。(再起動ならハードウェアが停止しないので大丈夫です。)

私の環境では、 Debian は /EFI/debian ディレクトリを作成し、そこに起動プログラムを入れていました。しかし、 VirtualBox は /EFI/boot/bootx64.efi というパスしか起動プログラムを探さないようなんですよね。

Debian の挙動は、マルチブートの環境を考慮すると自然に思えます。私は VirtualBox が規格違反しているんじゃないかと思うのですが。

VirtualBox も Debian もオープンソースなので、本来ならばパッチを作成するべきなのでしょうが、今回は問題回避だけにしました。

Debian をインストールしてから電源を入れると、下記のような画面になりました。

https://dq1xd0takmkns.cloudfront.net/img/5bbb2f6fbc6a9d9d590b62c06c370aee.png

"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 bootcd 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 を起動させる事に成功しました。