昨日(id:NeoCat:20080420) rEFItを使って構築したトリプルブート環境(Boot Camp)用のLinuxを、Parallelsから起動できるようにする方法を考えてみました。
Parallels内蔵のBIOSがHDDをうまく読めないため(?)、CD-ROMイメージを使ったhackが必要なようです。
以下の説明の前提として、ここではFedora 8 i386版を、3番目のext3フォーマットのパーティションに入れているものとします(←間違ってx86_64版を入れてしまったので再インストールした…)。なお、3番目とはMacからみると /dev/disk0s3 、Linuxからみると /dev/sda3 に見えることを意味します。
パーティションの設定
普通に考えると/dev/sda3には既にGRUBが入っているのだから、Parallelsにパーティションさえ設定すれば起動しそうに思えますが、Parallelsが提供している仮想BIOSはLinuxのHDDから起動することができないようです。
とりあえず、パーティションを設定するにはこちらのサイトを参考に、次のように設定します。
まず、適当にLinux起動用のVMをParallels上に作ります。その後、編集メニューの「仮想マシン」で、HDDの設定をBoot Campに設定し、いったんParallesを閉じます。
すると ~/Documents/Parallels/VM名/VM名.pvs に設定ファイルができますので、これをテキストエディタで開いて編集します。
Disk 0:0 image = Boot Camp
という部分を探し、これを
Disk 0:0 image = Boot Camp;disk0s3
に書き換えます。
しかしこれだけでは、残念ながら「OSが入っていない」というエラーになったり、GRUBを起動しようとした際にハングアップしてしまうようです。惜しい。
どうやらHDD内のGRUB(stage2)を正しく読めていない雰囲気…。INT13h AH=4x命令に対応してないのかもしれません。
GRUB & カーネル起動用CD-ROMイメージの作成
そこで、仮想CD-ROMイメージにGRUBとカーネルイメージを入れてしまい、そこから起動するという手段をとります。ちょっと強引。
(当初GRUBだけ入れたのですが、それだけだと「Error 18: Selected cylinder exceeds maximum supported by BIOS」と表示されてしまい、起動しませんでした。下図参照)
GRUBのCD-ROM作成作業にはインストールしたカーネルイメージが必要なので、rEFItで直接起動したLinux上で行います。
GRUBのマニュアルのCD-ROM編を参考に、ISOを作成。コマンドはこんな感じ。
$ mkdir iso $ mkdir -p iso/boot/grub $ sudo cp /boot/{vmlinuz-2.6.24.4-64.fc8,initrd-2.6.24.4-64.fc8.img} iso/boot/ $ cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub $ sudo cp /boot/grub/splash.xpm.gz iso/boot/grub $ sudo cp /boot/grub/grub.conf iso/boot/grub $ emacs iso/boot/grub/grub.conf
そして、iso/boot/grub/grub.conf内の (hd0,2) などとなっている部分を (cd) に置き換えてしまいます。また、コピーしていないカーネルの指定は不要なので消しておきましょう。例えばこんな感じ。
# grub.conf - load kernel from CD and boot into HDD default=0 timeout=5 splashimage=(cd)/boot/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.24.4-64.fc8) root (cd) kernel /boot/vmlinuz-2.6.24.4-64.fc8 ro root=LABEL=/ rhgb vga=789 initrd /boot/initrd-2.6.24.4-64.fc8.img
これで、HDDではなく、CDイメージ内のGRUBが、CDにコピーしたカーネルを読み込んでメモリ上に配置した後、initrd内の指示に従ってHDDからブートしてくれます。
最後に、ISOイメージを作ります。
$ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ -boot-load-size 4 -boot-info-table -o grub.iso iso
できたイメージは適当な方法(ネットワークコピーとか)を使ってMacに転送しておきましょう。
作成したCD-ROMイメージからの起動
そして、Macを再起動し、ParallelsのVMの設定を行います。先ほどLinux上で作ったgrub.isoをCD-ROMイメージとして指定します。さらに、オプション>ブートから、CDを優先して起動するように設定しましょう。
この状態でVMを起動すると、作業がうまく行っていれば、CD-ROMイメージからGRUBが立ち上がり、次いでLinuxが起動されます。
なお、このイメージは起動にしか使わないので、起動後は(仮想的に)引っこ抜いても全く問題ありません。
MacBook Proを使っていてFedora8にlivnaなどからnVIDIAドライバを入れている場合、毎回Xの起動がいったんこけてしまいますが、ま、そのへんはご愛嬌。画面の指示に従ってreconfigureすれば、ちゃんと立ち上がります。