電磁波に撃たれて眠りたい!

〜俺達しかやれない 世界だけを狙え〜

再起動したらgrubメニューが表示されずgrub rescueが登場したときの話

何が原因か分からない(あとでわかった)のですが、Ubuntuを再起動したらいきなりこんな画面が出てきました。

error: no such partition. grub rescue> _

grub rescue?????

何となくイメージとして、MBRがブートローダを拾えなくなっただろうなーという予想はできた。 けど、なんでそれが発生したのかまったく分からず。。。 とりあえずgrub rescueってナニ?と思って調べてみた。

↓自分実験室 : GRUB Rescueによる復旧
http://blog.livedoor.jp/braahmana/archives/1590075.html

↓grub rescueでハマったのでメモ | Refidea
http://www.refidea.com/notes/grub-rescue%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7%E3%83%A1%E3%83%A2/

↓GRUB rescueで九死に一生を得た had a narrow escape from death thanks for GRUB rescue - くだらぬみちくさにっき ---- To waste one’s time on the road might be good, I think.
http://d.hatena.ne.jp/siritori/20110612/1307840487

↓Ubuntu で grub rescue -> grub-install を実行して grub を修復 - 新芽の手、ほんとの手
http://d.hatena.ne.jp/syque/20110225/1298618896

 

フムフム。 要するに、パーティションをいじるとGrubが壊れるというより、パーティションテーブルに設定されている起動フラグがたったパーティションの先頭レコードにIPL(Initial Program Loader)を探しにいくんだけど、たとえばパーティションを消してしまったり、強制的にサイズをいじったりして先頭レコードが変わったりなんかしてしまうと、ブートストラップローダが順番にチェックしていく途中で起動フラグが立ってるはずのパーティションを見に行って「no such partition」になってしまうわけですね。 確かに、つい最近Mint Linuxのブートパーティションを削除したばかりでした。 まだ調べてないですが、おそらくブートパーティションをいじった時にはなんからの設定変更が必要なんでしょうね。。。。。 といってもUbuntu上でどうにかすることはできないので、上のページのアドバイスに従って、normal.modを探してみます。

grub rescue> ls (hd0) (hd0,msdos7) (hd0,msdos5)....... grub rescue> ls (hd0)/ error: unknown filesystem. grub rescue> ls (hd0,msdos7)/ ./ ../ lost+found/ etc/ media/ var/ bin/ boot/ dev/ home/ ..... grub rescue> ls (hd0,msdos7)/boot/grub/ ./ ../ fonts/ locale/ i386-pc/ grubenv grub.cfg gfxblacklist.txt unicode.pf2

あれ????? /boot/grub/配下にnormal.modがない!!!

もしやこれは。。。。と嫌な汗をかきながらもうちょっと調べてみると、

↓ubuntu12.10をインストール後にgrub rescue | Wait Cursor
http://waitcursor.wordpress.com/2012/11/23/ubuntu12-10%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%BE%8C%E3%81%ABgrub-rescue/

なるほど。新しいUbuntuだと場所が違うのね。 ということで、

grub rescue> ls (hd0,msdos7)/boot/grub/i386-pc/normal.mooooood error: file '/boot/grub/i386-pc/normal.mooooood' not found grub rescue> ls (hd0,msdos7)/boot/grub/i386-pc/normal.mod error: not a directory

本当にないファイルを指定してlsを打つとnot foundになり、存在する けどディレクトリではないものを指定してlsを打つとnot a directory とエラー表示されるようです。ということで、上記の場所にnormal.mod が存在することが分かったので、

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

で見事grubが上がってきました! あとはUbuntu起動後にgrubを再インストール。

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

いやーよかったよかった。

パーティションを削ったらgrubにリストされてるブートパーティションを 削ったらgrubを修正しないとダメね。これは覚えておこうっと。