« September 2012 | Main

December 20, 2015

Grub Rescue>の使い方etc.


grub rescue>set
prefix = (hd0,msdos7)/boot/grub
root = hd0,msdos6
grub rescue>set prefix=(h0,msdos6)/boot/grub
grub rescue>set root=h0,msdos6
grub rescue>insmod (h0,msdos6)/boot/grub/i386-pc/normal.mod
grub rescue>normal

または、・・・・・・


GRUB Loading.
Welcome to GRUB!
error: no such partition.
Entering rescue mode...
grub rescue>set prefix=(h0,msdos6)/boot/grub
grub rescue>set root=h0,msdos6
grub rescue>insmod (h0,msdos6)/boot/grub/i386-pc/help.mod
grub rescue>help
(略)
grub rescue>insmod (h0,msdos6)/boot/grub/i386-pc/echo.mod
grub rescue>echo 'f*ck'
f*ck
grub rescue>insmod (h0,msdos6)/boot/grub/i386-pc/normal.mod
grub rescue>normal

Linux 上の GRUB 2 がブートできなくなったときの対処方法
https://jp.linux.com/news/linuxcom-exclusive/418274-lco20140625


GRUB 2 コマンド シェル

GRUB 2 コマンド シェルは、旧 GRUB のシェルのように強力です。ブート イメージ、カーネル、ルート ファイルシステムの検出ができます。実際、ローカルなマシン上のすべてのファイルシステムに、パーミッションやアクセス権限とは無関係に完全アクセス可能です。これは、セキュリティ上の問題に思えるかもしれませんが、昔の UNIX 時代には、マシンの所有者は、物理的なアクセス権限を持っていました。
grub> プロンプト状態では、コマンド シェルと同様に history やタブ補完が可能です。grub rescue> プロンプト状態は、もっと限られています。history もタブ補完も使えません。
動くシステムを使って、GRUB ブート メニューが表示されたときに、C キーを押してください。GRUB コマンド シェルが動きます。ブートアップのカウント ダウンを止めるには、矢印キーを使って、メニューをスクロール アップまたはダウンさせます。GRUB コマンド ラインで入力しても保存はされないので、自由に挑戦してください。grub> か grub rescue> が表示されていれば、もう準備完了です。
下記に示すコマンドは、grub>、grub rescue> のどちらでも使用できます。最初に、pager コマンドで、長いコマンド出力をページングさせます。

grub> set pager=1
"=" 記号の前後には空白を入れません。少し、意味のあることをしましょう。ls コマンドで、GRUB が認識しているパーティションをリストします。

grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)
この msdos 云々は、このシステムが Global Unique Identifiers Partition Table (GPT) (参照文献)ではなく、MS-DOS 時代のパーティション テーブルを持っていることを意味します。GPT を使用しているときは、(hd0,gpt1) と表示されます。それでは、もう少し検索しましょう。ファイルを検索するため、ls コマンドを使います。

grub> ls (hd0,1)/
lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/
lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/
srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old
initrd.img initrd.img.old
ルート ファイルシステムのようですね。msdos、gpt のラベルは省略可能です。"/" (スラッシュ) を付けずに実行すると、ファイルシステムの情報を表示します。cat コマンドを使って、ファイルの内容を読むことができます。

grub> cat (hd0,1)/etc/issue
Ubuntu 14.04 LTS \n \l
/etc/issue を見ればどの Linux ディストリビューションを使っているか確認できるので、マルチブート システムでは便利です。

grub> プロンプトからブートする

次は、ブートに関連するファイルの設定と grub> プロンプト状態からブートする方法です。ls コマンドを実行して、(hd0,1) 上に Linux ルート ファイルシステムがあることがわかりました。そして、/boot/grub がどこにあるかを確認するまで、検索することができます。そして、以下のコマンドを実行してください。これで、ルート パーティションに存在するカーネル、および initrd を用いて起動します。

grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot
1 行目で、ルート ファイルシステムが存在するパーティションを指定します。2 行目で、起動するカーネルを指定します。/boot/vml までタイプして、タブ補完を使い、残りを補完します。次に root=/dev/sdX を入力し、ルート ファイルシステムを指定します。冗長なようですが、これを正しく指定しないとカーネル パニックになります。では、正しい指定は、何でしょうか。hd0,1=/dev/sda1、hd1,1=/dev/sdb1、hd3,2=/dev/sdd2 の関係があります。あとは、わかりますね。
3 行目で、カーネルと同じバージョンの initrd ファイルを指定します。
4 行目で、システムをブートします。
いくつかの Linux システムでは、カーネルと initrd は、ルート ファイルシステムのトップ レベルにシンボリック リンクされています。

$ ls -l /
vmlinuz -> boot/vmlinuz-3.13.0-29-generic
initrd.img -> boot/initrd.img-3.13.0-29-generic
その場合は、次のようにします。

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /initrd.img
grub> boot
grub-rescue> からブートする

GRUB rescue shell の場合は、違うコマンドを使います。まず、normal.mod と linux.mod の各モジュールをロードします。

grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot
両モジュールをロードしてから、タブ補完が使えます。

恒久的な修正を行う

問題なくシステムをブートできたら、以下のコマンドで、GRUB を修正します。

# update-grub
Generating grub configuration file ...
Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found linux image: /boot/vmlinuz-3.13.0-29-generic
Found initrd image: /boot/initrd.img-3.13.0-29-generic
Found linux image: /boot/vmlinuz-3.13.0-27-generic
Found initrd image: /boot/initrd.img-3.13.0-27-generic
Found linux image: /boot/vmlinuz-3.13.0-24-generic
Found initrd image: /boot/initrd.img-3.13.0-24-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

grub-install コマンドを実行したときのインストール先は、パーティションではなく、ハード ドライブのブート セクタであることに注意してください。つまり、/dev/sda1 のようにパーティションを指定してはいけません。

それでも動かないときは

それほどひどい状態のときは、Super GRUB2 live rescue disk を使ってください。GNU GRUB Manual 2.00 も役に立つでしょう。

| | Comments (3) | TrackBack (0)

« September 2012 | Main