英語の説明などはこちら。

grub4dos を利用するための準備

ダウンロード

grub4dos は、単体のファイル grldr もしくは grub.exe で起動できます。

  1. GRUB4DOS and WINGRUB in sourceforge から圧縮されたファイルをダウンロードしてください。

  2. ダウンロードした (ファイル名の最後が zip の) ファイルを展開してください。
  3. 展開した中に grldr と grub.exe があるはずなので、それらをパーティションの直下(ルートディレクトリまたはc:¥など)にコピーしてください。

NTLDR を使っている場合

たとえば、 WindowsXP や 2000 などで NTLDR を使っている場合、

  1. C ドライブの直下(c:\)に grldr をコピー。

  2. c:\boot.ini をテキストエディタ(ノートパッドなど)で開いて、その内容の最後で改行してから
    c:\grldr="grub4dos"

    と追加。

  3. 起動時に F8 キーなどを押して OS 選択画面に移り、「 grub4dos 」を選択すれば起動できます。

Info <!> Windows と Ubuntu などの Linux では、改行コードが異なります。 Ubuntu で起動して C:\boot.ini を編集した場合、 Windows では改行されておらず、半角の「↑」として認識され、問題が生じる場合があります。心配なら、 C:\boot.ini は Windows で編集した方が良いですが、 C:\boot.ini は隠しファイルになっていて、デフォルトでは表示されないかもしれません。そんな場合には こちらのような方法 で編集してください。また、 Windows での半角の「¥」はこのページでは、半角の「\」(バックスラッシュ)と表示される場合があります。ご注意ください。

Bootmgr を使っている場合

Windows 7 や Windows Vista で Bootmgr が使われている場合なら、以下の手順で、 grub4dos を利用するためのメニューを作成できます。

  1. C ドライブの直下(C:\)に grldr と grldr.mbr をコピー。
  2. 「すべてのプログラム」ー「アクセサリ」で「コマンドプロンプト」で右クリックして「管理者として実行」をクリックするなどして、管理者権限のコマンドプロンプトを起動します。
  3. コマンドプロンプトで
    bcdedit /create /d "grub4dos" /application BOOTSECTOR
    すると、
    エントリ {????????-????-????-????-????????????} は正常に作成されました。
    のように(? は英数の 1 文字)表示されるので、右クリックして「範囲を指定」をクリック。{・・・}内の部分をマウスでドラッグして白黒反転表示させて、 ENTER キーを押すと、{・・・}内の部分がクリップボードにコピーされます。 以後、上記の{・・・}の部分をそのまま、{・・・}と記すので、適宜、ご自分の環境で表示された内容に修正して実行して下さい。{・・・}の部分を貼り付けるには、右クリックして「貼り付け」で OK です。
  4. bcdedit /set {・・・} device partition=C:
    で、 C ドライブと認識されているパーティションに grldr.mbr が存在することを設定し、
    bcdedit /set {・・・} path \grldr.mbr
    で grldr.mbr を読み込むように設定。
    bcdedit /displayorder {・・・} /addlast
    で、 Boot Manager での OS 選択画面の選択できるリストの最後に追加します。

これで、起動時に、Boot Managerの「OS選択画面」の最後に「grub4dos」があるはずなので、それを選択すればGrub4dosが起動するはずです。

その他

もちろん、grldrやgrldr.mbrやgrub.exeはNTFSでなく、ext2やext3のパーティションにコピーしておいてgrubなどのカーネルローダーから起動することも可能です。

  • GRUB Legacy からなら、
    kernel /grub.exe
    で呼び出すことができます。
  • GRUB 2 (1.97~beta4-1ubuntu4.1)からなら、
    linux /grub.exe
    でも
    linux16 /grub.exe
    でも、どちらでも呼び出すことができます。

grub4dos での Ubuntu などの Linux の起動

grub4dos は grldr または grub.exe さえ呼び出されれば、パーティションの中から menu.lst を探します。最初に見つかった menu.lst を読み込みますので、 C:\menu.lst に起動用の設定を記しておけば良いでしょう。

もしも grub4dos (grldr または grub.exe) が起動して、 menu.lst が見つからない場合、コマンドラインになります。最後に

grub>

なんて表示されていたら、コマンドラインです。

コマンドラインでは、

root GRUBの認識するパーティションの記号

で起動に使うパーティションを設定します。

