2011-05-03

WindowsのブートローダーでLinuxとデュアルブートする方法 - Ubuntu 11.04/12.04/12.10, Grub2の場合

Ubuntu 11.04/12.04/12.10はAppMenu (Global Menu) を採用し、よりMacに近い先進的なユーザインターフェースになりました。
インストーラもデュアルブート派(マルチブート派)により優しくなりました。
以前の投稿と同じく、Windowsのブートローダ(ntldr)でUbuntuとマルチブートするためのインストール手順を記します。

Windows 8/7/Vista/XPのブートローダで、Ubuntu Linux 11.04~12.10をデュアルブートする方法:
  1. Windowsを新規インストール、またはインストール済みのWindowsのパーティションを分けてUbuntuをインストールするエリアを作成します。
    ここでは3つのパーティション、つまりWindows用のNTFS、Ubuntu用の空きパーティション、共有用のFAT32を作成するものとします。
    容量は私の場合は80GBを40GB、20GB、10GBに分けました(テストマシンなので少なめ)。
    8/7/VistaではWindowsの管理ツールでパーティションの縮小、分割が簡単にできます。
  2. 次に、Ubuntuを真ん中のパーティションにインストールします。
    1. UbuntuのCDまたはUSBから起動し、最初のメニューで [Ubuntuを試す] を選びます。
    2. 起動後、必要であれば、
      無線LANなどネットワーク環境の設定を行います(必須ではない、インストール後じっくりやる方がよいかも)。
      また、Gpartedツール(システムメニューでgpartedと入力して検索、起動する)でパーティションの状態を確認することができます。必要であれば、過去にインストールしたUbuntuのパーティション(ブートローダ、本体、スワップ)を削除します(結果、ひとつの空き領域にします)。
    3. デスクトップにある [Install Ubuntu 11.04] を起動します。
      1. [言語の選択] で好きな言語(日本語)を選びます。
      2. [ディスク領域の割り当て] で [それ以外] を選びます
        (デフォルトの [UbuntuをWindows 7とは別にインストール] を選んでしまうと全自動インストールが走りブートローダが上書きされてしまうので、注意)。
      3. まず、スワップパーティションを作成します
        (スワップパーティションはなくてもLinuxは問題なく起動しますが、作成するのが一般的です)。
        表示されるパーティション一覧から、[空き領域] を選んで、[追加] を押します。サイズは4GB程度(Linuxサーバでは物理メモリの3倍程度と言っていましたが、昔話となりました)、場所は [後ろ]、マウントポイントは [swap] を選んで [OK] を押します。
      4. 次に、Ubuntu本体をインストールするパーティションを作成します。
        表示されるパーティション一覧から、[空き領域] を選んで、[追加] を押します。
        サイズはそのまま(全て)、マウントポイントは [/] を選んで [OK] を押します。
      5. ここで、[/] に設定したパーティションの名前を記録しておきます。
        私の場合は sda7 になりました(以前紹介した手順に比べて作成するパーティションがひとつ少なくすんでいます)。
      6. [Device for boot loader installation:] に先に記録したパーティション(私の場合sda7)を指定します。
        この手順を忘れる・間違うとWindowsのブートローダが上書きされるので、特に注意してください。
      7. [インストール] を押して、インストールを開始します。
  3. 再起動後、Ubuntuは起動しないので、今まで通りWindowで起動します。
  4. WindowsのブートローダからLinuxを起動するためのツールとしてgrub4dosを使用します(以下、設定済みの場合は4、5、6はスキップしてかまいません)。
    grldrとgrldr.mbrを c:\ に(Cドライブの直下に)コピーします。
  5. Linuxを起動するためのメニューを作成します。
    以下の内容で C:\ に menu.lst という名前のテキストファイルを作成します。
    2行目 hd0,6 の2番目の数字は、Ubuntu本体のパーティション番号マイナス1の数字です。
    sda7の場合は hd0,6 とします。
    title    Linux
    root (hd0,6)
    kernel /boot/grub/core.img
    
    ※ Ubuntu 12.10の場合は以下の内容とします。
    title    Linux
    root (hd0,6)
    kernel /boot/grub/i386-pc/core.img
  6. WindowsのブートメニューにUbuntuを追加します。
    Windows 7/Vistaの場合、管理者モードのDOS窓を開き、次のコマンドを実行します。
    2行目以降の {xxxx} は、1行目の実行結果で表示されるidを指定します。
    追加後、引数なしのbcdeditで「リアルモードブートセクター」のところに表示されることを確認します。
    bcdedit /create /d "Linux" /application bootsector
    bcdedit /set {xxxx} device partition=C:
    bcdedit /set {xxxx} path \grldr.mbr
    bcdedit /displayorder {xxxx} /addlast
    Windows XPの場合は、テキストエディタでC:\ にあるboot.iniに下記を追加します(システムファイル、隠しファイルになっている場合は解除してから)。
    C:\grldr="Linux"
  7. リブートして確認します。
    WindowsのブートメニューにLinuxの項目が追加されているはずです。
    Ubuntuを起動するときは、WindowsのブートメニューでLinuxを選んだ後、さらにLinuxを選び、次に表示されるUbuntuのブートローダーで一番上を選びます。
