環境、経緯

  • WindowsとUbuntu 20のデュアルブート環境
  • UbuntuをブータブルメディアからReinstallした
  • BIOS起動オプションでWindowsを選べばWinが普通に起動
  • BIOS起動オプションでUbuntuを選ぶとgrubコンソールが出現

どこのgrub.cfgを読み込んでいるか調べる(起動後に修正するとき使うため)

setコマンドで全ての環境変数が表示される。

筆者の環境では
cmdpath=(hd0,gpt1)/EFI/UBUNTUとなっているから、ディスク0のパーティション1の中の/EFI/UBUNTUからGrubを読み込んでいることがわかる。

Ubuntuを起動させる

起動には3つの情報が必要

  1. Ubuntuの/ (ルートパス)がどのパーティションにあるか
  2. カーネルイメージのパスと、それがあるドライブ名
  3. 初期RAMディスクのパス

1は分からなければ「ls (hd0,1)」、「ls (hd0,2)」、「ls (hd0,3)」などとコマンドを打ってそれっぽいルートパスを探す。

2, 3はespパーティションにあることが多いが何故か筆者は1と同じ場所にあった。
こちらも「ls (hd0,4)/boot」などと打ち込んでみて、vmlinuz-やinitrd.img-などから始まるファイルを探す。

この3つの情報を元に、以下のコマンドを打ち込む。

set root=(hd[ドライブ番号],[パーティション番号])
linuxefi [カーネルイメージのパス] root=[ドライブ名]
initrdefi [初期RAMディスクのパス]

最後にbootコマンドで起動させる。正しくできればGUIログイン画面が表示されるはず。

grub.cfgを書き換え修復

cmdpath=(hd0,gpt1)/EFI/UBUNTU がすでにわかっている。

(hd0,gpt1)のデバイス名は/dev/sda1であるので、適当に/mntフォルダにマウントした後、/mnt/EFI/ubuntu/grub.cfgが存在していることを確認し、

sudo grub-mkconfig -o /mnt/EFI/ubuntu/grub.cfg
というコマンドで修復する。

参考

https://qiita.com/daisuke0115/items/da6f399df52af95cc0b8

https://www.express.nec.co.jp/linux/distributions/knowledge/system/grub.html

https://www.gnu.org/software/grub/manual/grub/grub.html