GRUBの認識するパーティションの記号 としては (hd0,1) などがあります。この数字の付け方は、 Grub legacy と Grub4dos の場合には、最初の数字は、内蔵 HDD などのメディアの番号であり、最初が 0 です。次の数字は、そのメディアの中でのパーティションの番号であり、最初が 0 です。つまり、 (hd0,1) は第 1 番目のメディアの第 2 番目のパーティションを表します。( Ubuntu では多くの場合、/dev/sda2 のことです。)

カーネルとそれに渡すオプションを

kernel  カーネルのファイル名   カーネルに渡すオプション

で設定し、initramfs を

initrd initramfs のファイル名

で設定すれば、後は、

boot

で起動が試みられます。

menu.lst が読み込まれた場合には、タイトルがリスト表示され、その中から↓↑キーで選択し、 ENTER で起動が試みられます。

menu.lst の内容の書式は

title  適切なタイトル
root GRUBの認識するパーティションの記号
kernel  カーネルのファイル名   カーネルに渡すオプション
initrd initramfsのファイル名

です。

また root の代わりに、パーティションの UUID を設定するには

uuid   パーティションのUUID

と記せば良いです。

find --set-root ファイル名(絶対パス指定)

とすれば、ファイルが存在するパーティションを探し出して、それをrootに設定します。

title PLoP boot manager
find --set-root /plpbt.bin
kernel /plpbt.bin

でどこかのパーティションの直下(ルートディレクトリ、C:\とか)にplpbt.binが存在しさえすれば、PLoP Boot Managerを起動できます。

title  kexec-loader
kernel /vmlinuz
initrd /initrd.img

でC:\にコピーしたkexec-loaderのvmlinuzとinitrd.imgを使ってkexec-loaderを起動できます。find --set-rootで/vmlinuzを含むパーティションを探させても良いですが、/vmlinuzは結構色々と使われていたりするので、混乱の原因になる場合もあります。(見つかった最初のパーティションが用いられますので、期待しているパーティションと違うパーティションの/vmlinuzを使ってしまったりします。)

Ubuntu の場合、通常、その/ディレクトリに、最新のカーネルのシンボリックリンクが /vmlinuz として存在します(存在しない場合もあります※)ので、それを利用すると便利です。また、対応する最新の initramfs へのシンボリックリンクは /initrd.img として存在しますので、それを利用すると便利でしょう。ただし、/ のパーティションと/boot のパーティションが別の場合、/vmlinuz と/inirtd.img というシンボリックリンクは利用できません。Ubuntu のカーネルを起動する場合、通常は、カーネルに渡すオプションとして、 root にマウントすべきパーティションを指定する必要があります。その書式は、

 root=

に続けて、少なくとも以下の 3 パターンがあります。

  1. root=Ubuntu の/ パーティションを表すデバイスファイル名 例: root=/dev/sda5

  2. root=UUID=Ubuntu の/ パーティションの UUID 例: root=UUID=71b10a07-fc31-4c26-80fc-f10fdd3f4b2a

  3. roor=LABEL=Ubuntu の/ パーティションのラベル 例: root=LABEL=ubuntu_root

  • Ubuntu をインストールしたパーティションのデバイスファイル名が /dev/sda5 (つまり、第1番目のメディアの第5番目のパーティション)なら
    title ubuntu on /dev/sda5
    root (hd0,4)
    kernel /vmlinuz root=/dev/sda5 ro
    initrd /initrd.img
    で良いです。
  • Ubuntu をインストールしたパーティションの UUID が 71b10a07-fc31-4c26-80fc-f10fdd3f4b2a なら、
    title ubuntu on UUID=71b10a07-fc31-4c26-80fc-f10fdd3f4b2a
    uuid 71b10a07-fc31-4c26-80fc-f10fdd3f4b2a
    kernel /vmlinuz root=UUID=71b10a07-fc31-4c26-80fc-f10fdd3f4b2a ro
    initrd /initrd.img
    で良いです。
  • Ubuntu で/ になるべきパーティションのデバイスファイル名が/dev/sda5 で、/boot になるべきパーティションのデバイスファイル名が/dev/sda1 で、用いたいカーネルのバージョンが vmlinuz-2.6.31-20-generic なら、
    title ubuntu on /dev/sda5 with /boot on (hd0,0)=/dev/sda1
    root (hd0,0)
    kernel /vmlinuz-2.6.31-20-generic root=/dev/sda5 ro
    initrd /initrd.img-2.6.31-20-generic
    で良いです。

