この方法は実験の末に出来た方法で明確な根拠がありません。実際に試す場合は注意してください。
また、ライセンス違反にならないようMac上のVirtualBoxにインストールするようにしてください。
2019/11/19 macOS Catalinaでも試してみました。少し変更点があったのでこちらをご覧ください。
https://qiita.com/ykgeek/items/3098074c91da6943ef00
2019/12/17 VirtualBoxがAPFSに対応したようです。詳しくはこちらをご覧ください。
https://qiita.com/ykgeek/items/1798c1080c5c5ad5a22e
ここではすでにISOファイル化したmacOS Mojaveのインストールディスクを用意してあることを前提条件にします。
TL;DR
- Mac high Sierra構成で仮想マシンを作成
- インストールディスクから起動する
- ディスクを最初にHFS+で初期化する
- 通常通りにインストールする
- インストール中に一度再起動がかかるのでEFI Shellから直接EFIを指定してインストールを続行する (FS1:\macOS Install Data\Locked Files\Boot Files\boot.efi)
- インストール完了時に再起動がかかるのでインストーラをもう一度起動する
- ターミナルを起動する
- diskutil mount /dev/disk0s1でEFI領域をマウントする
- cp /Volumes/OS X Base System/usr/standalone/i386/apfs.efi /Volumes/EFI/
- startup.nshファイルを作成する
- 再起動する。
一体何をしているのか
細かい操作が多いためおそらくTL;DRだけではまともに理解できないと思います。
だたやっていることは意外とシンプルです。
- 仮想マシンを作成する
- インストールする
- APFSのドライバーを用意し、それを読み込んで起動するためのスクリプトを作る
High Sierraあたりからインストール時にディスクのフォーマットがAPFSになりましたがVirtualBoxでは扱うことができないようです。そのためAPFSのドライバーを読み込むことにより対応しています。
仮想マシンを作成する
macOS 10.13 High Sierra (64-bit)構成がMojaveの環境に近いため、こちらをベースにしていきます。そこからさらにいくつか変更する箇所があります。
- 起動順序からフロッピーディスクを外す
- ビデオメモリを128MBに変更する
- インストールディスクをセットする
- オーディオを無効にする
- USBポートを3.0対応にする(VirtualBoxにextensionを入れる必要があります。)
メモリとプロセッサーはできるだけ多めに設定しておくと使いやすくなります。
インストールする
仮想マシンを作成したらインストールディスクからmacOSを起動します。
インストールを始める前にインストール先のディスクを初期化します。
フォーマットはHFS+(Mac OS Extended)です。
インストール先のディスクを初期化しておかないとmacOSインストール時にインストール先としてディスクが表示されません。
ディスクを初期化したらいつも通りにインストールをしてください。
インストールは2段階で行われているようで、インストールディスクから必要なデータがコピーされると再起動がかかり、内蔵ディスクから起動してインストールを再開するようです。
ここでの再起動ではうまく起動できないようでEFIシェルに入ってしまいます。
直接起動に必要なファイルを起動させなければいけません。
EFIシェルで
"FS1:\macOS Install Data\Locked Files\Boot Files\boot.efi"
を実行するとインストールが続行されます。
APFSのドライバーをコピーする
インストールが完了すると再起動がかかります。
しかしこの時にはすでに起動ディスクのファイルシステムがAPFSに変換されているためこのままでは起動できません。
そこでAPFSドライバーとドライバーを読み込んで起動するスクリプトを用意します。
もう一度インストーラから起動してください。
インストーラが起動したらターミナルを開きます。
そこで下記のコマンドを実行します。
# EFIパーティションをマウントする
diskutil mount /dev/disk0s1
# APFSドライバーをインストーラーからコピーする
cp /Volumes/OS X Base System/usr/standalone/i386/apfs.efi /Volumes/EFI/
# APFSドライバーを読み込みOSを起動するスクリプトを作成する
cat > /Volumes/EFI/startup.nsh << EOF
load fs0:\apfs.efi
map -r
fs1:\System\Library\CoreServices\boot.efi
EOF
2019/8/10追記
なんらかのタイミングでパーティションの数字が変わってしまうようです。
あまりスマートではありませんが、下記のようにifを使うことである程度柔軟に対応できます。
# EFIパーティションをマウントする
diskutil mount /dev/disk0s1
# APFSドライバーをインストーラーからコピーする
cp /Volumes/OS X Base System/usr/standalone/i386/apfs.efi /Volumes/EFI/
# APFSドライバーを読み込みOSを起動するスクリプトを作成する
cat > startup.nsh << EOF
load fs0:\apfs.efi
map -r
IF EXIST fs1:\System\Library\CoreServices\boot.efi THEN
fs1:\System\Library\CoreServices\boot.efi
ENDIF
IF EXIST fs2:\System\Library\CoreServices\boot.efi THEN
fs2:\System\Library\CoreServices\boot.efi
ENDIF
IF EXIST fs3:\System\Library\CoreServices\boot.efi THEN
fs3:\System\Library\CoreServices\boot.efi
ENDIF
IF EXIST fs4:\System\Library\CoreServices\boot.efi THEN
fs4:\System\Library\CoreServices\boot.efi
ENDIF
EOF
ここまでできたらシャットダウンします。
その後インストールディスクを取り出してください。
macOSを起動する
初回起動時の設定をしたらあとはいつも通り起動します。
macOSの仮想環境をお楽しみください。
あとがき
今回はファイルシステムがAPFSのmacOSを起動する方法を紹介しました。
冒頭でも示した通り、あちこちのWebページをさまよい、実験を繰り返した結果できた方法です。
実際に試す際は注意してください。
もし間違いなどがあればご指摘いただければ幸いです。
また今後も検証を続け、内容を一部アップデートすることがあるかもしれません。