私は VirtualBox スナップショットを多用しています (CI ビルダーでの使用のため)。そのため、通常は 1 つの VM に複数のスナップショットがあります。システムの更新などのために、既存のスナップショットから新しいスナップショットを「フォーク」することがよくあります。
base
└── A
└── A1
更新が完了したら、 を削除するだけで親スナップショットを子に置き換えますA
。VirtualBox は変更セットbase->A
と をマージしますA->A1
。
base
└── A1
いいね。
しかし、時には新しいスナップショットサブツリーを作成したいことがあります。元はいくつかのスナップショットからフォークし、独自の生命を獲得します。
例えば
base
└── A
├── A1
└── B
└── B1
さて、これはすぐに醜くなります (サブツリーを更新し続けるため)。最終的にはスナップショット ツリーをクリーンアップしたいので、次のようになります。
base
├── A1
└── B1
A
残念ながら、VirtualBox では次のエラーが発生し、スナップショットを削除できません。
Snapshot 'A' of the machine 'vagrantbox' cannot be deleted, because it has 2 child snapshots, which is more than the one snapshot allowed for deletion.
理論上は、スナップショットを削除しても問題はないと思います。VirtualBox はスナップショットのマージを 2 回 (および)A
実行するだけです。これによりスナップショットのサイズが大きくなる可能性がありますが、私はそれで満足しています (そして、FS レイヤーを減らすことでパフォーマンスが向上することを期待しています)base->A->A1
base->A->B
では、兄弟スナップショットをそのまま残しながら、スナップショットを親にリベースするにはどうすればよいでしょうか?
答え1
スナップショットに基づいて完全な VM クローンを作成できます。新しい VM にはスナップショットはありません。他の唯一の方法は、VM の登録を解除し、vboxmanage
ディスク イメージを使用して VM の XML ファイルを編集することで、すべての作業を自分で行うことです。