環境、経緯
- 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つの情報が必要
- Ubuntuの/ (ルートパス)がどのパーティションにあるか
- カーネルイメージのパスと、それがあるドライブ名
- 初期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