Docs · はじめに

スナップショットとロールバック

ここではスナップショットがほぼ無コストな理由、ツリーの分岐、既知良好状態へ戻る 3 つの方法。

1VMTool のスナップショットはディスクのコピーではなく APFS クローン。ファイルシステムは一方が書くまでブロックを共有するため、スナップショット取得はゼロバイトコピーで約 1 ミリ秒 — 24 GiB でも 1 TiB でも同じ。スケールするサイズがない。

それがスナップショットの用途を変える。秒とギガバイトかかると節約し、危険な手前の 1 枚を省略する。無コストなら判断をやめる。

取得と復元

1vm snapshot take dev "before upgrade"
1vm snapshot list dev
1vm snapshot restore dev before-upgrade
1vm snapshot rm dev <ref>

<ref> は名前または id 接頭辞。snapshot rm は -r で 1 ノードではなく枝全体を削除。

スナップショットは分岐

古い状態に復元してから新スナップショットを取ると第 2 の系ができ、第 1 を捨てない。同一起点から複数方向を探索でき、ツリービューは各ノードの固有データで実形状を描く — 実際にディスクを消費する枝が見える。

キャプチャ内容

状況キャプチャ
Virtualization.framework 上で実行中ディスクとメモリ。復元で実行途中から再開
1VM エンジン上で実行中ディスクのみ — 復元は cold-boot
停止、どちらのエンジンもディスクのみ

戻る 3 つの方法

混同しやすいので明確に。

snapshot restore は選んだ特定スナップショットへ。

discard-session は今回の boot 開始時のスナップショットへ、電源投入以降の書き込みをすべて破棄:

1vm discard-session dev --force

reset はクリーン状態へ:

1vm reset dev --force

ロールバックモード

状態を蓄積すべきでないマシン — 閲覧 VM、サンドボックス、デモ、他人に渡すもの — でロールバックを有効にすると電源オフ時に書き込みを自動破棄:

1vm rollback dev on

毎 boot が安全点から始まり、覚えることなし。手で維持する規律の構造版。

クローン

同じクローン原語でマシン全体の安価なコピー:

1vm clone dev test            # リンククローン。分岐までブロック共有
1vm clone dev test --full     # 独立コピー
1vm clone dev test --rekey-ssh  # ゲスト host key 再生成

親と同時実行するクローンには --rekey-ssh — でないと両方が同一 SSH host key。

ディスク使用量

1vm du

ライブラリ全体の allocated、on-disk、スナップショット別バイト — クローンがブロック共有するとき「どれだけ使っているか」の正直な答え。