概要
- Apple Silicon Macでは、 同時に2台まで のmacOS仮想マシンしか起動できない制限
- この制限は カーネル(XNU)内部 で実装されている
- 開発用カーネルコレクション を利用し、VM数制限を 上書き可能
- カスタムカーネル利用時は OSアップデートが困難 になる点に注意
- 手順や仕組みの詳細、元に戻す方法、今後の展望をまとめ
Apple Silicon Macの仮想マシン制限の仕組みと突破法
- Apple Silicon Macでは、 Virtualization.framework 経由でmacOSゲストVMを2台までしか同時起動できない制限
- エラー例: VZError.Code.virtualMachineLimitExceeded
- この制限は、 macOSのSLA(ソフトウェアライセンス契約) にも明記
- 最大2台までの仮想環境運用を許可
- 制限の実装箇所は XNUカーネル内部 (ユーザ空間ではなくカーネル空間)
- 関連カーネル関数: hv_vm_ *、変数 hv_apple_isa_vm_quota
- VM起動・停止時にこの変数を増減
- 特殊な boot-args(hv_apple_isa_vm_quota=) でVM数制限を上書き可能
- ただし、リリースカーネルでは AppleInternalチェック があり通常は無効
- 対策: 開発用カーネル(Development Kernel Collection) を使うことで制限を回避
開発用カーネルコレクションの構築手順
- Apple DeveloperサイトからKernel Debug Kit(KDK) をダウンロード
- ホストと同じバージョン・ビルドのKDKが必要
- KDKインストール後、 カーネルバリアント(例:T6020) を確認
uname -v | awk -F '/' '{print $NF}'| awk -F '_' '{print $NF}'
- kmutil コマンドで開発用カーネルコレクションを生成
- 例:
sudo kmutil create ... --kernel ... --repository ... - 生成された VirtualMachine.kc ファイルを保存
- 例:
開発用カーネルコレクションの起動設定
- Macを リカバリーモード で起動
- ターミナル から各種設定を実施
- System Integrity Protection(SIP)無効化 :
csrutil disable - カスタムboot-args許可 :
bputil --disable-boot-args-restriction - カーネルコレクション指定 :
kmutil configure-boot --volume ... --custom-boot-object ... - boot-args設定 :
nvram ...:boot-args='kcsuffix=development hypervisor=0x1 hv_apple_isa_vm_quota=0xFF'
- System Integrity Protection(SIP)無効化 :
- 再起動後、 Terminalで設定確認
sysctl kern.osbuildconfignvram boot-args
仮想マシンの大量起動と実用例
- UTM や Parallels など、Virtualization.frameworkを使う仮想化ソフトでVMを複数起動可能
- M2 Pro MacBook Proで 9台のmacOS VM同時起動 を確認
- 実用的なテスト環境構築が可能
この機能の登場時期とカーネルの変化
- macOS Monterey(12) 以降でこのboot-argが追加
- 最新カーネル(Sonomaなど)でも AppleInternalチェック は健在
- XNU内部にはまだ多くの隠された機能が存在
カスタムカーネル利用時の注意点・元に戻す方法
- カスタムカーネル利用中は OSアップデートが非推奨
- アップデート後にエラーになる場合あり
- 元に戻すには、 リカバリーモードでBoot Policyをリセット
- 例:
bputil --full-security - 再起動で標準カーネルに復帰
- 例:
今後の展望とまとめ
- 今後の改善案
- KC構築・起動自動化ツールの開発
- カーネル拡張でhv_apple_isa_vm_quota上書き (開発カーネル不要化)
- Virtualization.frameworkの隠れた機能 を探る楽しみ
- Apple Silicon VMのさらなる制御やDEP Enrolment回避の研究への意欲
- macOS仮想化の内部構造理解 とその応用可能性