Palm84 某所の日記

死のうは一定、しのびクマには何しよぞ...

Windows 再インストールしたらGRUBが起動でけへんようになってもうたな巻

2011.6.8 ちょこちょこ追記

Win+Linux のマルチブート・ユーザーやったらめちゃ常識的な話ちゃいますやろか(せやろか?、せやで! せやな! せやせや!)

  • GRUBをMBRにインストールしてマルチブートしとっってん
  • Windows 再インストールしてん
  • GRUBが出てけぇへん
  • Windows しか起動でけへんねん

Windows はインストール時にMBRのブートストラップを問答無用で書き換えよるんですわな話。起動ディスクを準備しとったらええんですけど初めてやと「どないしたらLinux起動すんのー」あせりまくるという「誰もが一度は通る道」やね。なんつって。。

INDEX
私見ではありますが...

GRUB(GRUB2) はMBRではなくLinuxパーティションにインストールして 「Windows の BOOTMGR(NTLDR) → GRUB for DOS(grldr) 」からチェインロードさせるのもエエちゃうかなと思います。MBRを弄る必要がなくなるので。既にMBRにインストール済なら今更かもしれませんが...

まぁどっちゃにしても、GRUB for DOS はHD上のisoイメージブートとかでけて結構便利やから「BOOTMGR(NTLDR) → GRUB for DOS(grldr)」は設定しといて損ないんとちゃいますやろか。

自作機ならほんまにどうでもいいことだったりもしますが。

復旧はどうする?

方法は主に2種類かな?

  1. LiveCDなどでブートしてGRUBを再インストール
  2. 起動ディスクなどなんらかの方法でHD上のLinuxをブートして、そのLinux上でGRUB再インストール

ぶっちゃけ【1】の方法はあんまりおすすめできませんなぁ。なんでやいうと、バージョン不整合でややこしかったり、ディストリ提供のGRUBパッケージにしとかんとあとあと不便やし。

ちゅうことで【2】の方法について、むっちゃいろんな方法があるんでワシがわかりやすいかな思てる方法を書いときます。

GRUB (Legacy)
  • GRUB for DOS - HD上の /boot/grub/menu.lst を読み込み
  • Super Grub Disk - FD/CD でブートしてメニューから選択
GRUB2
  • GRUB for DOS - /boot/grub/core.img をチェインロード
  • Super Grub2 Disk - FD/CD でブートしてメニューから選択

もちろん、root, kernel, initrd などを手動で入力してもおkですがパラメータの入力がめちゃメンドくさいかも。

GRUBの再インストール

ディストリによって違いがあると思うんで詳細はディストリのドキュメントを確認するべしです。MBRへのインストールならだいだいはこんなかんじ。

# grub-install /dev/sdx

x のとこは1台目の内蔵HDなら普通は a ですな。(※ P-ATAのHDでは hda の場合があります)

再設定なんで追加オプションが必要になるかも。Ubuntu(Debian) では update-grub コマンドもやっとくべし

【注意】USB HD が sda、内蔵HDDが sdb となってたこともあるのでほんまに用心しとくれやす!

df コマンドとかで //boot があれば /boot 優先)のデバイス名を確認したらいいかな。

palm84@kubuntu:~$ df -h
ファイルシステム            サイズ  使用 残り 使用% マウント位置
/dev/sda2            6.9G  3.7G  2.9G  57% /
none                  245M  272K  245M   1% /dev
none                  249M     0  249M   0% /dev/shm
none                  249M  312K  249M   1% /var/run
none                  249M     0  249M   0% /var/lock
none                  249M     0  249M   0% /lib/init/rw

この例では sda です。

2台目のMBRにインストールする場合は、BIOSで設定変更するか起動時にBIOSメニューで選択、もしくは1台目のHDのブートローダでチェインロード設定、などの処置をする必要がありますな。通常1台目のHDからブートしますさかいに。

予備知識・注意点など

キーボードはUS配列

英語版の Linux などでは基本的にキーボードはUS配列となってます。

()は一つ右へずれるとか、=,_とか。コマンドラインを使う場合はご注意。

USB(メモリ)ブートでは

HDの順番が入れ替わります。USBメモリが hd0(1台目HD)内蔵HDが hd1(2台目HD)として認識されます。最近の Ubuntu などでは uuid を使うので問題ないかと思いますが、menu.lst 内の root の指定など変更が必要になるかもしれません。

  • 例 :
    • root (hd0,x)root (hd1,x)
    • root=/dev/sdaxroot=/dev/sdbx
GRUB のドキュメント

Super Grub Disk

GRUB修復用というウリですが高機能な起動ディスクとして使えるんでそれぞれ1枚持っとくと役に立つかもでごわす。

GRUB(Legacy) と GRUB2用は別物なので注意。2011.6.6 現在では...

  • Super Grub Disk - GRUB(Legacy) 起動ディスク、GRUB2は検出不可、NTFSファイルのロード不可
    • CDイメージ - super_grub_disk_0.9799.iso
    • FDイメージ - super_grub_disk_english_floppy_0.9799.img
    • USBメモリ用イメージ - super_grub_disk_english_usb_0.9799.tar.gz
  • Super Grub2 Disk - GRUB2 起動ディスク、GRUB(Legacy) も検出可、NTFSファイルのロード可
    • super_grub_disk_hybrid-1.98s1.iso - isohybrid なのでCD/FD/USBメモリ兼用のイメージ
  • Super Grub Disk Wiki

