Rokiのチラ裏

学生による学習のログ

内蔵ストレージが破損した Mac で USB メモリに Ubuntu 16.04 LTS を インスコしてブート

久しぶりに日記的な内容。

序章

ついにその日が来てしまった。いつもと変わらず Mac の電源ボタンを押すと、フォルダのアイコンに ? のマーク。一旦再起動してオプションキーを押しながら起動するも、起動ディスクが一切一覧に現れない。Apple diagnostics を実行すると Reference code VDH002、的確に内蔵ストレージに問題があることを示した。 この Mac は購入してから三年を経過していたので、もはやこれは物理的に逝ってしまったのだろう...などと思いつつアップルに電話を掛けると、やはりそのようであった。
失ったデータとしては、コードや執筆中のドキュメントなどは全て更新があるたびに Github に push していたため然程問題はなかったが、その他のデータとはおさらばする事になってしまった(また探せば良いのだが、分かりやすかった論文やドラフトが消えてしまったのが痛い。)。SSD を付け替えることも考えたが、そろそろ時期も時期なのでいっその事新規で購入してしまおうと思い、それは断念した。しかし、買い換えるまでの間何もできないというのは辛い。家にはデスクトップ機があるが、彼女が映像編集等でグラフィックボードが搭載された PC を必要としているので、まぁそれを使うのも頂けない。さらに出先では、ノート PC がなくては授業の間などの時間がとても無駄になってしまう。こういう場合、どうにかして使えないか考えて行き着くのは、やはり外部ストレージに OS を突っ込んで起動する事だろう。という事で、USB に Ubuntu 16.04 LTS を突っ込んでそれを Mac からブートすることにした。現在は、その Ubuntu からこの記事を書いている。個人的には、最近よく Arch Linux を利用しているので、それを導入しようかと考えたが、Ubuntu のコミュニティが充実していたので Ubuntu を利用する事とした。また、このエントリを書く本日から二日後に Ubuntu 17.10 がリリースされる事は把握しているが、17.10 特有の不具合などに遭遇したくはなかったので、最新の LTS である 16.04 を利用する事としている。

本題

まず必要となってくるのが、他のインターネットに接続できる PC と3つ以上の USB または、外付け HDD などのストレージだ。Ubuntu の iso ファイルを入手するために当然インターネットは必要だ。また、サードパーティー製のプロプライエタリなネットワーク機器のモジュールは、Ubuntu のデフォルトインストールでは導入されない事もあるので、それらを導入するのに手動でオンライン状態にある PC でパッケージを入手し、物理的にブートとは別の USB ストレージを利用してデータを転送しなければならない。3つの外付けメディアは前述した用途と、Ubuntuライブメディアを作るために必要となる。macOS の入った外付けメディアと Ubuntuライブメディアとなる外付けメディア、また Ubuntu の iso ファイルを外部から持ち込むためのメディアの合計3つだ。
前述した通り状況として内蔵ストレージは一切認識されない。しかし、まず Ubuntu の Live ブートを行うためには macOS(diskutil) で書きこんだブートメディアが必要だ(そうでなくても可能かもしれないが、EFI のブートに最も手っ取り早く対応させる事ができるだろうとの事から[要出展])。このような状態でも、セーフモードで macOS を起動することはできる。option + command + R または shift + option + command + R からインターネット経由で macOS を起動する。
そして新規で USB ストレージに一旦 macOS をインストールする。これがそこそこ時間がかかる。
無事インストールが終わると USB ブートのできる macOS が出来上がりだ。これを起動し、もう一つの USB ドライブに iso ファイルを入れておき、それを hdiutil などで iso ファイルから img ファイルに変換する。私は以下のようにした。

$ hdiutil convert -format UDRW -o target.img ubuntu-ja-16.04-desktop-amd64.iso

作成されたイメージをデバイスに対して書き込む。私は以下のようにした。書き込むディスクの指定を間違えると、それなりに面倒な事となるので注意しなければならない。

$ diskutil unmountDisk /dev/disk2
$ sudo dd if=target.img.dmg of=/dev/rdisk2 bs=1m
$ diskutil eject /dev/disk2
$ sudo reboot

再起動したら EFI Boot を選択し Live Ubuntu を起動させる。
次に、Ubuntu の本インストールとなるのだが、その前にパーティションを必ず作成する必要がある。Mac で起動させるためには UEFI モードで起動させなければならないが、そのために、EFI のシステムパーティションが構成されていなければならない。しかし Ubuntu 16.04 LTS を UEFI環境で、パーティションが一つもないストレージに対してデフォルトでインストールをしようとすると、インストーラーがフリーズする不具合が報告されており、続行する事ができない*1。fdisk または GParted でパーティションを作成する。パーティションテーブルを gpt にしてその上に任意のサイズ(200MB程度が推奨されていたためそれに習った)で fat32ファイルシステムを作成し、それに Esp と Boot フラグを設定しておく。これで、ESP のパーティション設定が完了した。
後はそのままインストールを行うだけだ。インストールメディアの設定部分でその他を選択し、先ほど作成したパーティションに任意のファイルシステムを追加していく。今回は、USB ブートでかつ Mac の RAM が 8GB 程搭載されていたためスワップ領域を一切設けずに ext4 ファイルシステムのみを作成した。これまた少し時間がかかるが、再起動して無事 Ubuntu が起動した。
しかし、無線LAN機器がどうやら正常に動作していないようだった。ifconfig などで状況を見るも、やはり認識すらされていない。
まずは Mac に乗っている無線LAN機器を特定する必要がある。

$ lspci | grep Wireless

私の環境では broadcom 802.11 というデバイスが載っていたのでそれに合うドライバモジュールを導入する。しかしそのためにはパッケージが必要で、服を買うための服がないの如くインターネットへの接続が必要となるので、他の PC でダウンロードして物理的に外部ストレージを差込み、この Ubuntu に移してやる必要がある。broadcom 802.11 である場合は、以下のリンクからパッケージ(amd64)を入手できる。

二つ目の dkms というパッケージは上記 broadcom 802.11 の導入の際に必要となる依存パッケージで、ドライバの自動ビルドツールである。私の環境だと、broadcom 802.11 のモジュールの導入時にこのパッケージが必要である旨を示すメッセージと共に失敗したので恐らく同じケースである場合は必要になるのではないかと思われる。
両者とも、dpkg コマンドで導入し、再起動して、インターネットに接続した。
というわけで無事 Mac の内臓ストレージなしで USB から Ubuntu を起動してそこそこの作業ができるようにはなったのだが、やはりインストールしたストレージが USB 3.0 であるとは言え、体感で分かるほどに遅い。まぁ早く買い換えたいところだが、私のような貧乏学生は、少しの間はこれでやり過ごす必要があるようだ。

*1:どうやら Ubuntu 15.10 でもこの不具合は報告されていたようだが、16.04 LTS では修正されていないようだ