スナップショット

スナップショットは、停止中のマシンのディスクと起動状態を保存し、後でその状態に戻せるようにするものです。クリーンインストールの直後にスナップショットを作成しておけば、ゲストで破壊的な操作を試した後に元に戻せます。

作成、一覧表示、復帰、削除

  1. マシンを停止します:vphone-cli vm stop myphone、またはウィンドウから閉じます。
  2. スナップショットを作成してから、ゲストで作業します。保存した状態に戻したくなったら、マシンをもう一度停止して復帰します。
vphone-cli vm snapshot create myphone clean --note "fresh install"
vphone-cli vm snapshot list myphone
vphone-cli vm snapshot revert myphone clean
vphone-cli vm snapshot delete myphone clean
  • revert と delete は、何かを変更する前に確認を求めます。--force を指定すると確認を省きます。
  • 復帰してもスナップショットは残るため、何度でもその状態に戻れます。
  • list --json は {"name", "created", "note"} オブジェクトの配列を古い順に出力します。created は ISO 8601 形式で、メモがない場合 note は省かれます。
  • list と delete はマシンの実行中でも使えます。どちらも実行中のファイルには触れません。

作成や復帰が拒否される場合

create と revert は、マシンの実行中、またはディスクイメージ、SEPStorage、nvram.bin をいずれかのプロセスが開いている間は拒否されます。拒否のメッセージには、それらを開いている各プロセスの名前が表示されます。そのどれもマシンを実行しているものではない場合(バックアップツール、Spotlight など)はその旨が表示され、そのプロセスがファイルを閉じれば再試行は成功します。

create は、マシンが APFS ボリューム上にない場合にも拒否されます。数十 GB になることもあるディスクイメージをコピーしないようにするためです。

Snapshot.plist に 3 つの状態ファイルがすべて記載されていない、またはスナップショットに含まれないファイルが記載されているスナップショットは、何かが変更される前に破損として拒否されます。

復帰は、すべて成功するか何も変わらないかのどちらかです。途中で失敗した場合は、マシン自身のファイルを元に戻してエラーを報告するため、マシンは元の状態のままです。まれに元に戻す処理も失敗した場合はエラーにその旨が表示されるので、マシンを起動する前にもう一度スナップショットに復帰してください。

スナップショットに含まれるもの

保存されるもの理由
ディスクイメージ(Disk.img)ゲストのシステムとデータ
SEPStorage、nvram.binSecure Enclave の状態とブートチェーンの NVRAM。ディスクと一致している必要があります
PatchReceipt.plistゲストで有効になっているパッチ
restore-info.jsonディスク上の iOS のバージョンと、cfw install が完了したかどうか

ディスク、SEPStorage、nvram.bin は常に一緒に扱われます。Secure Enclave のリプレイ防止カウンタは SEPStorage にあり、ディスクにはそれに対応する状態が保存されています。ある時点のディスクと別の時点の SEPStorage を組み合わせると、次回の起動時に SEP がパニックします。

PatchReceipt.plist と restore-info.json は、存在する場合に保存されます。スナップショットの作成時に存在しなかったファイルは、復帰時に削除されます。そのため、記録は後のインストールではなく復帰したディスクの内容を表します。

保存されず、復帰しても変わらないもの:

  • config.plist:デバイスのアイデンティティ、CPU、メモリ、ネットワーク、その他の設定。vm config でいつでも変更でき、復帰してもその変更は元に戻りません。
  • パッチの選択(PatchSelection.plist)、復元ツリー、FirmwareOriginals/、ROM。これらはゲストの状態ではなく、Mac 側の入力です。
  • launchpad.json。Launchpad は自身のコピーをスナップショットのフォルダに保存し、自分で元に戻します。CLI はスナップショットのフォルダにある追加のファイルには手を加えず、スナップショットと一緒に削除します。

ディスク容量

スナップショットは APFS クローンとして <vm>/Snapshots/<name>/ に保存されます。作成は一瞬で、容量も使いません。マシンとそのスナップショットは、ゲストが書き込むまですべてのブロックを共有し、書き込まれた後も変更されたブロックだけが新たに容量を使います。du と Finder は各スナップショットをディスクのフルサイズで数えるため、実際の使用量より多く表示されます。ボリュームの空き容量が正確な目安です。

スナップショットは、作成時のディスクブロックを保持します。そのマシンのスナップショットが古いブロックを保持している間は、vm rebase を実行しても何も解放されません。仮想マシン間でのディスク容量の共有をご覧ください。

複製、書き出し、名前の変更

vm clone と vm export はスナップショットを含みません。複製したマシンや読み込んだマシンは、スナップショットがない状態から始まります。マシンを削除したり名前を変更したりすると、そのスナップショットも一緒に削除または移動されます。

関連項目