※ Super Grub2 disk で GRUB(Legacy) のブートも可能でしたが、元の menu.lst 表示ではなく設定リストの表示だったので、GRUB(Legacy)用には Super Grub Disk (not Grub2) の方が使いやすいと思います。

Super Grub Disk(GRUB用)

CD (or FD, USBメモリ) でブートしたら下記を選択してくだされ。

  • !Linux! (1) AUTO

タイトルにMBRの付く行はMBRへ書き込みしてしまうので注意

f:id:palm84:20181223210824p:plain

検索結果を選択すればインストールされてるLinuxが起動するはず・・・です。

手動で検索して表示するにはcキー押しでコマンドモードへ。下記は一例。

find /boot/grub/menu.lst
 (fd0) (hd0,1)

root (hd0,1)
configfile /boot/grub/menu.lst

/boot/grub/menu.lst ではなく下記の場合もあるかも。

  • /grub/menu.lst
  • /boot/grub/grub.conf
  • /grub/grub.conf
  • /menu.lst
Super Grub2 Disk(GRUB2用)
2014.11.24 追記

かなり変更されてました。

ブートしたら2行目の「Detect any GRUB2 configuration ...」を選択。1行目でもいいかもしれない。

※ 3行目は core.img or multiboot.img を検索してロード。

f:id:palm84:20181223210827p:plain

Kubuntu のGRUB2が検出されました。

f:id:palm84:20181223210833p:plain

選択すると Kubuntu のブートメニュー内容が表示。選択したら通常起動しました。(ブートメニュー非表示設定してる場合はこのメニューが出ないかも)

f:id:palm84:20181223210836p:plain

手動で検索して表示するにはcキー押しでコマンドモードへ。下記は一例。

search -f /boot/grub/grub.cfg
 hd0,2 hd31

root (hd0,2)
configfile /boot/grub/grub.cfg

/boot/grub/grub.cfg ではなく下記の場合もあるかも。

  • /grub/grub.cfg

GRUB for DOS

GRUBの多機能版、特にチェインロード機能が秀逸かと。メンテ用にめちゃ便利。

個人的には「Windows ブートメニューに追加」がおすすめです。MBRは弄らないし、今後も使えるんで。

CDブート なら Puppy Linux で

CD/USBメモリでのブートなら Linux LiveCD の Puppy Linux がいいかな。ブートローダーが GRUB for DOS になってます。

【追記】wary-511-01j-k2.6.32.28-small.iso ではブートメニューにGRUB検索エントリがあるので で選択するだけです。

f:id:palm84:20181223210841p:plain

FD/ネットワークブートなど詳細は上記拙作めもをご笑覧くだされ。

私的 menu.lst

ファイル名は menu.lst にリネームしてくだされ。

  • アンダースコア _Shift-0
  • バー |Shift-半角
  • バックスラッシュ \半角

使用時は menu.lst にリネームしてください。

  • 未確認事項
    • 2TiB超HDで使えるかな?
    • AFT(4KiBセクタ)とか対応してるかな
GRUB(Legacy)

GRUB for DOS が起動したらcキー押しでコマンドモードへ。下記コマンドを打ちませう。

find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst
configfile /boot/grub/menu.lst

見つかったら、インストールされてる Linux のブートメニューが表示される・・・はずです。

menu.lstに書いとくならこんなかんじで。

title configfile /boot/grub/menu.lst
find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst
configfile /boot/grub/menu.lst

/boot/grub/menu.lst ではなく下記の場合もあるかも。

  • /grub/menu.lst
  • /boot/grub/grub.conf
  • /grub/grub.conf
  • /menu.lst
GRUB2

GRUB2 は設定ファイルの仕様がかなり違うので設定ファイルを表示するのではなく、GRUB2本体をチェインロードします。(※ 本体が破損している場合はだめ。Super Grub2 Disk を使うべし)

GRUB for DOS が起動したらcキー押しでコマンドモードへ。下記コマンドを打ちませう。

find --set-root --ignore-floppies --ignore-cd /boot/grub/core.img
kernel /boot/grub/core.img
boot

見つかったら、インストールされてる Linux のブートメニューが表示される・・・はずです。

f:id:palm84:20181223210900p:plain

(ブートメニュー非表示設定してる場合はこのメニューが出ないかも)

menu.lstに書いとくならこんなかんじで。

title chainload GRUB2
find --set-root --ignore-floppies --ignore-cd /boot/grub/core.img
kernel /boot/grub/core.img

/boot/grub/core.img ではなく下記の場合もあるかも。

  • /grub/core.img
  • /boot/multiboot.img
  • /multiboot.img

めも

Super Grub Disk 入り LiveCD

FDイメージをブートメニューで選択

Super Grub Disk を FDイメージでブート(組み込む)

USBメモリブートやネットワークブートに組み込むと便利。ファイルをすべてルートに保存してる場合の例です。ファイル名は変更してます。

isoよりFDイメージの方が確実かなと(※ 2 は hybrid)。

SYSLINUX へ組み込み

memdisk を使います。isoよりFDイメージの方が確実かなと(※ 2 は hybrid)。

LABEL SuperGrubDisk
LINUX /memdisk
INITRD /sgd.img
APPEND raw

LABEL SuperGrub2Disk
LINUX /memdisk
INITRD /sgd2.iso
APPEND raw
GRUB for DOS へ組み込み
title Super Grub Disk
find --set-root /sgd.img
map --mem /sgd.img (fd0)
map --hook
chainloader (fd0)+1

title Super Grub2 Disk
find --set-root /sgd2.iso
map --mem /sgd2.iso (fd0)
map --hook
chainloader (fd0)+1

おつかり。