また、 menu.lst によるメニューが表示されている状態で、 E キーを押すと、選択(反転表示)されているものを編集することができるモードになります。 ↑↓キーで編集したい行に移動し、 E キーを押すと、実際に編集できる状態になるので、編集して、 ENTER キーを一度だけ押すと、編集可能モード( kernel などの行が表示されている状態)に戻ります。編集した内容で起動を試みるには、 B キーを押します。Esc キーを押すと、編集した内容が破棄されて、メニューのリスト表示に戻ります。

ただし、パソコン(のBIOS)がUSBメディアからの起動をサポートしていない場合、そもそも、USBメディアの中のUbuntuのインストールされた(したがって、カーネルvmlinuz-・・・やinitramfs:initrd.img-・・・を含む)パーティション内にアクセスできないので、それらをいくら読み込ませようとしても起動できません。そのような場合には、内蔵HDDのどこかのパーティション(例えばWindowsのCドライブ)に、Ubuntuをインストールしたパーティションの中の/boot/vmlinuz-?.?.?-?-genericと/boot/initrd.img-?.?.?-?-genericのうち、?の部分の数字が最新のものをコピーしてください。そして、menu.lstの中身を

title Ubuntu in USB
find --set-root /vmlinuz-?.?.?-?-generic
kernel /vmlinuz-?.?.?-?-generic root=UUID=★ ro
initrd /initrd.img-?.?.?-?-generic

にして、grub4dosのメニューで「Ubuntu in USB」を選べば良いでしょう。もちろん、上記で?の部分には、コピーしたvmlinuzなどの対応する部分の数字を記してください。また、★の部分には、UbuntuをインストールしたパーティションのUUIDを記して下さい。そのUUIDはこちらの方法で分かるでしょう。この方法の場合、カーネルのアップデートがあった場合には、最新のカーネルで起動させるためには、もう一度、最新の/boot/vmlinuz-?.?.?-?-genericと/boot/initrd.img-?.?.?-?-genericを内蔵HDDのパーティションにコピーし、menu.lstにその情報を書き込む必要があります。

grub4dos (のうち、grldr を読み出す機能を持った部分)を MBR にインストールするには

/dev/sda(Ubuntu の場合、内蔵第一ハードディスクであることが多いです)の MBR に grub4dos (のうち、 grldr を読み出す機能を持った部分)をインストールするなら、 Ubuntu の端末で bootlace.com の存在するディレクトリに移動し、

sudo ./bootlace.com /dev/sda

でOKです。

参考:Grub4dos tutorial:Install GRUB for DOS boot code to MBR

Warning /!\ ただし、これを行うとMBRから続くセクタがgrub4dosのgrldrを探すプログラムによって上書きされて、MBRから続くセクタに元々含まれている情報がなくなってしまいます。メーカー製のパソコン(たとえばWindowsがプリインストールされている場合)では、特殊なMBRや特殊なユーティリティがMBRから続くセクタに書き込まれている場合もあるようなので、注意してください。

心配なら、grub4dosをMBRにインストールする前に、
Ubuntu Tips/インストール/インストール後のトラブル発生時のために、あらかじめインストール前のMBRやPBRをバックアップするには
の方法で、MBRから続く63セクタのバックアップをファイルとして保存しておくと良いかもしれません。(ただし、バックアップしたファイルからMBRへの書き戻しを行いたい場合には、実行する前に、十分にMBRの構造とddコマンドのオプションを理解してください。自信がなければ、自分では実行せずに、まず、Ubuntuフォーラムで具体的に何をしたのか、何がしたいのかを明記して返事を待った方が良いです。)

grub4dosがフリーズする場合の対策方法

BIOSが大容量USBメディアなどに対応していない場合、Grub4dosがフリーズする場合があるようです。この場合、grub4dosのメニューが現れるまで、USBメディアを接続せず、メニューが現れたら、接続し、その後、適切なメニューを選択するとうまくUbuntuを起動できるかもしれません。

謝辞

このページの情報を作成するにあたり、 「 grub4dos がフリーズする場合の対策方法」については、 sai-sta さんの対策方法 を参考にしました。 また、以上の方法は、 grub4dos や PLoP Boot Manager, kexec-loader, kexec-tools, Ubuntu の開発者の方のご尽力があったからこそ実現できるものです。

この場をお借りして御礼申し上げます。

注釈

※ /vmlinuzと/initrd.imgが利用できない場合:
1)/bootのパーティションと/のパーティションが異なっている場合
2)最新のカーネルを削除した場合

UbuntuJapaneseWiki: UbuntuTips/UsbInstall/BootUbuntuInUsbWithBiosWithoutSupportForUsb/Grub4dos (最終更新日時 2012-01-10 11:49:04 更新者 匿名)