今回、一部OSのLive版、もしくはその機能をも備わったものも含みますが、CentOS/Fedora/Debian/Ubuntu/FreeBSD/NetBSD/OpenBSDのインストーラ/アップデータ、更にClonezilla/GPartedといったツールをUSBメモリ上でマルチブートさせるにあたりGRUB2を使うこと、また、GRUB2専用のパーティションを用意することにしました。
前のページで述べたようにパーティションをMBRではなくGPTでフォーマットする場合には、Linuxでは、gdiskやpartedコマンド、または、GUIツールGPartedなどを使用します。([追記:2016/10/02]LinuxのfdiskはGPTに未対応だったように思いますが、ディストロによるのか、Debian Jessieでは機能しているように見えるので近年、対応している模様、*BSD、例えば、NetBSDのfdiskコマンドはGPTに対応していない為、gptコマンド、マウントする場合などは、付随してdkctlコマンドを使います。)
ちなみに今回の検証では、最も手軽でわかりやすいGPartedを使いました。
尚、USBメモリにブートローダをインストールしておけば、USBメモリ自体におけるLive版OSやインストーラ・アップデータのマルチブートのみならず、何らかの事情でHDD上のブートローダが機能しなくなった場合などにも重宝します。
USBメモリが割り当てられたシステム上のデバイスを確認するには、Linux/*BSDなら[ dmesg | less ]ほか[dmesg]コマンドで、また、Linuxなら[blkid]コマンドでも確認することができます。
[blkid]コマンドは、例えば、[sudo blkid]などroot権限でのみ実行可能です。
GRUB2をUSBメモリの先頭にインストールするには、[grub2-install](ディストロによってはGRUB2でも[grub-install])を実行します。
USBメモリのデバイスが/dev/sdfの場合はこのようになり、[ Installation finished. No error reported. ]と表示されれば、成功です。
USBメモリ自体の先頭ではなく、特定のパーティションにGRUB2をインストールするには、[--force]オプションと[--boot-directory]オプション付きで後者にマウントポイントを設定、最後にUSBメモリのデバイスを指定して実行します。
よってUSBメモリに割り当てられたデバイスが/dev/sdf、GRUB2をインストールしたいパーティションが/dev/sdf2、そのマウントポイントが/mnt/usbでブートディレクトリが、その直下のbootディレクトリの場合は、次のようになります。
GRUB2の[--boot-directory]オプションは、GRUB2はデフォルトでは[/boot/grub]([/boot/grub2])を、つまり、そこにある[grub.cfg]を参照しますが、これを変更したい場合に使うものとされています。
特定のディレクトリにGRUB2をインストールした場合、数行に渡ってWarningが出力されるかもしれませんが、最終的に[ Installation finished. No error reported. ]と表示されれば、成功です。
ただ、結局、その後、[sudo grub2-install /dev/sdf]も実行しておかないと動かなかった気が。。。
但し、環境によっては、[--force]オプション付きで実行しても特定パーティションへのインストールができないケースもあるようです。
その場合は、他のUSBメモリを試してみるしかないでしょう。
尚、誤用ではありますが、GRUB Legacyのオプションである[--root-directory]オプションをGRUB2で使っている例がインターネット上にあったりして、これでもうまくいったような気がしなくもありません。
ただ、GRUB2の仕様上、[--root-directory]オプションは存在しない一方、より明確にマルチブートを想定したオプションとして[--boot-directory]と[--force]オプションが用意されています。
以下参考までにGRUB LegacyとGRUB2の関連ヶ所の原文の抜粋と訳及びその解釈を掲載しておきます。
GRUB Legacy(GNU GRUB Manual 0.97)の『16 Invoking grub-install/grub-installの実行』には、以下の一文と例が掲載されています。
Install GRUB images under the directory dir instead of the root directory. This option is useful when you want to install GRUB into a separate partition or a removable disk. Here is an example in which you have a separate boot partition which is mounted on /boot:
grub-install --root-directory=/boot hd0
これは、
--root-directory=dir
ルートディレクトリの代わりにディレクトリ[dir]の直下にGRUBイメージをインストール。このオプションは、分割した任意のパーティションやリムーバブルディスクにGRUBをインストールしたい場合に便利です。ここにあるのは、[/boot]上にマウントされる任意の分割済みパーティションがある場合の例です。
grub-install --root-directory=/boot hd0
という意味でしょう。
例が紛らわしいですが、よく読むとここでいう[/boot]というのは任意のマウントポイントの例であり、ルート直下のbootディレクトリという意味ではないことがわかります。
また、『分割した任意のパーティションやリムーバブルディスクにGRUBをインストールするのに便利なオプション』ということなのでマウントポイント[/boot]には、[/dev/sdb]や[/dev/hdc]、更にはその下のディレクトリを[mount]してもよいと解釈して良いでしょう。
また、同じくGRUB用のデフォルトのブートエントリを設定するプログラムについて書かれた『19 Invoking grub-set-default/grub-set-defaultの実行』の中にも同じオプションがあります。
Use the directory dir instead of the root directory (i.e. /) to define the location of the default file. This is useful when you mount a disk which is used for another system.
これは、
--root-directory=dir
デフォルトファイルの場所を定義する為にルートディレクトリ(例 / )の代わりにディレクトリ[dir]を使用。これは、他のシステム用に使われるディスクをマウントする際に便利です。
という意味でしょう。
ここでは、「他のシステム用に使われるディスクをマウントする場合」が想定されているので、やはり、[grub-install]に関しても[--root-directory]オプションについては、他のパーティションにインストールすることも想定されていると解釈して良いでしょう。
一方、GRUB2(GNU GRUB Manual 2.00)の『3.1 Installing GRUB using grub-install/grub-installを使ったGRUBのインストール』には、[--boot-directory]についてGRUB Legacyの[--root-directory]と同じ説明がなされ、追加でUSBドライブを上手く認識できないBIOS向けの説明もなされています。
また、同じく『5.3 Multi-boot manual config/マルチブートの手作業による構成』には、
とあり、これは、
--root-directory=dir
現在、マルチブートにおいて自動生成される一連の構成ファイルは、[os-prober]に依存し、いくつかの短所が存在します。
これらは、次回のリリースで改善されるべくスケジュールに入っていますが、その間、GRUBの機能を使って利用者自身が、自分で作成することはできます。
使用可能な構成は、ここで詳述しますので自身の必要に応じて自由にやってみて下さい。
まずは、GRUBを保持するに足る十分な大きさのGRUBパーティションを分割、作成します。
次に挙げるいくつかのエントリは、同一のパーティションからOSのインストーライメージを読み込む方法について示しますが、当然ながら、それらのイメージ全てを保持するに十分なパーティションを作成する必要があることは言うまでもありません。
[/mnt/boot]上にこのパーティションをマウントし、全てのOS(のインストーライメージ)にあるGRUBを無効にし、次のコマンドを使ってセルフコンパイルした最新のGRUBを手動でインストールします。
grub-install --boot-directory=/mnt/boot /dev/sda
全てのOSについてGRUBツールをインストールしますが、ブートセクタにインストール済みのGRUBだけは無効にすることで[menu.lst]や[grub.cfg]を使うことができるようになるでしょう。
また、以下の設定をすることによって[os-prober]を無効にします。
GRUB_DISABLE_OS_PROBER=true
という意味でしょう。
この後にWindowsやFreeBSDなどの設定方法が記されています。
また、[--force]オプションとの兼ね合いについては、[info grub2]や[info grub2-install]にも先の「問題のあるBIOSにおける対策」としての[grub-install/grub2-install]との併用例はあるものの、もう少し補足が欲しいところ。。。というわけで[grub2-install -h]でヘルプを表示すると
とあり、これは、
という意味でしょうから「強制」の為のオプションであり、しかも「インストール」時に使われるという意味と解釈してよいでしょう。
こうしたことからもGRUB2では、明白にマルチブートが想定されていますし、『28 Invoking grub-install/grub-isntallを実行する』にも例示されていますが、[--boot-directory]オプションで他のパーティションやその階層下をマウントして指定することも当然ながら想定済みであることから特定のパーティションへのGRUB2のインストールも想定されており、更に何か問題があった場合でもインストールする為にある[--force]オプションは、[grub-install/grub2-install]との併用もアリと解釈して良いでしょう。
それに(次回改訂されて改善される予定だけど今は例を参考にしつつ)「 feel free to adjust to your needs/自身の必要に応じて自由にやってみて」(できればできるってことだし、できなきゃできないってことだから。。。)とありますしね。