トラブル現象
grub2 の起動OS選択画面が表示されず、代わりに、grub rescue のコマンドプロンプトが表示され、OS起動できなくなった。
grub rescue>
経緯
-
Linux パーティションを削除
次のように複数の Linux をインストールしていた環境から一つの Linux をアンインストールしようと、該当パーティションを削除した。
- PC
- EeePC 1101HA ・・・ いわゆるネットブック, 32bit, 当然 UEFI ではなく BIOS
- OS
- Windows7
- Raspberry Pi Desktop
- Linux Mint 19 ・・・ パーティションを削除
- PC
-
grub2 では起動リストを手動編集できない?
まぁ、こんなことすれば起動時に障害が発生することは最初からわかっていたが、事前に起動リストを編集するような方法が grub2 では見つけられなかった。
試してみた限りでは、
update-grub
コマンドを実行すれば各パーティションにインストールされているOSを自動検出して、起動リストを更新してくれる。対象PCは壊れても構わないリモート専用PCなので、いきなり該当パーティションを gparted で削除して再起動してみたところ、grub rescue が出現した。
だが、grub rescue はブートローダーであって、
update-grub
コマンドは Linux を起動した後でないと実行できない。さぁ、どうしたものか。
対処方法
結論としては、こちらのページ「GRUB (Grand Unified Bootloader) - SE学院」に記述されていた手順で解消できた。help で grub2 のコマンドを眺めてみても、皆目見当がつかない状態だったので、とても助かった。
-
grub2 の設定を一時変更して Linux を起動させる
grub rescue> ls (hd0) (hd0,msdos5) (hd0,msdos4)... grub rescue> ls (hd0) error: unknown filesystem. つまり、該当パーティションが消失している grub rescue> ls (hd0,msdos5)/boot/grub/i386-pc/normal.mod error: not a directory 復旧に必要なモジュールが別パーティションにはある grub rescue> set prefix=(hd0,msdos5)/boot/grub grub rescue> insmod (hd0,msdos5)/boot/grub/i386-pc/normal.mod grub rescue> normal
-
grub2 を再インストールする
無事に grub2 の起動OS選択画面が表示されたら、残してあった Linux を起動する。
この状態では、一時的に grub2 を認識しているだけなので、次のコマンドで /dev/sda ディ スクに再インストールする。$ sudo grub-install /dev/sda
-
要は、grub2 を何らかの方法で再インストールすればいい
今回の環境は、前述の通り、Linux のデュアルブート環境、正確には、Windows7 も選択できるトリプルブート環境だったので、残していた Linux(Raspberry Pi Desktop)に含まれている grub2 を使って再インストールした。
他にも、Linux の Live CD/USB などを使って grub2 を再インストールする方法もある。
なお、Windows と Linux 1つのデュアルブート環境から、Linux パーティションを削除したような場合は、Windows 用ブートローダに戻すために、Windows のインストールメディアや回復メディアを使って、MBR を修復するのがよいだろう。
注意点
-
入力キー配列が US 配列
grub rescue での入力キー配列は US 配列なので
(
,)
,=
などのキーが JIS 配列と異なる。US配列 JIS配列 ( Shift + 9 ) Shift + 0 = ^