Linuxのブートローダ (Grub2) に比べてWindowsのブートローダ (ntldr) は融通が利かないので、安全のためWindows主体のブート方法をとりました。
こうすることで、Windowsを再インストールしたり、バージョンアップしたり、Linuxを入れ替える場合にも、ブートローダの上書きを気にせず安心して作業できます。

なお、Windowsのgrub4dosはgrubのバージョン1なので、(標準のインストール状態の)Ubuntu 11.04を直接ブートできません。
WindowsのgrubからUbuntuのgrub2をロードし、そこからUbuntuをブートしています(チェインロード)。

以前の投稿:

(Ubuntu 10.10/11.10はスキップしてしまいました。)

[2012-06-17] Ubuntu 12.04で確認しました。手順はほとんど同じで、ディスク領域を割り当てる2-3-3〜2-3-6までが一つの画面でできるように改良されています。
[2012-12-31] Ubuntu 12.10での手順を追加しました。コメントでの情報ありがとうございます、活用させていただきます。
[2013-02-23] Windows 8でもWindows 7と同様に設定できるとの情報をReatさんからもいただきました。ありがとうございます。

24 comments:

  1. Boot時にXPとLinuxは表示されるのですが、Linuxを選択すると何も実行されずに再度Bootの最初の画面に戻ってしまい、XPとLinuxの選択画面になってしまいます。
    要するに、Linuxが起動できません。。。

    パーティションの中身を確認したのですが、ちゃんとUbuntu11.4がインストールされているのですが、どうしてでしょう?

    ReplyDelete
  2. 自己解決しました。ありがとうございました。

    ReplyDelete
  3. > Boot時にXPとLinuxは表示されるのですが、Linuxを選択すると何も実行されずに再度Bootの最初の画面に戻ってしまい

    menu.lst のパーティション番号が違っていたのでしょうか。
    すでに解決されたとのことですが、どう直されたのか教えていただけませんか?

    ReplyDelete
  4. 選択画面は表示されるのですが、Linuxを選択すると

     Windowsを開始できませんでした。最近のハードウェアまたはソフトウェアの変更
     が原因の可能性があります。問題を修正するには次の方法があります:
     
     1. Windowsインストールディスク~
     2. 言語の設定を~
     3. [コンピュータの修復]~

     状態: 0xc000000f
    情報: 要求されたデバイスにアクセスできないため、ブートの選択でエラーが発生しました。

    となり、Ubuntuを起動できません。
    Windows7は普通に起動できます。

    アドバイスをいただけると幸いです。

    ReplyDelete
  5. 匿名希望さんへ、
    C:ドライブにgrldrとgrldr.mbrはちゃんとコピーされていますか?
    bcdeditで見て、設定内容でタイプミスはないですか?

    ReplyDelete
  6. ありがとうございます。
    コピーは問題ありません。

    リアル モード ブート セクター
    --------------------------------
    identifier {****(略)}
    device partition=C:
    path \grld.mbr
    description Linux

    bcdeditのミスもないと思います。

    ReplyDelete
  7. × grld
    ○ grldr

    ReplyDelete
  8. こんにちは!こちらのホームページを参考にwindowsのブートローダーでマルチブート環境を構築しております。複数のパソコンに同様の措置を施しています。

    もしよろしければ教えて頂きたいのですが、たまに、windowsのブートローダーでLinuxを選択しても起動しなくなることがあり、おそらくGrubを修復すれば良いと思うのですが、色々検索しても適当な解説に行き当たりません。その場合、linuxを再インストールしています。おおむねlinux導入後の初期設定で色々いじっているときに生じるので再インストールで済ませていますが、今後安定稼働してから同様の事態が生じた場合に再インストールするのは嫌だなと思っております。

    http://wikiwiki.jp/disklessfun/?multiplebootは参考になると思うのですが、正直難しすぎるのと文章が読みにくくて何度読み直しても理解できません。

    もしよろしければよろしくご教授お願いします。

    ReplyDelete
  9. Kuboさん、コメントありがとうございます。
    最初からブートしないのならLinuxブートローダーのインストール先のずれかと思いましたが、ブート後の設定でおかしくなるのなら、その作業の中で(Linux側あるいはWindows側からパーティションをいじったり)おかしくなったと考えるのが自然だと思います。
    Linuxブートローダーはddコマンドでコピーできると思いますが、おかしくなるのを見越してあらかじめコピーを保存しておくのも難しそうですね。
    Linuxのgrubコマンドのsetupサブコマンドでブートローダーの再セットアップができるようです。
    Live CDで立ち上げてなんとか修復できれば良いのですが。

    ReplyDelete
  10. はじめまして。
    最初のOS選択画面の並び順を変更することは可能なのでしょうか?
    できれば電源押してubuntuが勝手にきどうしてくれるとうれしいのでLinuxを上に持ってきたいのですが・・・

    ReplyDelete
  11. 匿名希望さん、
    コントロールパネルのシステム詳細や、bcdeditで規定値を変更できます。
    手順も必要でしょうか?

    ReplyDelete
  12. 大変、参考にさせていただいています。
    さて、Windows8 + Ubuntu 12.10でやってみました。
    >kernel /boot/grub/core.img
    を、
    kernel /boot/grub/i386-pc/core.img
    に、変更する必要がありましたが、それ以外は問題なくできました。
    参考までに。

    ReplyDelete
  13. 貴重な情報ありがとうございます。
    本文にも反映させていただきたいと思います。
    最近時間が取れなくて12.10を試せていません。
    私もハマったかもしれないところでした。

    ReplyDelete
  14. お世話になります。このページを参考にしてWindows7のブートローダーを使用して、WindowsXPとubuntu12.04のマルチブートを構築しています。
    今回、ubuntuを入れ替えではなく追加で13.04をインストールしたいと考えたのですが、その場合の方法に自信がありません。考え方としては、Windows7のローダ→Linuxのローダー(ここにubuntuを追加する)だと思うのですが、もし、お時間ありましたらご教授頂けると幸いです。
    失礼します。

    ReplyDelete
  15. Kuboさん、パーティションを追加して、トリプルブート(もしかして4重ブート?)したいということでしょうか。
    おっしゃる通り、手順5の menu.lst への追加と、手順6の bcdedit での追加を行えば良いはずです。
    残念ながら私自身はそこまで凝ったマルチブートを実際に試したことはありません。

    ReplyDelete
    Replies
    1. ありがとうございます。早速試してみます。

      Delete
  16. こちらの記事を参考に、外付けHDDへのインストールを試みていますが、menu.lstへの(hd0.6)のところをなんと記述したらよいでしょうか。
    当方の環境では外付けHDDのパーティションは/dev/sdb6となっていました。

    ReplyDelete
    Replies
    1. Iizukaさん、コメントありがとうございます。 sd[b][6] ということは hd1,5 になると思います。あくまで想定ですが、うまくいくといいですね。

      Delete
    2. ありがとうございます。お陰さまでUbuntuのインストール・起動が成功しました。
      現在Ubuntu13.10へのアップグレードをしています。
      本当にありがとうございました、

      Delete
  17. こちらの記事のおかげでかなり進展しました。ありがとうございます!^^
    ただ、インストールしたubuntuが起動しません...。インストールしたのは /dev/sdb7、menu.lst も(hd 1,6)にしました。ただ、Linuxを選択して起動してもブラックスクリーンにエラーメッセージを吐いて起動しません...。どうしてでしょうか...。
    エラー 0xc000007b

    ReplyDelete
    Replies
    1. 匿名希望さん、
      お使いのPCはもしかしてWindows 8用の新しめのものでしょうか?
      Windows 8からは不正?なOSを起動させなくするためのSecure Bootという機能と、BIOSがUEFIという新しいものに変わってしまっています。
      この2つを禁止することでWindows 8とUbuntu Linuxのデュアルブートが可能になると思います。
      参考情報: http://askubuntu.com/questions/221835/installing-ubuntu-on-a-pre-installed-windows-8-64-bit-system-uefi-supported
      絵に従って、[Shift]+Restart し、ブートオプションから [Troubleshoot] => [UEFI Firmware Settings] で設定できると思います。

      Delete
    2. ありがとうございます。やって見ますね!

      Delete
  18. こちらの記事をいつも拝見させていただいています。
    linuxのブートローダーでインストールした後に(windowsのブートローダーを上書きした後に) またwindowsのブートローダーに変更することは可能ですか? また 可能でしたら方法を教えて頂けると幸いです。

    ReplyDelete
    Replies
    1. やってしまいましたか。。。

      Windowsのツールを使う場合は、WindowsのインストールCDから修復モードで起動して、FIXMBR(Windows Vista以降では bootrec /FixMbr )です。 http://support.microsoft.com/kb/927392/en-us

      Linuxのツールを使う場合は、mbrツールがよさそうです。 http://askubuntu.com/questions/183799/fix-windows-mbr-using-ubuntu-live-cd-and-ms-sys-tool

      Delete