win-grub2
update 2012-10-26

概要説明

grub2になってからは 従来の方法では Windowsから grub2を起動することができなくなった。
従来の方法とは partitionの第一セクタ 512バイトをファイル化して Windowsブートローダに取り込んで起動する方法である。
grub2のブート情報は、この512バイトに収まらないことになったためである。
 
そこで grub4dosのファイルを用いて grub2の core.img ファイルを実行することにする。
※core.img ファイルのpathはOSバージョンによって
/boot/grub2/core.img 、/boot/grub2/i386-PC/core.img のように異なる場合があるので、kernel パラメータ指定の際に留意すること。

ここでは Win8 , fedora 環境を例に記述している。
※ grub0.97までを grub ,grub1.9 以降を grub2と呼んでいる。

作業手順

1.作業前のWin8とfedora環境は次の何れかの状態になっているとする。
※ 表記 (hdX , Y)は grub2の表記に合わせて Partition番号は「1」から始まっている。

ケース(1)
同じHDD内の partitionに fedora(grub2)をインストールしているケース。
※ブートローダを PBR(partition の先頭セクタ)にインストールしている。
win7-grub2-1.png
ケース(2)
別のHDDに fedora(grub2)をインストールしているケース。
※ここではブートローダを MBRにインストールしている。(別のHDDのPBRにインストールしている場合も考え方は同じである)
win7-grub2-2.png
ケース(3)
[A]のように fedora(grub2)で Windowsを起動している場合は、[B]のように Windowsで起動する環境に変更しておく。

[A]
win7-grub2-3.png
[B]
Win8の場合はWin8インストールDVD(またはシステム修復ディスク)でPC起動して bootsect.exe /nt60 sys /mbr コマンドで MBRをWin8のbootコードに置き換えておく。
win7-grub2-4.png

2.grub4dosをダウンロードして展開する。
ダウンロードサイト: http://download.gna.org/grub4dos/
ダウンロードファイル: grub4dos-0.4.4-2009-06-20.zip
ファイルを展開して grldr , grldr.mbr , menu.lst の3つのファイルを HDDの partition1にコピーする。

3.menu.lst をメモ帳で開いて ブートメニューを追加する。
ケース(1)およびケース(3)[B]の場合は次のようになる。
※ grub4dosでは partition番号は「0」から始まる。
title Fedora
root (hd0,1)
kernel /boot/grub2/core.img
ケース(2)の場合は次のようになる。
title Fedora
root (hd1,0)
kernel /boot/grub2/core.img

4.Win8のブートマネージャに grub4dos(grldr.mbr)を起動するエントリを追加する。
※ コマンドプロンプトにて bcdedit コマンドで作業する。
※ {GUID} とは新規エントリに自動的に付く識別コード {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} のことである。
bcdedit /create /d "Grub4Dos" /application bootsector
bcdedit /set {GUID} device partition=c:
bcdedit /set {GUID} path \grldr.mbr
bcdedit /displayorder {GUID} /addlast

5.以上で作業終了
起動に関連するファイルは次のようになっている。
win7-grub2-5.png
PC再起動すると Windows起動メニューに「Grub4Dos」が表示されている。
「Grub4Dos」を選択すると「menu.lst」の内容で grub4dosメニューが表示される。
「menu.lst」に追加した「Fedora」を選択すれば「grub2」メニューが表示される。
「grub2」メニューの fedora を選択すれば fedora が起動する。
※ menu.lst および grub.cfg の メニュー項目の default設定 や timeout=0 に設定すれば、grub4dos や grub2 メニューを表示しないようにできる。 

参考
上記「5」のWin8起動の状態を grub2起動に変更するには grub2-install コマンドで MBRを置き換える。
※ すでに grub2環境は存在するので --root-directory=/dev/sda2 の指定は要らない。

作業手順は次のようになる。
※ fedora(grub2)を起動した状態で作業する。

1. 念のため現在のMBRをsaveしておく。
mkdir /sda1
mount /dev/sda1 /sda1
dd if=/dev/sda of=/sda1/w7mbr.img bs=512 count=1
umount /sda1
rmdir /sda1

2. MBRをgrub2に置き換える。
grub2-install /dev/sda
※ Installation finished. No error reported.と表示されれば正常終了。

3. 再起動後にはgrub2で起動する。
※ Windows7のメニューエントリは自動的に作成されている。

end of list