GRUB rescue コマンドで起動しないブートローダーを修復する

GRUB (Grand Unified Bootloader)とは、高機能なブートローダで、GNUプロジェクトが開発している。

GRUB rescue モード

GRUBフォルダを見つけられなかったり、GRUBフォルダ内のコンテンツが見つからないか壊れていた場合、GRUBはレスキューモードとなり、次のようなプロンプトが表示される。

grub rescue>

なお、GRUBがrescue modeになった場合は、キーボードが日本語配列になっていない。記号の入力のしかたを次に示す。

文字キー
(Shift + 9
)Shift + 0
=^

修復

GRUBがrescue modeになった場合、まずどのようなパーティションが存在するのかを確認する。

error: no such devie: xxx
Entering rescue mode...
grub rescue> ls
(hd0) (hd0,msdos5) (hd0,msdos4)
grub rescue>

次に、bootディレクトリがどのパーティションに存在するのかを確認する。

grub rescue> ls (hd0)/
error: unknown filesystem.
grub rescue> ls (hd0,msdos5)/
./ ../ bin/ boot/ etc/ dev/ var/ home/
grub rescue> ls (hd0,msdos4)/
error: unknown filesystem.
grub rescue>

bootディレクトリ下にnormal.modファイルが存在すること確認する。

prefix変数を設定する。

grub rescue> set prefix=(hd0,msdos5)/boot/grub
grub rescue>

モジュールを読み込む。

grub rescue> insmod (hd0,msdos5)/boot/grub/i386-pc/normal.mod
grub rescue>

ノーマルモジュールをアクティブにする。

grub rescue> normal
grub rescue>

以上でGRUBが起動される。GRUBによりOSが起動されたら、GRUBを再インストールする。

$ sudo grub-install /dev/sda
[sudo] password for marina
Installation finished. No error reported.
$

コマンド

GRUB rescue モードでは、次のコマンドを使用できる。

GRUB rescueコマンド一覧
コマンド説明
bootブートを初期化する。
catテキストファイルの中身を表示する。
configfilegrub.cfgのようなGRUB設定ファイルを読み込む。
initrdブートに必要なinitrd.imgを読み込む。
insmodモジュールを読み込む。
linuxカーネルを読み込む。
loopファイルをループバックデバイスとしてマウントする。
lsパーティション又はディレクトリのコンテンツ一覧を表示する。
lsmod読み込んだモジュールの一覧を表示する。
normalノーマルモジュールが読み込まれていれば、アクティブにする。
searchデバイスを探す。
set変数の一覧を表示する。または、変数に値を設定する。
vbeinfoGRUBで使用可能な画面解像度を表示する。

insmod

動的な GRUB モジュールを挿入する。

insmod module

ls

デバイスまたはファイルを一覧表示する。

ls [arg...]

引数がない場合、GRUB が知っているすべてのデバイスを表示する。

grub rescue> ls
(hd0) (hd0,msdos5) (hd0,msdos4)

引数が括弧で囲まれたデバイス名である場合、そのデバイスのファイルシステムの名前を表示する。

grub rescue> ls (hd0,msdos5)/
./ ../ bin/ boot/ etc/ dev/ var/ home/

引数が絶対ファイル名として与えられたディレクトリの場合、そのディレクトリの内容をリストアップする。

grub rescue の ls コマンドは、ファイル名を引数に指定すると「ディレクトリではない」と表示される。

grub rescue> ls (hd0,msdos5)/boot/grub/i386-pc/normal.mod
error: not a directory
grub rescue>

normal

通常モードに移行して、GRUB メニューを表示する。

normal [file]

ノーマルモードでは、コマンド、ファイルシステムモジュール、暗号化モジュールが自動的にロードされ、完全な GRUB スクリプトパーサが利用可能になる。その他のモジュールは insmod を使って明示的にロードすることができる。

ファイルが指定された場合、コマンドはそのファイルから読み込まれる。それ以外の場合は、$prefix/grub.cfg があれば、そこから読み込まれる。

normal は通常モードの中から呼び出すことができ、ネストした環境を作ることができる。この場合、configfile を使用するのがより一般的である。

set

環境変数 envar に値を設定する。引数なしで起動された場合、すべての環境変数とその値を表示する。

set [envvar=value]

参考文献

GNU (2018) GRUB Documentation