8.5. スナップショットの削除

個別のスナップショットまたは一連のスナップショットが必要なくなった場合には、スナップショットを削除することができます。スナップショットを削除すると、仮想マシンのディスクイメージを特定の復元ポイントにリストアする能力が失われます。この操作によって、スナップショットが消費したディスク領域の再利用や、スナップショット内のデータの削除が必ずしも行われるわけではありません。このディスク領域は、削除したスナップショットのデータが後続のスナップショットにより上書きされた場合にのみ再利用されます。たとえば、5 つあるスナップショットのうち 3 番目に作成したスナップショットを削除すると、4 番目と 5 番目のスナップショットで使用できるように、3 番目のスナップショットで変更のないデータはディスク上に確保する必要があります。しかし、4 番目または 5 番目のスナップショットが 3 番目のスナップショットのデータを上書きした場合には、3 番目のスナップショットは重複してしまうため、このディスク領域は再利用することができます。スナップショットを削除すると、ディスク容量の再利用が可能であるだけでなく、仮想マシンのパフォーマンスも向上できる場合もあります。
スナップショットを削除するように選択した場合は、後続のスナップショットと削除するスナップショットをマージできるように QEMU により同じサイズの新規論理ボリュームが作成されます。この新規論理ボリュームのサイズは、この 2 つのスナップショットの差異すべてを収容できるように調節されます。この 2 つのスナップショットの合計サイズが、この新規論理ボリュームのサイズになる場合もあります。これらのスナップショットがマージされると、後続のスナップショットの名前が変更されます。また、後続のスナップショットは削除のフラグが立てられ、この名前を継承した新規論理ボリュームにより置き換えられます。削除のフラグを立てられた元のスナップショットも、後続のスナップショットも両方削除され、代わりにこれらのスナップショットがマージされた単一のスナップショットが残ります。
たとえば、Delete_snapshot というスナップショットが 200 GB で、Next_snapshot という後続のスナップショットが 100 GB とします。Delete_snapshot が削除されると、サイズ 200 GB の新規論理ボリュームが作成され、一時的に Snapshot_merge という名前が指定されます。最終的に Snapshot_merge のサイズは、Delete_snapshotNext_snapshot の両方をマージした内容を収容できるように 300 GB に調節されます。次に、Snapshot_merge の名前を Next_snapshot に変更できるように、Next_snapshotDelete_me_too_snapshot という名前に変更されます。そして最終的に、Delete_snapshotDelete_me_too_snapshot が削除されます。
Snapshot Deletion

図8.4 スナップショットの削除

実行中の仮想マシンからスナップショットを削除する際に使用するロジックは、シャットダウン状態の仮想マシンからスナップショットを削除する場合とは若干異なります。ライブでのスナップショットの削除は、非同期ブロックジョブとして処理されます。この際、VDSM が再起動された場合や仮想マシンが操作中にシャットダウンされた場合でもジョブのトラッキングができるように、VDSM は、仮想マシンのリカバリーファイルに操作の記録を保持します。この操作が一旦開始すると、操作が失敗したり中断されたりしても、削除されるスナップショットをプレビューしたり、復元ポイントとして使用したりすることはできません。アクティブなレイヤーを親レイヤーとマージする操作では、データがアクティブなレイヤーから親レイヤーにコピーされるプロセスと、ディスクへの書き込みがアクティブなレイヤーおよび親レイヤーの両方にミラーリングされるプロセスの 2 段階に、操作が分割されます。最終的に、削除されるスナップショットのデータが親スナップショットとマージされ、VDSM によりイメージチェーン全体で変更が同期された時点で、このジョブは完了とみなされます。