MacBookAirにmacOSとWindowsとArch Linuxを突っ込もうとしたら思ったより大変だった話とそれで得た知見

SSDを換装したついでにマルチブート環境を作っちゃえという感じで構築したのですが、躓きポイント多数でした。特にWindowsがクセモノです。
本当に特殊ケースなので役立つかは分かりませんが、他の事例にも当てはまるものがいくつかはあるはずなので、ここに書き留めておきます。

# こういう環境にしたかった（した）

MacBook Air (13-inch, Mid 2011)。
512GBぐらいのSSDをパーティション分割して、

* macOS Sierra
* Windows Embedded 8.1 Industry Pro (Microsoft Imagineで入手したもの)
* Arch Linux (インストールメディアのバージョンは2017.07.01)

をトリプルブート。さらに共用データ用パーティションをexFATで作成。
[rEFInd](http://www.rodsbooks.com/refind/)を使用。

# 結果だけ知りたい人

## macOS

* 最初にインストールして、rEFIndはここから突っ込むと良い
* インターネットがうまく繋がらずインストールできない時は日付時刻設定を疑いましょう（証明書の問題）
* ブートで困ったら慌てず騒がずOptionキー押しながら起動してmacOS立ち上げてrEFInd再インストール

## Windows

* macOSからISOをddでUSBメモリにそのまま書き込むとブートしないのでBoot Campアシスタントを使うと良い
* サポートソフトウェアはインストールメディア作成の時に一緒に入れるとダウンロードがうまく行かないので、ウィザードではチェックを外して、後でメニューからダウンロードすると良い
* UEFIブートでのインストールは可能、しかしオーディオとビデオドライバがこけるため「Hybrid MBR」でレガシーインストール（Boot Campが通常やっているのはこれ）
* この時、WindowsではMBRディスクとして認識されているので、先頭4つのパーティションしか認識しない（必ず「先頭の」4つかは検証が足りないので怪しい）
* なので、Windowsと共用データ用パーティションは前に配置する必要がある
* 余計なUSBメモリが挿入されてるとインストールできないことがある

## Arch Linux

* gdisk優秀
* mkinitcpioした時点でrEFIndが見つけてくれてブートできる（GRUB入れてません）
* なんかデフォルトで入ってるbrcmsmacドライバがクソなのでbroadcom-wl入れましょう

# 具体的にどうしたか

以下は十数時間かけた試行錯誤のプロセスをだらだらと綴ったものです。本質的な情報は[結果だけ知りたい人](#結果だけ知りたい人)に書いてある通りなので、読み飛ばしていただいて構いません。

これから書きます。

## macOS 一回目

SSDが届いた。交換した。元あったSSDは別売りのケースに入れ、USB接続ができるようにした。

普通に電源を入れるともちろんOSが見つからないの表示。元のSSDをUSB接続し、試しに起動してみようとしたけどブートが爆遅で進まないので諦める。元SSDに入っていたmacOS 復元を起動。パーティションを以下のように割ってフォーマットした。

* macOS用 HFS+ 128GBぐらい
* Windows用 FAT32(後でNTFSにするつもり) 128GBぐらい
* Linux用 exFAT(後でext4にするつもり) 128GBぐらい
* データ用 exFAT 128GBぐらい

どうやらWi-Fiの設定は元SSDのキーチェーンから自動で読んでくれるらしく、pingは何も設定せずとも成功した。この状態でインストールをしようとするが、サーバーに接続できない旨のエラー。メニューからオンラインヘルプを開いて調べてみようと試みるが、謎のエラーメッセージが出てHTTP接続ができない。各文字列が「翻訳カタログが見つからない」的なメッセージに置き換えられていてエラーの内容が全く読めないのだ。
色々試してみても上手くいかず途方に暮れていたところ、ふとエラーメッセージに残存している日付を見ると、2030年とか書いてある。もしかして証明書の有効期限的なアレではという勘が働き、コンソールで日付設定を見ると、やっぱりずれている。現在の日時に直すとあっさり繋がった。
ということで何とかインストールが終了し、macOSの起動に成功。

## macOS 二回目

元々High Sierra Betaが入っていたので、再インストール後のバージョンもそれだったが、Sierraに戻したくなったのでインストーラを落としてきて`createinstallmedia`でUSBメモリに書き込む。そしてSierraをインストール。Arch Wikiでマルチブートについて調べていたところ、[rEFIt](http://refit.sourceforge.net/)というものを使うといいということを知り、インストール。その後すぐにrEFItが[rEFInd](http://www.rodsbooks.com/refind/)にフォークされたということを知り、rEFItを消してrEFIndをインストール。再起動。ブートメニューが出る。なるほどこんな感じになるのか。

## Windows 一回目

macOS上で、WindowsのインストールISOをddでUSBメモリに書き込んで再起動。あれ、メニューに選択肢が出ないではないか。Optionキー押しながらでも出てこない。調べてみると、Boot Campアシスタントを使って書き込めば上手くいくようだ。サポートソフトウェアをインストールのチェックを入れたまま書き込み。
数十分待ち、ディスクイメージは書き込み終わったようだが、サポートソフトウェアのダウンロードが残り時間300分程度を前後したまま進む気配が無い。キャンセルしてApple公式サイトから対応するバージョンのものをダウンロード。適当にUSBメモリに書き込み。
ブートメニューに出現。確かこのときUEFIの方で起動したんだと思う。インストーラに「選択されたディスクはGPT形式ではない」のと「このパーティションはNTFSじゃない」からインストールできないと怒られた。このときはHybrid MBRのことなど知らず、MBR形式がパーティションを4つまでしか持てないことも知らなかったので、しっかり分けたはずの後ろのパーティション2つが未割り当て領域になっていることに不審感を覚え、インストールを中断。macOS 復元のディスクユーティリティで後ろ3つのパーティションをフォーマットし直す。
もう一度Windowsのインストーラを起動。今度はBIOSモードで起動してしまったんだな。ここが完全に無意識だった。相変わらず後ろのパーティションは未割り当てになっているが、「GPTじゃない」のエラーは消えている。後ろのセクタを破壊しないようにサイズを慎重に設定し、WindowsのパーティションをNTFSで作り直す。これでインストールができるようになった。無事にインストールが完了し、Boot Campのサポートソフトウェアも導入。快適に操作できるようになった。

## Arch 一回目

Arch Wikiの[MacBookページ](https://wiki.archlinuxjp.org/index.php/MacBook)と[インストールガイド](https://wiki.archlinuxjp.org/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89)を見ながらインストールを進める。特に注意するところは無かったと思う。最後のブートローダーだけ、壊したら嫌だなあとか、rEFIndが上手く見つけてくれるだろうとか思って、スキップした。
再起動してもメニューにArchは出現せず、流石にそう上手くは行かないかと思って、手動でrEFIndのコンフィグをいじってみた。そうしたら電源を入れても白画面のまま進まなくなってしまった。Optionキーを押しながら起動すると無事に起動可能ディスクの一覧が出たので、macOSを選んでrEFIndを再インストール。再起動したら、なんということでしょう。Archのエントリーが追加されているではありませんか。自動で見つけてくれたようです。
ということで、インストール完了。これでメニューに3つのOSが共存することになった。

## Windows 二回目

さて、勘のいい方であったらこの時点で気づくかもしれないが、Windowsからデータ用パーティションを読むことができないのである。まだMBR形式なんて全然知らなかった頃の自分だ、ext4パーティションの後ろにあるのが問題なのかなあとか訳の分からない考察を始めるのだ。しかもこの時にはまだWindowsがUEFIブートしてるもんだと思い込んでいる。とてつもなく厄介だ。Ext2Fsdを入れてみたりしてももちろん状況は変わらない。
何だかんだ調べた挙句、これがレガシーなBIOSブートなこと、MBR形式が4つのパーティションしか読めないことを知った。疑問に思った方がいるかもしれないので補足しておくが、この時点でパーティションは実際には6つ作成されており、先頭にはESPと呼ばれるEFIパーティションが、macOSのパーティションの後ろには復元用パーティションが存在している。
というわけで、UEFIモードでもう一度インストールし直すことを決意するのである。インストールに使ったUSBメモリには既にArchのインストーラが上書きされているため、持っていたもう一本のメモリで作り直し。今思うと使い回し方が下手だな。Windowsから、USB回復ドライブを作成し（ブートディスクを作るのに便利）、そこにISO内のインストーラとサポートソフトウェアを突っ込んで再起動。
もう間違えないという心持ちの下にUEFIの方で起動。インストーラはコマンドプロンプトから起動できる。さて、「選択されたディスクはGPT形式ではない」の表示アゲイン。調べてみると、Windowsのインストーラは、パーティションテーブルの形式が「Hybrid MBR」になっていると、ブート方法に関わらずMBRディスクとして認識するという仕様らしい。HybridなMBRを取り除くためにArchのUSBで起動。`dd if=/dev/zero of=/dev/sda bs=512 count=1`すると良いらしい。gdiskを起動すると、MBRがcorruptしているので次に書き込んだ時にProtective MBRにしますという表示。これでProtective MBRを作って作業完了。
再度Windowsのインストーラを起動。おっ、ちゃんとGPTディスクとして認識されているみたいだぞ。ファイルのコピーに突入することができた。と思ったら、コピー中にBSoDが出た。ダメなのかなあと思いつつ、再度インストールをしたらすんなり成功。良かった良かった。ディスプレイの解像度が最初からネイティブだ。すごい。

## Windows 三回目

サポートソフトウェアを入れると画面が映らなくなる。
UEFIモードで再インストールした話。これから書きます。

## macOS 三回目

macOSのパーティションを後ろに追いやってもう一度入れ直した話。これから書きます。

## Windows 四回目

UEFIを諦めてBIOSモードで入れ直した話。これから書きます。

## Arch 二回目

パーティション再配置に伴って入れ直した話。これから書きます。