MacBook で USB から Linux を起動する

ちょっと古い( MacBook2,1 )MacBook で、USB メモリから Linux を起動する方法についてのメモ

(追加) Fedora カーネルと MacBook のインテルビデオチップ

カーネルが i915 を検出していて(スペックでは Intel GMA 950 搭載機、のはず)、起動時に画面がまたたいた後ブラックアウトする場合、カーネルオプションに video=SVIDEO-1:d と追加する。i915.modeset=0 を追加して KMS を disable してもよいが、X が起動できなくなる。

(追加) Fedora での GRUB2 と GRUB2 EFI

Fedora 16 以降では EFI 用の GRUB2 は grub2-efi というパッケージに分離されている。grub.efi ファイルは最初からバイナリが rpm パッケージに入ってるので、それを使うのが無難であるようである。/boot/efi/EFI/redhat/grub2-efi というディレクトリにインストールされるが /boot/efi に EFI 用のパーティションをマウントしていたとしても /EFI/redhat/grub2-efi という深いディレクトリは、ブートマネージャによっては認識しないので、/EFI/grub というディレクトリを手動で作って手動でコピーするのが良いようである。バージョン 2.0-0.37.beta6 では /EFI/fedora/grubia32.efi にインストールされる。

コンフィグファイルは /EFI/redhat/grub2-efi/grub.cfg に置く必要がある( /etc/grub2-efi.cfg がシンボリックリンクで、そのリンク先)。バージョン 2.0-0.37.beta6 では /EFI/fedora/grub.cfg 。以下の記述についても更新が必要だがとりあえず打ち消し線のみ。コンフィグファイルの生成は grub2-efi-mkconfig というスクリプトの実行で良いはずだが、grub2-probe や grub2-mkrelpath というスクリプトを実行しようとして失敗する( -efi ではないほうの grub2 をインストールすればそういった名前のスクリプトが入るが、grub2-efi-probe や grub2-efi-mkrelpath が実行されるべき、というようにも思える)。また出力結果を規定の場所において GRUB2 を実行してみても、いくつか調整が必要なようである。まだベータ版だからか。

(追加) Live Fedora の起動について

古い Mac はファームウェアが 64 ビットに対応していないので、32 ビット版を使う。

Live Fedora 17 をブートさせると https://bugzilla.redhat.com/show_bug.cgi?id=827654 の現象で、まともに画面が出ない。

Live Fedora 16 のディスクイメージを USB メモリに書き込んで起動すると、MacBook の起動ファームウェアが刺さる。なんとかして起動してもやはり F17 と同じ症状。

Live Fedora 15 では、なにもせず EFI から起動すると、ビデオ BIOS のチェックでひっかかって、initramfs の段階でシングルユーザーモードの sh に落ちる。

カーネル引数から rhgb を削るか、EFI から起動せず、BIOS 互換モードからの起動で CD (DVD) を起動すれば、ちゃんと起動する。

(時々 ( 3 回に 1 回ぐらい?) 起動しようとしてブラックアウトすることがある(他のシステムでも)。← おそらく上に書いた i915 の問題)

Live Fedora ではインストール先のパーティションのフォーマットが ext4 であることを強制されるので(どうも Live 版のイメージから直接 dump/undump してインストールしているらしい)、/boot だけ別に切って ext2 でフォーマットする。/boot には余裕を見て 1G 程確保した。

Fedora 15 では、GRUB (GRUB1) のパッケージに EFI も入っているが、インストールしただけではコンフィグはされないので、インストール後の起動時に、GRUB からカーネルと initrd を指定して起動するコマンドは自分で入力する必要がある。

http://fedorasolved.org/Members/jmontleon/installing-fedora-16-on-macbooks-using-grub2-efi/ これも参考になるかも。

MacBook で USB メモリから Mac OS X 以外の OS を起動する方法

Mac のブートについて

(最近の) Mac は、GPT によるパーティションと EFI によるブートを採用している。

システム環境設定の「起動ディスク」には、Mac OS を起動できると認識されたボリュームか、BIOS 互換方式で起動可能な内蔵デバイス(内蔵 SATA のパーティションか、光学ディスク)しか表示されないようである。BIOS 互換方式で起動するディスクは「Windows」と表示される。

