サブ機として使っているMacBook Airには、展示会やイベントでのオフラインデモ用にUbuntuを入れてあるのですが、それを18.04にアップデートした際に起動しなくなってしまった件の対応方法を記録しておきます。
GRUBメニューを表示させる
僕の環境では通常Ubuntuが起動する時はGRUBメニューは表示されませんでした。電源ボタンを押して、option/altボタンを押しっぱなしにしてMacの起動メニューを表示して、そこに表示される「EFI」というHDDを選択するとUbuntuが起動する感じでした。
この時、EFIを選択してからescボタンを押しっぱなしにしてるとGRUBメニューが表示されます。
とにかく起動させる
GRUBメニューが表示されてから「c」キーを押すとGRUBのコマンドラインインターフェイスになるので、lsコマンドでUbuntuがインストールされているパーティーションを探します。
GRUB ls
(hd0) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) (cd0) (cd1) (cd2) (cd3)
僕の環境ではこんな感じの出力になりました。
lsコマンドでディスク+「/」でディスクのルートディレクトリが表示されるので、中身を見ていきます。
GRUB ls (hd0)
error: unknown filesystem.
GRUB ls (hd0,gpt1)
efi/ bootlog .Trashes/
GRUB ls (hd0,gpt2)
error: unknown filesystem.
GRUB ls (hd0,gpt3)
./ ../ lost+found/ boot/ etc/ media/ bin/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ snap/ srv/ sys/ tmp/ usr/ var/ vmlinuz initrd.img cdrom/ initrd.img.old vmlinuz.old
GRUB ls (hd0,gpt4)
error: unknown filesystem.
これで(hd0,gpt3)
がUbuntuのディレクトリという事がわかったので、rootに設定します。
GRUB set root=(hd0,gpt3)
vmlinuzとinitrb.imgを設定
GRUB linux /vmlinuz root=/dev/nvme0n1p3
GRUB initrd /initrd.img
この時、MacはEFIなのでlinux
をlinuxefi
、initrb
をinitrbefi
にしてもOK。ダメだったら試してください。
あと、linux
コマンドでルートにマウントするデバイスを指定しないといけないのですが、この時点で
GRUB ls (hd0,gpt3)/dev/
としてもなぜか/dev/nvme0n1p3
はありません。適当に/dev/mapper/control
とかをrootに設定してbootすると、起動はできないんですが、devの中身にnvme***
が出てくる様になるので、そこでデバイス名をゲット。
GRUBのコンソールでlsした際に出てきたパーテーションがこんな感じで対応しています。
ls | dev |
---|---|
(hd0) | nvme0 |
(hd0,gpt1) | nvme0n1p1 |
(hd0,gpt2) | nvme0n1p2 |
(hd0,gpt3) | nvme0n1p3 |
(hd0,gpt4) | nvme0n1p4 |
適時、自分の環境に読み替えてください。nvme0 が物理ドライブの0番で、nvme0n1 がその1番目のGPTパーテーショングループ、nvme0n1p1 がその1番目のパーテーション、って事だと思います。たぶん |
上記を設定したら起動します。
GRUB boot
無事、起動したらgrub.cfgを変更します。
grub.cfgを編集する
grub.cfgは/boot/efi
にある方を編集します。僕の環境では、/dev/nvme0n1p1
がブートパーテーションで、ubuntuだと/boot/efi
にマウントされます。
/boot/efi/EFI/ubuntu/grub.cfg
が起動時に使われるGRUBの設定ファイルなので、これを修正します。
なぜかgrub-mkconfig
とかしてもちゃんと起動するgrub.cfgが正成されなかったので、中身見て手動で変更しました。
grub.cfgを開くと、
#
# DO NOT EDIT THIS FILE
#
と書いてあってビビりますが、無視しますw
grub.cfgをざーっと読んでいって、linux
コマンドを実行してるとこを見つけ、その前でrootを設定します
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-dev/nvme0n1p3' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
set root=(hd0,gpt3)
linux /boot/vmlinuz-4.15.0-62-generic root=/dev/nvme0n1p3 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.15.0-62-generic
}
このset root=(hd0,gpt3)
が追記した部分です。
なぜかこれを書かないと、/boot/vmlinuz-4.15.0-62-generic
が見つからないってエラーで起動できませんでした。
以上、ご参考までに。