読者です 読者をやめる 読者になる 読者になる

Apple EFI でトリプルブート

MacBook Pro Mid 2009 で OS X, Arch Linux, Windows 10 をトリプルブートする覚書. rEFIt, rEFInd は甘え.

参考文献

Arch Linux

パーティション

  • /dev/sda1 (fat32; ESP)
  • /dev/sda2 /boot/efi (optional; hfs+; journaling disabled)
  • /dev/sda3 / (ext4)

ArchWiki では /boot も切っているが, /boot は切らなくてもよい. また, /dev/sda2 (/boot/efi) も必須ではなく, ESP に入れてしまっても良い. ただし, option キーのブートメニューで表示されるラベルを変更したい場合, FS が hfs+ でないといけないので, 分ける必要がある. また, WindowsEFI ブートでインストールする場合, Windowsブートローダも ESP に入るので, やはり分けておいたほうが安全である.

GRUB

今回は Antergos を使った. ブートローダのインストールを無効化して, それ以外は普通にインストールした後, arch-chroot して GRUB をインストールする.

専用パーティションにインストールする場合

# mkdir root
# mount /dev/sda3 root
# arch-chroot root
# pacman -S grub efibootmgr hfsprogs
# mkfs.hfsplus /dev/sda2
# mkdir -p /boot/efi
# mount /dev/sda2 /boot/efi
# mkdir -p /boot/grub
# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
# mv /boot/efi/EFI/arch_grub/System /boot/efi

grub-install でエラーがでるけど, /boot/efi/EFI/arch_grub/System/Library/CoreServices/boot.efi ができていれば問題ない. mkfs.hfsplus でフォーマットしているが, Disk Utility.app でフォーマットする場合, Linuxジャーナリングに対応していないので, あらかじめジャーナリングを無効化しておく必要がある. Disk Utility.app でジャーナリングを無効化するには, option キーを押しながらファイルメニューを開くとよい.

ESP にインストールする場合

# mkdir root
# mount /dev/sda3 root
# arch-chroot root
# pacman -S grub efibootmgr
# mkdir -p /boot/efi
# mount /dev/sda1 /boot/efi
# mkdir -p /boot/grub
# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
# mkdir -p /boot/efi/System/Library/CoreServices
# cp /boot/efi/EFI/arch_grub/grubx64.efi /boot/efi/System/Library/CoreServices/boot.efi

最後の boot.efi の場所は /boot/efi/EFI/boot/bootx64.efi でもよい.

ブートメニューのアイコンとラベル

アイコンは Finder.app で変える. ググる/.VolumeIcon.icns を置けばよいとの情報が出てくるが, 少なくとも Yosemite ではうまくいかない. たぶん /._. なるファイルに変わっている. なお fat32 でもアイコンの変更は可能だが, 末尾にドットがあるファイル名は Windows では禁止されているので, やや危険である.

ラベルは OS X 上で bless コマンドを使う. 文献によっては SystemVersion.plist なるファイルを書くとの情報があるが, 少なくとも Yosemite ではうまくいかない. また, fat32 は bless できない(コマンドは成功するが, ブートメニューは変化しない)ため, hfs+ の専用パーティションboot.efi を置いておく必要がある.

# bless --folder /Volumes/ArchBoot/System/Library/CoreServices --label 'Arch Linux'

Windows

EFI

普通にインストールする. BootCamp でインストールしたことがある場合, HybridMBR になっていて GPT うんぬんでエラーになるかもしれない. その場合, Arch を起動して gdisk で MBR を作り直すとよい.

# pacman -S gdisk
# gdisk /dev/sda
Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name
   1              40          409639   200.0 MiB   EF00  EFI System Partition
   2          411648        98877439   47.0 GiB    0700  Windows
   3        98877440        99082239   100.0 MiB   AF00  Arch Linux EFI
   4        99082240       137211903   18.2 GiB    8300  Arch Linux
   5       137211904       233860767   46.1 GiB    AF00  OS X
   6       233860768       235130303   619.9 MiB   AB00  Recovery HD
   7       235130304       312319623   36.8 GiB    AF00  Home

Command (? for help): x

Expert command (? for help): o
Number  Boot  Start Sector   End Sector   Status      Code
   1                     1       411647   primary     0xEE
   2      *         411648     98877439   primary     0x07
   4              98877440    312581807   primary     0xAF

Expert command (? for help): n

Expert command (? for help): o
Number  Boot  Start Sector   End Sector   Status      Code
   1                     1    312581807   primary     0xEE

Expert command (? for help): w

BIOS

今回使用した MBP Mid 2009 では, EFI ブートの Windows 10 に nvidia ドライバを入れると OS が起動しなくなる問題があり, しょうがないので最終的には BIOS ブートでインストールした. GPT に BIOS ブートで Windows をインストールするには, Hybrid MBR にしておく必要がある.

# pacman -S gdisk
# gdisk /dev/sda
Command (? for help): p
Number  Start (sector)    End (sector)  Size       Code  Name
   1              40          409639   200.0 MiB   EF00  EFI System Partition
   2          411648        98877439   47.0 GiB    0700  Windows
   3        98877440        99082239   100.0 MiB   AF00  Arch Linux EFI
   4        99082240       137211903   18.2 GiB    8300  Arch Linux
   5       137211904       233860767   46.1 GiB    AF00  OS X
   6       233860768       235130303   619.9 MiB   AB00  Recovery HD
   7       235130304       312319623   36.8 GiB    AF00  Home

Command (? for help): r

Recovery/transformation command (? for help): h

Type from one to three GPT partition numbers, separated by spaces, to be
added to the hybrid MBR, in sequence: 2
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): y

Creating entry for GPT partition #2 (MBR partition #2)
Enter an MBR hex code (default 07): 0c
Set the bootable flag? (Y/N): y

Unused partition space(s) found. Use one to protect more partitions? (Y/N): y
Note: Default is 0xEE, but this may confuse Mac OS X.
Enter an MBR hex code (default EE): af

Recovery/transformation command (? for help): w

Windows パーティションパーティションタイプを 0x07 にすると Windows 10 のインストーラが "Setup cannot continue due to a corrupted installation file" なるエラーを出すため 0x0C にしている. ただし, Windows のインストール後に Hybrid MBR を再構築する場合は 0x07 にしておかないと壊れる.

後ろのパーティションパーティションタイプを 0xEE にすると Apple EFI が GPT を読まず OS X を起動できなくなるので, Windows が対応してない適当なパーティションタイプを設定した.

アイコンとラベル

EFI ブートの場合, Windows のブート関連のファイルは ESP に入っているので, Arch の場合と同様にすればよい(ESP は自動でマウントされないので mount コマンドでマウントする). ただし fat32 は bless できないので, ラベルを変更することはできない(コマンドは成功するが, ブートメニューは変化しない). Arch と同様, 専用の hfs+ パーティションを作成すれば可能か(未検証).

BIOS ブートの場合, Apple EFI は ntfs を読めないので, アイコン, ラベルのいずれも変更できない. ntfs-3g を使えば OS X 上でアイコンを変更することはできるが, ブートメニューは変化しないので意味はない. ブートローダを別パーティションに分ければ可能かもしれないが, この場合 Windows は hfs+ を読めないので fat32 にする必要があり, やはりアイコンは変更できても bless できないのでラベルは変更できない.

さいごに

たいへんめんどくさいので素直に rEFInd 使いましょう.