起動時に alt キーを押し続けた時のセレクタからは、以上に加えて、HFS+ でフォーマットされ、EFI の起動プログラム(パス名 /EFI/*/*.efi の PE 実行ファイル)が存在するパーティションが表示される。

USB メモリから Mac OS 以外の OS を起動するには、まずこの EFI 起動プログラムが必要である。ブートマネージャとして、以下の 2 つがある。(目的の OS が Linux であれば、後述の GRUB2 の EFI プログラムを直接起動することも可能と思われるが、試していない)

rEFIt のほうが古くからあるが、最近はアップデートされていない。rEFInd は新しく、日本語の情報もほとんどないが、最近でもメンテナンスされている。

このどちらかを経由して、任意の EFI 対応の OS を起動できる。(内蔵 SATA だけは BIOS 互換の起動もできる。内蔵光学ディスクや USB からの BIOS 互換の起動には失敗する( Mac のファームウェアの制限らしい))。

また、古い MacBook などは、EFI のファームウェアが 32 ビットで、64 ビットに対応させるファームウェアアップデートなどもないので、(64 ビット CPU でも)32 ビットの OS しか起動できない。この制限は、Mac OS カーネルを 64 ビットで起動できない機種、の制限と同じものである。

その他、詳細は Myths and Facts About Intel Macs http://refit.sourceforge.net/myths/ にいろいろ書いてある。

rEFInd のセットアップ

Mac OS で、まっさらなストレージデバイスをパーティショニングすると、GPT でパーティションが作られるが、先頭に、200MiB(きっちり 200 メビバイト == 209715200 バイト)の、EFI システムパーティション( ESP )が作られる。(前は 100 MiB だった?)

ESP は通常、隠しパーティション扱いで、GUI ツールからは見えない。

EFI ではこのパーティションは FAT FS でフォーマットし、ブート用のプログラムを置くことになっているが、Mac OS では通常この領域は使わない。

内蔵デバイスではここに rEFInd を置いて使うこともできるが、Mac のファームウェアアップデートでここを使うため、アップデート後に rEFInd を置き直す必要がある。

外付けデバイスではただの無駄なので、ここを HFS+ でフォーマットして、rEFInd を置いて、外付けデバイスからの起動に使うことにする。

パーティション内のフォーマットは、Mac OS から newfs_hfs で行える。GUID パーティションテーブルの ID の書き換えを Mac OS から行う方法はわからなかったので、FreeBSD から gdisk (ports の sysutils にある ) というツールで行った。

以上が終わると、普通に Mac OS のボリュームとして見えるようになるので http://www.rodsbooks.com/refind/installing.html#osx の指示にあるようにインストールする。

以上で、外付けデバイスから rEFInd を起動して、起動する OS が選択できるようになる。

Linux のインストール

Linux のディストリビューションの DVD などから、Linux をインストールする。

この際の注意点を挙げる。

Linux のブートに必要なセットアップ

基本的にはインストーラがやってくれるが、たぶん調整が必要。特に GRUB2 EFI は、今のところマニュアルで設定したもので運用中。まだ実験中。

GRUB2 EFI

GRUB2 ではなく ELILO でもロードまではできるが、私の MacBook の EFI では起動に失敗する。GRUB2 の EFI を使うのが良い。

GRUB2 EFI の設定は、以下を参考に。( Fedora の GRUB や GRUB2 EFI (Fedora 16 以降) はこれらの対策が既に入っているらしく、インストールされたままの状態で動いた)

特に、ビデオモードの問題( ELILO で失敗するのもこれが原因と思われる。なお ELILO は過去に改造版が作られて Mac で起動できていたようだが、現在配布されている ELILO には反映されていない模様)があるので、次の記述 https://wiki.archlinux.org/index.php/GRUB2#Correct_GRUB2_No_Suitable_Mode_Found_Error に従い GRUB2 にビデオドライバ(?)を読み込むこと。

なお、SuSE では 32 ビット版の efibootmgr のバイナリが提供されていない。ソース RPM からのビルドもできない( SuSE では IA-64 か x86-64 でしかビルドできない)。efibootmgr が無いと、grub2-efi-install の実行は失敗する。SuSE では IA32 での EFI の使用はサポート外扱い?