
Ubuntu日本語フォーラム

ログインしていません。
ページ: 1
UEFIモードで13.10のKubuntuとUbuntu Studioをクリーンインストールすると「grub>」プロンプトに落ちて起動できません……よね?
てっきりリリースノートに書かれると思っていたのですが、どちらのフレーバーも特に触れられていないみたいなので、もしかしたら私が調べきれていない何かがある?と思いつつも、上記現象になる原因は判別していると思いますので書こうと思います。
これまでUEFI環境へのブートローダーのインストールは、Ubuntuと公式派生であるフレーバー(XubuntuやUbuntu Studioなどのことです)隔てなく「ubuntu」という一意的な識別子で登録されていました。ですが、13.04からはフレーバーが独自の識別子を用いるようになってきた(今はまだKubuntuが13.04から、Ubuntu Studioが13.10、のみ)ため、Kubuntuの場合は「kubuntu」などのように独立して登録されるようになりました。
ただ、通常のGRUBであればブートローダーのインストール時にパーティション情報を含む形でその場で生成されるのでGRUBの設定ファイルの在りかがわかり読み込むことが出来るのですが、署名されたGRUBの場合(12.04.3や13.10では問答無用でインストールされるっぽい)ですと、Canonical側で生成して署名したブートローダーをコピーしているに過ぎないのでパーティション情報を含んでいません。当たり前の話ですが失敗作を提供するわけもなく、署名されたGRUBには予め「EFI/ubuntu」というプレフィックスが与えられており、そこ(EFIシステムパーティション内の「EFI/ubuntu」)に保存されている「grub.cfg(※1)」を読み込むことで補完しているようです。ですが、先にて述べたようにフレーバーは独自の識別子で登録するようになりましたので、この「EFI/ubuntu」ディレクトリーごと存在しません(Kubuntuの場合は「EFI/kubuntu」にファイルがあります)。このファイルがないためにGRUBの設定情報を読み込むことができず「grub>」プロンプトに落ちています。
※1 このgrub.cfgはUbuntuパーティション内のgrub.cfgとは別物で、パーティション情報やGRUBの設定ファイルを読み込むコマンドなどが書かれています。
search.fs_uuid 4fd869d3-8c46-4a26-944a-788451e06fdb root hd0,gpt2 set prefix=($root)/boot/grub configfile $prefix/grub.cfg
(原因は上記なので普通に起動するということはないと思っているのですが…)
実はフレーバーが独自の識別子を用意したことによる問題は件のフレーバーでインストールした環境に留まりません。
以前のバージョンからアップグレードした場合、あるいはUbuntu(「ubuntu」の識別子でインストールされるフレーバー全て)に件のフレーバーパッケージをインストールした場合では、「ブートローダーが更新されない」といった、また違った問題を孕んだりします。(これについては https://forums.ubuntulinux.jp/viewtopic.php?id=15665 に書きました)
何気にUbuntu StudioとUbuntuでマルチブートしていると、Ubuntu側でGRUBの更新が行われるとUEFIのブートエントリーから「ubuntustudio」が削除されてしまう、といったものもあったりします。(これはまあ、Ubuntu Studio側でGRUBを更新させれば復活しますので、上記のトピックの#2を参照していただくとして…)
とにかく、今は仕様の間でグダグダといった感じなので、UEFI環境下でこれらのフレーバーを使用したいという場合は、仕様(の変化)に振り回される覚悟を持っておいたほうが良いかもしれません。
というのを踏まえた解決方法が以下。
0. 次期バージョンの14.04が出るまで待つ
もしかしたら、他のフレーバーも識別子を用意してくるかもしれませんし、14.04はLTS(長期サポート版)の予定なので、そこで対応される、と思いたい…。
1. 仮想マシンで利用する
ただ、Ubuntu Studioを仮想マシンで、というのは現実的ではないかもしれませんね。
それと、リリースされたばかりの仮想マシンは控えたほうが良いかもしれません。(UbuntuをホストにリリースされたばかりのVitrualBox 4.3を使用してみたら、ホストがカーネルパニックでフリーズするのを2度経験しました)
2. Legacy BIOSモードでインストールする
Windowsなど他のOSがインストールされている場合はブートの知識がないと後々苦労することになると思います。
3. 署名されたブートローダーパッケージ、署名されたカーネルを削除する
セキュアブート環境下ではこの方法を採ることはできませんね。
4. 「EFI/フレーバーの識別子/grub.cfg」を「EFI/ubuntu/」にコピーする
おそらくセキュアブート環境下で件の現象が起きている場合はこれしか方法がないかと。
「3」と「4」についてもう少し詳しく書きます。
まずは、
https://forums.ubuntulinux.jp/viewtopic.php?pid=100287#p100287
の方法でインストールしたOSを起動させてください。
起動しましたら、
A. 署名されたブートローダーパッケージ、署名されたカーネルを削除する、の場合
「shim-signed」と「grub-efi-amd64-signed」、そして「linux-signed-image-最新のバージョンナンバー-generic」パッケージを削除してください。削除するパッケージを間違えないように。
削除しましたら、ターミナルアプリケーションで「 sudo dpkg-reconfigure grub-efi-amd64 」コマンドを実行してブートローダーを更新してください。実行するといくつか質問されますが、そのままエンターキーを押して構いません。
$ sudo dpkg-reconfigure grub-efi-amd64 BootCurrent: 0004 BootOrder: 0000,0004,0001,0002 Boot0000* EFI DVD/CDROM Boot0001* EFI Hard Drive Boot0002* EFI Internal Shell Boot0004* ubuntustudio BootCurrent: 0004 BootOrder: 0003,0000,0004,0001,0002 Boot0000* EFI DVD/CDROM Boot0001* EFI Hard Drive Boot0002* EFI Internal Shell Boot0004* ubuntustudio Boot0003* kubuntu Installation finished. No error reported. Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.11.0-12-generic Found initrd image: /boot/initrd.img-3.11.0-12-generic Found Ubuntu 13.10 (13.10) on /dev/sda4 done
以上です。再起動させて確認してみてください。
※ boot-repairというツールでも行えますが、Ubuntuのリポジトリーにありませんし、あまりお薦めしたくない点がいくつかありますので、"私は" 使い方を提示しませんし、この件には触れません。
B. 「EFI/フレーバーの識別子/grub.cfg」を「EFI/ubuntu/」にコピーする、の場合
まずはターミナルアプリケーションで、
ls -R --full-time /boot/efi/EFI/
を実行して、「EFI/」内のディレクトリー構成とファイルを確認してください。
既に「/boot/efi/EFI/ubuntu」ディレクトリーに「grub.cfg」ファイルが存在している場合は以下の方法でそのファイルに記述されているパーティション情報(UUID)がディスク内に存在していないことを確認してください。
cat /boot/efi/EFI/ubuntu
このコマンドの結果は冒頭の説明で示しているような内容になっているはずです。
その中の「4fd869d3-8c46-4a26-944a-788451e06fdb」がUUID値です。(ここに載せた値はあくまでも例です)
次に実際にそのUUID値を持つパーティションが存在するのかを確認します。
ls -l /dev/disk/by-uuid/
該当するUUID値があるようでしたら、何か別の現象が起きています。フォーラムで質問してみてください。
問題が無いようでしたらフレーバー側のgrub.cfgをコピーをします。下記はUbuntu Studioの場合の例です。
sudo mkdir /boot/efi/EFI/ubuntu sudo cp /boot/efi/EFI/ubuntustudio/grub.cfg /boot/efi/EFI/ubuntu/
以上です。再起動させて確認してみてください。
オフライン
バグ報告が来ました。識別子を持たせないなど元に戻すことも選択肢に入っているようです。
参照: https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1242417
オフライン
興味深くトピックを拝見しました。
私もKubuntuユーザーで13.04かその前のバージョンあたりからUEFIブートでのマルチブートにトライしています。
こちらの方でも全く、同じ現象に悩まされていました。
当初は、UEFIブートによるインストールを諦めて通常ブートでのインストールで凌いでいました。
Templerさんのトピックを拝見したところ原因がなんとなく分かりました。
私の方ではプログラムの解析は良く分かっていないので、次の方法を試したところ上手く起動出来ました。
The rEFInd Boot Manager(本家サイト)
rEFInd プロジェクト日本語トップページ
二番目のリンクからパッケージをダウンロードしKubuntu上でインストールし再起動するとThe rEFInd Boot Managerのメニューが起動します。
あとは、メニューから起動したいカーネルを選択しエンターキーを叩けばOSが起動する仕組みです。
言わば、UEFI版のMBMといったところかなと思います。
MBMとの違いは単なるチェインローダではなくカーネルが叩けるようなので万能型のカーネルローダーといったところでしょうか。
何れにせよシステムの起動時にGRUB2そのものをキックするにはTemplerさんの投稿を参考にしてプログラムの書き換え等が必要のようですね。
リリース時に何とかしとけよと開発者にツッコミたくなります。
そうそう、このThe rEFInd Boot Managerは一度、Kubuntuを起動した上でインストールを行わなくていけないので
UEFIモードで起動ディスクを起動しても意味がないので通常モードで起動するDVDドライブを選択し起動メニューを開いて
F6キーを押してインストールしてあるドライブを選択してインストール済みのOSを起動する事になります。
とりあえず今は、こんな状況下でやっております。
何かまた進展がありましたら情報をお寄せ下さい。
オフライン
launchpadのstatusがFix Releasedになりました。
SaucyでFix Releasedになりましたので、これから13.10を新規にインストールするという方はネットに接続した状態でインストールを行えば、インストール後も普通に起動できるようになります。
なお、修正後の仕様はこのような形になります。
・識別子の使用は継続するためブートエントリーには「kubuntu」などのフレーバー名で登録される。
・ブートローダーのインストールについてはフレーバーは特別扱いされて「EFI/ubuntu」ディレクトリーにインストールされる。
ただ、まだ "修正した方向性をとりあえず形にした" といった段階らしく、
・Kubuntuにしか対応していない、(Ubuntu Studioは諦めムードですかね…)
・GRUB更新の度にブートエントリーが増殖する、
といったバグがあります。これらは次期Ubuntuに持ち越しになるかもしれません。
それと、署名されたGRUBをアンインストールして対処された方は、「EFI/ubuntu」がない状態ではブートローダーのインストール・更新が行われませんので、パッケージのアップデート後に、
sudo grub-install
を実行してください。
※ 署名されたGRUBがインストールされている場合はgrub-efi-amd64-signed側でgrub-installが実行されるため「EFI/ubuntu」が作成されてブートローダーがインストールされます(が、本来あるべき挙動は「勝手にインストールをしない」ではないかと思いますので、修正の入っていない -signed のほうがバグっている状態と言えるのではないでしょうか)。
重複したUEFIのブートエントリーについてはバグがfixされたら余分なものは残らないようになりますので、邪魔に感じないのであればそのまま放ったらかしで良いです。
どうしても削除したいという方は、「 sudo efibootmgr -v 」コマンドを実行してブートエントリーのナンバーを確認し、「 sudo efibootmgr -b ナンバー -B 」コマンドでエントリーを削除してください。
$ sudo efibootmgr -v BootCurrent: 0003 BootOrder: 0004,0003,0000,0001,0002 〜中略〜 Boot0003* kubuntu HD(1,800,f3800,99b3763e-2cb7-4d35-94fb-f7dc080bad1a)File(\EFI\kubuntu\grubx64.efi) Boot0004* kubuntu HD(1,800,f3800,99b3763e-2cb7-4d35-94fb-f7dc080bad1a)File(\EFI\ubuntu\grubx64.efi) $ sudo efibootmgr -b 0003 -B BootCurrent: 0003 BootOrder: 0004,0000,0001,0002 Boot0000* EFI DVD/CDROM Boot0001* EFI Hard Drive Boot0002* EFI Internal Shell Boot0004* kubuntu
上記は、「EFI/kubuntuのブートローダーを示しているBoot0003のエントリーが不要になったので削除した」場合の例です。
※ 削除されるのはブートエントリーだけで、ブートローダー自体は残ります。
オフライン
忘れてた。
Templer による投稿:
※ 削除されるのはブートエントリーだけで、ブートローダー自体は残ります。
ブートローダーの削除も行うという方は、先にブートエントリーの削除をしてください。
順番を間違えて確認作業なども間に挟んだりすると、フリーズというかなり痛い目にあうかもしれません。(最悪はBIOSが壊れるなんてこともあるかも?)
オフライン
その後の状況を報告します。
TemplerさんからのGRUB2のバクの報告があった後に、どうやらGRUB2のアップデートがあった模様です。
こちらも早速、upgradeしたところ正しくkubuntuのGRUB2がUEFIにて起動できるようになしました。
オフライン
14.04で仕様が変わりましたので報告します。
KubuntuとUbuntu Studioが取り入れていた独自の識別子ですが、両フレーバー共、使用するのをやめましたので、以前と同じように「ubuntu」として処理されるようになりました。
なお、Ubuntu Studio 13.10でubuntu系をはじめて使用し、grub-installを実行していない方(主に署名されたローダーを削除して対処された方)は、EFIシステムパーティション内に「EFI/ubuntu」(つまり「/boot/efi/EFI/ubuntu」)ディレクトリーが存在しないはずです。
この状態ですと、GRUBのパッケージに更新があっても「EFI/ubuntu」ディレクトリーは自動では作成されませんので、ブートローダーが更新されません。
これに該当する場合は、「 sudo grub-install 」を実行してください。
EFIのブートエントリー云々については別トピックのほうに書きましたのでそちらを参照してください。
https://forums.ubuntulinux.jp/viewtopic.php?pid=103083#p103083
なにはともあれ、今後(14.04ではなく次期Ubuntu以降)も仕様が変わることもあるかもしれませんが、ひとまず「元に戻った」ので、このトピックは閉めで良さそうですね。
オフライン
ぬかった! 申し訳ありません、訂正です(Kubuntuとごっちゃになっていた……)。
Templer による投稿:
なお、Ubuntu Studio 13.10でubuntu系をはじめて使用し、grub-installを実行していない方(主に署名されたローダーを削除して対処された方)は、EFIシステムパーティション内に「EFI/ubuntu」(つまり「/boot/efi/EFI/ubuntu」)ディレクトリーが存在しないはずです。
この状態ですと、GRUBのパッケージに更新があっても「EFI/ubuntu」ディレクトリーは自動では作成されませんので、ブートローダーが更新されません。
これに該当する場合は、「 sudo grub-install 」を実行してください。
Ubuntu Studioはアップグレードする前だとgrub-installを実行しても識別子が効いて「EFI/ubuntu」ディレクトリーが作成されませんね。
なので、Ubuntu Studioをアップグレードする前でしたら、
sudo mkdir /boot/efi/EFI/ubuntu
を実行して「EFI/ubuntu」が用意されてからアップグレードしてください。
既にアップグレードをしてしまった方は「 sudo grub-install 」をしてください。
オフライン
ページ: 1