仮想マシン間でのディスク容量の共有
vm rebase を使うと、停止中の仮想マシンが、ほかの仮想マシンやテンプレートと同一のディスクブロックを 1 つだけ保存するようになります。テンプレートを使わずに復元したマシンや読み込んだマシンで、ディスク容量を取り戻すときに使います。
同じ IPSW から別々に復元した 2 台の仮想マシンは、ディスクイメージの多くが同じでも、ディスク上では何も共有しません。iOS 27.0 の iPhone 2 台では、約 20 GB のデータのうち約 8.6 GB が同じ位置にある同一のバイトで、そのほとんどがシステムボリュームです。
仮想マシンをリベースする
-
両方のマシンを停止します。両方が同じ APFS ボリューム上にある必要があります。
-
リベースで節約できる容量を確認します。
-
仮想マシンまたはテンプレートを基準にリベースします。
--onto には、仮想マシンの名前か、vm template list に表示されるテンプレート識別子(または一意に決まるその先頭部分)を指定します。名前が両方に一致する場合は仮想マシンが優先されます。--dry-run は何も書き込まずに、共有される量と書き込まれる量を報告します。
古いイメージが解放されるまで、ボリュームには書き込まれるブロック分の空き容量が必要です。
処理の内容
リベースは、基準となるイメージの APFS クローンから second のディスクイメージを作り直し、異なるブロックだけを書き込みます。イメージを置き換える前にすべてのバイトを元のイメージと比較するため、ゲストからはまったく同じディスクに見えます。
変わるのはディスクイメージだけです。SEPStorage、nvram.bin、config.plist、デバイスのアイデンティティはそのままです。テンプレートを基準にリベースしてもテンプレートは変わらず、仮想マシンがそのテンプレートの複製になるわけでもありません。vm template show にも表示されません。
結果の読み方
節約される容量は newly shared の数値です。同一でもすでにディスク上で同じブロックになっているバイトは already shared として報告され、それをリベースしても何も解放されません。
vm create で 1 つのテンプレートから作った仮想マシンは、すでにそのブロックを共有しているため、互いに、またはそのテンプレートを基準にリベースしてもほとんど解放されません。コマンドは比較の前にその旨を伝え、節約量が 0.1 GB 未満の場合にも再度伝えます。リベースする価値があるのは、テンプレートなしで復元した仮想マシン(--no-template)や読み込んだ仮想マシンです。
知っておくべきこと
- 容量が戻るのは、古いイメージのブロックをほかに何も保持していない場合だけです。その仮想マシンのスナップショットや、そこから作った複製はブロックを保持します。先にそれらを削除しないと、節約は見込めません。
duと Finder は、引き続き各イメージをフルサイズで数えます。ボリュームの空き容量(df)が正確な目安です。- どちらかの仮想マシンがディスクに書き込むと、2 つのイメージは再び離れていきます。テンプレートのように一度も起動しない基準が最適で、後でもう一度リベースすると離れた分を取り戻せます。
- 中断されたリベースは仮想マシンを変更しませんが、その中に隠しフォルダ
.rebase-*が残ることがあります。そのフォルダは削除してください。