(2009-3-13記述)当サイト内でよく読まれているgrub関係の記事はこれとかこれとかこれあたりです。しかし最近、Googleでgrubについて検索すると、先の3箇所ではなくて、このページに誘導されることが多いようです。このページのタイトルにgrubを付けてしまったのでGoogleが誤解してしまったようです。このページは当サイト内でも最も重要度の低い部類のページです。さっさと他のページに移った方がいいんじゃないかと思います。
日本に数人くらいはNTFSのpbrに、grubのstage1を改造して、インストールしようと試みた人がいるかもしれません。成功した人がいるかどうは知りませんが、それが実現した場合と実質的に同じことが少し別の工夫を使って実際に可能です。
とはいっても、以前からこんなことに興味を持っていた人は既に知っていると思います。
私自身でもここに記述する意味がさほど大きいとは思えないのですが、こことここでマルチブートに関するニッチな情報を取り上げてきた身としては、もうワンピース、ニッチな情報を加えたいと思い、このページを追加することにしました。
但し、最初に断っておきますが、この方法は、環境が下に記す条件を満たす場合のみに採用することを推奨します。
理由は、私が常日頃「各OSのブート環境が独立しない」のは良くない(特にマルチブート構成の柔軟な改変が必要な場合)と書いていることに関連があります。
下に記した構成と同等であれば「各OSのブート環境が独立する」ので、いつもの私の主張に反しません。
まあそもそもこの方法は、このページに納得される方くらいしか実践しないとも思いますが...
この方法はこんな構成での適用を推奨
- MBRには一段階目のブートローダとして MBM(もしくは同等のもの) をインストールしている
- (マルチブート構成の)全OSは各ルートパーティションのPBRのブートローダを呼び出せば起動する状態にしている
- リモート環境からブートするOSを切り替える、もしくはOS稼動中にデフォルト起動OSを切り替える、必要がある
最初の2つを満たすと、このページで説明している「全OSを二段階ブートに統一した状態」となります。
このページの手法は既に2段階ブートに統一されている状態に"もう一段階"加えて3段階ブートにする場合に適している方法だということなのです。
実は2段階ブートと3段階ブートや4段階ブートは技術的にはほぼ同じです。単純に数珠繋ぎに呼び出されるブートローダの数が違うだけの違いです。
ここで紹介する手法によって、普段はNTFS専用ドライブにインストールされたgrubで起動OSを決定する3段階ブートで運用し、時には、ブート時にMBRにインストールされたMBM(等)のインターフェースを用いて手動で起動OSを決定する2段階ブートが使える、という非常な柔軟な構成が得られます。
(普段の)3段階ブートの際はリモートで次回に起動するOSを決定できますし、起動時にパソコンの前にいればその場で起動OSを選択できますし、(3段階中)2段階目のブートローダの構築中もしくはメンテナンス中でもMBRのブートローダがバックアップの役目を果たしますから、そのときは2段階ブートをおこなうことによって全く問題なく全OSがブートできます。
しかし、わざわざ、管理が面倒な、ファイルシステム上に設定ファイルを置くタイプのブートローダを必要もないのに使うべきではないでしょう。このページの手法を含む3段階ブート方式は、1,2番目の条件だけではなく、3番目の条件も満たす場合のみ、採用すべきだと思います。この手法→ リモート環境にあるPCをマルチブートする手法 を適用したい環境は向いていると言えるでしょう。
それから、これを書くと元も子もなくなるんですが、chainload専用のgrubを格納するパーティションが必要であれば、論理領域なんかにFATパーティションを用意すれば普通は済む話なんですよね。MBMなら論理領域もブート出来ますし...。真剣に書けば書くほど、このページの手法にあまり価値を見出せません。そのうえ、実現には先の2条件以外にも次に挙げるような必要条件があります。
この条件を満たす必要がある
- 当該のNTFSのデータ専用ドライブは基本パーティション(でなければならない)
- マルチブートする各OSはNTFSに書き込みが可能(である必要がある)
一つ目についてはデータ専用ドライブを基本パーティションで確保するって普通しないと思います。Windowsのインストーラとかは基本パーティションを一つだけしか確保しようとしないでしょうし、Linuxとかでパーティションを確保する場合も最大で4つまでしか許されない基本パーティションをデータ専用ドライブ(パーティション)に充てたくない人は多いんじゃないかと思います。だから繰り返しになりますが、このページの手法はあまり価値のない情報です。ただしWindows上でマウントされるドライブ数を出来る限り少なくしたいという人にとっては価値があるかもしれません。何故基本パーティションでなければならないかは後に記述します。
2つ目については、最近はLinuxでもNTFSにまともに書き込みがおこなえるようになってきました。ドライバがuserspaceで動いていたりするのでWindows上でのディスクアクセス速度に比べて明らかに遅いですが、4Gバイト以上のファイルを作成できるメリットは大きいので、私自身はLinuxとWindowsのどちらも頻繁に使用するマルチブート構成のPCでは必ず共用のパーティションとしてNTFSを利用するようになってきました。
具体的な作業
データ専用ドライブのようにOSのシステムが入っていないドライブは、リストアやOSの入れ替え時に削除される危険が少なく、ファイルシステム上に設定ファイルを置くタイプのchainload専用のブートローダをインストールするには向いています。とはいっても論理領域に設けたFATパーティションほどには向いていないのも確かです。
ともかく具体的な作業を見ていきましょう。
作業は全てWindows上でおこないます。
1.ntldr,boot.iniのコピー
C:ドライブから当該のドライブにntldrとboot.iniをコピーします。
ここでntldrを単にコピーするだけで済むのはNTFSの特殊な仕様のお陰です。
以降、当該のドライブはF:だと仮定します。
2.boot.iniの編集
もちろんF:ドライブのboot.iniですよ
[boot loader] timeout=30 default=C:\hoge\stage1 [operating systems] C:\hoge\stage1="GRUB"
こんな感じに編集します。Windowsを記述した行を削除してしまって、全5行にするといういうことです。カスタマイズすべきなのはhogeの部分だけです。当該ドライブ(作業時のF:ドライブ)が第1~4のどのパーティションであっても、このboot.iniのC:の部分はC:でなければなりません。
このファイルは隠し属性とシステム属性が付いていないといけないの"かも"しれませんが、リードオンリー属性は必須ではありませんので、私はいつも書き込み可のままです。
3.NTFS対応のgrubをダウンロードする
NTFS上でインストールできるgrubをダウンロードします。
中身をF:\hogeの中に解凍します。
4.NTFS対応のgrubをインストールする
こんな感じのバッチファイルをhoge内で作成して実行したらいいと思います。
grubinstall -d F: -1 F:\hoge\stage1 -2 F:\hoge\stage2 -m /hoge/menu.lst pause
F:とhogeとmenu.lstがカストマイズ対象です。lstという拡張子がまずい人はmenu.txtにでもすればいいでしょう。
実際に作業をする人には殆ど説明不要でしょうが、このNTFS対応のgrubは、NTFSのpbrにgrubのstage1をインストールする代わりに、中間にntldrを介することで結果的に「NTFSのPBRを呼び出したらgrubが起動した」という状況を実現するものです。このようにWindowsのブートの仕組みを一部拝借するので当該ドライブは基本パーティションでなくてはならないわけです。
5.menu.lst(grubの設定ファイル)を用意する
このようなものを用意します。もちろんファイル名は4に合わせます。
default=1 timeout=1 title Windows XP root (hd0,0) makeactive chainloader +1 title Linux root (hd0,2) chainloader +1 title Ubuntu Live root (hd0,3) kernel /UBUNTU/vmlinuz iso-scan/filename=/UBUNTU/ubuntu-ja-X.XX-desktop-i386.iso (前の行の続き) file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash (前の行の続き) tz=Asia/Tokyo utc=no -- (前の行の続き) initrd /UBUNTU/initrd.gz
3番目のセクションはデータ専用パーティションに常備しておくレスキュー・バックアップ・リストア用のOne CD Linuxです。ここの後ろの方に追加の説明があります。※このセクションのように当該セクションのrootパーティションとgrubをインストールしたパーティションが同一の場合、通常のgrubであればroot指定が省略できるのですが、本ページのgrubは特殊なgrubなのでroot指定を省略できません。
ここまでの作業後、ブート時にMBRのブートローダで当該のデータ専用パーティションを選択すればいいわけです。