grubコンソールからLinuxを起動する

UEFIブートのシステムでトラブル時や外付けドライブのOSをブートしたい時など、grubコンソールからLinuxを起動するためのメモ。

スポンサーリンク

UEFIブートのシステムでgrubコンソールを起動する方法

grubコンソールが起動させる方法の選択肢としては主に以下2つだろう。

  1. grubメニューが表示されている時にキーボードで”c”を打つ
  2. USBメモリの/EFI/bootディレクトリに.efiファイルをコピーしてUSBメモリから起動

1.は一度GRUBメニューを表示させてからコンソールに行く方法。
インストールされているUbuntuでGRUBメニューが表示されない場合は/etc/default/grubを編集し、grub-mkconfig -o /boot/grub/grub.cfgを実行して表示されるようにする。あるいは、外付けメディアのLinuxインストーラからブートしてGRUBメニューを表示させるのでも良いだろう。

2.の方は実はGRUBの設定がおかしくてメニューが表示されない場合だ。適当なLinuxインストーラから/EFI/ディレクトリより下にあるブートローダーのファイルを、FAT32でフォーマットしたUSBメモリにまるっとコピーしてブートさせれば大抵この状態になる。

注意点はUEFIが32bit版か64bit版かでgrubブートローダーが異なること。32bit UEFIのシステムは64bitのブートローダーを認識しない。Debian Multiarchなど、32bitと64bitの両方のUEFIに対応したインストーラならより確実だ。

grubコンソールでパーティションの中身を確認する

grubのlsコマンドでドライブやパーティションの中身をある程度は確認出来る。

grub> ls
(hd0) (hd0,msdos1) (hd1) (hd1,gpt2) (hd1,gpt1)

hd0やhd1はドライブを表し、(hd0,xx)はパーティションを表す。grubが対応しているファイルシステムであれば、ディレクトリ構造も確認することが出来る。

grub> ls (hd0,msdos1)/
boot/ casper/ dists/ efi/ install/ isolinux/ pics/ pool/ preseed/ md5sum.txt README.diskdefines .disk/

環境変数でルートパーティションを指定できる。

grub> set root=(hd0,msdos1)
grub> ls /
boot/ casper/ dists/ efi/ install/ isolinux/ pics/ pool/ preseed/ md5sum.txt README.diskdefines .disk/

インストール済みのLinuxをgrubコンソールから起動

hd1の2番目のパーティションが/dev/mmcblk1p2で、ここにLinuxがインストールされている場合は、以下のコマンドで起動出来る。

grub> set root=(hd1,gpt2)
grub> linux /vmlinuz root=/dev/mmcblk1p2
grub> initrd /initrd.img

インストールメディアを起動

何らかのトラブルでインストーラのメニュー画面が表示されず、grubコンソールが立ち上がってしまう場合、Ubuntuのインストーラなら以下でインストーラのメニューを起動出来る。

grub> set root=(hd0,msdos1)
grub> set prefix=/boot/grub
grub> normal

まとめ

起動ドライブのブートセクタ(MBR)にプログラムを仕込まなくてはいけなかった昔と比べて、UEFIは/EFI/boot/に.efiファイルさえ入っていればとりあえずブートローダーまでは辿り着くので楽になったと思う。

上記の方法を覚えておくと、トラブルでOSが普通に起動しなくなった時でも起動まで漕ぎ着けられるんじゃなかろうか。

コメント