さて、うまいくかない、と思っていた VirtualBox 上の EFI 有効な仮想マシンでの jessie の起動の件ですが、
#結局、 jessie が、 VirtualBox の EFI 有効な仮想マシンで正しく起動しない件は、解消できずにいたり。
[From jessie と EFI/UEFI と VirtualBox と… - Soukaku's HENA-CHOKO Blog]
うまくいく方法が見つかったというか、どうも調べ足りなかったらしく、既に方法があったので、落ち穂拾い的エントリーを書いておく。
そもそも、VirtualBox の場合、 EFI を有効化した仮想マシンの NVRAM にインストールした OS (この場合は、Debian )が用意する EFI 用のブートローダの在り処が記録されないという不具合?があるようで、 NVRAM にブートローダ情報がない場合に強制的に読みに行く場所に指定した名前でブートローダを置けば解消する、と。
1. NVRAMが読み込めない、又は読み込めてもNVRAMにOSの登録がない場合は、ESPの EFI/boot/bootx64.efi ファイルを読みに行く。
ubuntuのインストールでは作成されないディレクトリであり、当然ながら bootx64.efi ファイルも無い。
[From Ubuntu日本語フォーラム / ubuntuでのUEFIについて]
#目を通した記憶はあるんですよね、この情報…。う〜ん…。
新規インストール時に対応するには
さて、Debianをふつーに Graphical Install でインストールした場合、インストールプロセス完了後に即再起動となりますが、このタイミングでは 仮想マシンの NVRAM にブートルーダの情報が残っているので、問題なく起動してきます。
起動してきたら、次のような操作を、 root 権限で行います。
root@jessie:~# cd /boot/efi/EFI
root@jessie:/boot/efi/EFI# ls -l
合計 4
drwx------ 2 root root 4096 12月 30 12:02 debian
root@jessie:/boot/efi/EFI# mkdir boot
root@jessie:/boot/efi/EFI# cp -p debian/grubx64.efi boot/bootx64.efi
root@jessie:/boot/efi/EFI# ls -l boot/* debian/*
-rwx------ 1 root root 119808 12月 31 05:12 boot/bootx64.efi
-rwx------ 1 root root 119808 12月 31 05:12 debian/grubx64.efi
コピーが終わったら、仮想マシンを電源OFFした後、再度仮想マシンの電源を ON にして、問題なく Debian が起動することを確認しましょう。
なお、expert モードでインストールした時は、インストールプロセスが全て終了した後、Shell を起動、そこで /target 以下にマウントされているハードディスク内のファイル操作して、ブートローダのコピーをすることも出来ます。
インストール直後の再起動時の設定し忘れた時は…

ブートローダの設定を忘れたとか、実はブートローダのコピーしたけど typo したまま仮想マシンを OFF にしてしまったという時は、次回起動時は EFI Shell が起動して終わってしまうので、ここから一度 OS を起動するか、直接 EFI Shell でブートローダのコピーやファイル名/ディレクトリ名の修正を行う必要があります。
もし、EFI Shell から OS を起動したければ、以下のようにコマンドを投入していけば OK。
FS0:
cd EFI/debian
grubx64.efi
OS が起動してきたら、新規インストール時と同様に対処するか、typo しているところを修正しましょう。
EFI Shell 上で、ブートローダのコピーをする場合は、以下のとおり。( EFI Shell でも rm
とか mv
が使えるので、typo の修正は可能。)
FS0:
cd EFI/
mkdir boot
cp debian/grubx86.efi boot/bootx64.efi
これで、仮想マシン OFF → ON で問題なく起動できるようになっていればOK。
RHEL/CentOSの場合は?
RHEL/CentOS の場合、 /boot/efi/EFI/redhat の下にブートローダがあるんですが、単純に boot ディレクトリ作って、という方法がうまく行かなかったので、違う方法で対処しています。
[root@cent ~]# ls -l /boot/efi/EFI/redhat/*
-rwx------. 1 root root 866 12月 31 16:06 2015 /boot/efi/EFI/redhat/grub.conf
-rwx------. 1 root root 254248 7月 24 11:43 2015 /boot/efi/EFI/redhat/grub.efi
”\EFI\redhat\grub.efi
” と1行だけ書いた startup.sh というファイルを指定の場所に配置すると、EFI Shell は一度表示されるものの、OS の起動シーケンスに移行するので、この方法で対処。
#おそらく、もっとスマートな対処方法があるとは思うのだけど…。
CentOS が起動している状態であれば vi などで /boot/efi ディレクトリに statup.nsh を配置。
[root@cent ~]# ls -l /boot/efi
合計 8
drwx------. 3 root root 4096 12月 31 07:48 2015 EFI
-rwx------. 1 root root 21 12月 31 16:55 2015 startup.nsh
[root@cent ~]# more /boot/efi/startup.nsh
\EFI\redhat\grub.efi
EFI Shell 上で作成するのであれば、
FS0:
edit startup.nsh
と実行してファイルを作成してください。( edit コマンドを使った場合は、編集後 Ctrl+q で保存してコマンド終了。)
まぁ、面倒くさい対応しなくちゃいけないのは、 VirtualBox の仮想マシンで EFI を有効化した時だけの話なので、EFI を有効にしないという方法もあるんですけどね。
トラックバック(2)
さて、四苦八苦していた VirtualBox で EFI を有効にした仮想マシン上にインストールした Debian を一発で起動させる件。 前のエントリー... 続きを読む
さて、前のバージョンで、 VirtualBox の仮想マシンをEFI 有効にして Debian のインストールをすると、モードによってはインストール直後... 続きを読む
コメントする