VirtualBoxのスナップショット機能とファイルの動き

スナップショットがちょっと混乱するので、整理してみました。*1

スナップショットなし
.VirtualBox/HardDisks にディスクファイルだけがある状態。
スナップショットあり
上記ディスクファイルに加えて .VirtualBox/Machines/仮想マシン名/Snapshots/{id}.vdi といったスナップショットファイルがある状態。

つまり、スナップショットを作ると、基本となるディスクファイルに変更が加わるのではなく、スナップショットファイルが追加されるという事のようです。
スナップショットがある状態で仮想マシンを使うと、読み込みは双方から適切に行われ、書込みはスナップショットファイルに。
スナップショットの破棄は、スナップショットファイルを消すだけという事のようです。

スナップショットがある場合

▼スナップショット1
  ▼最新の状態

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズをxとする

VirtualBoxGUIで、スナップショットの項目を見ると、最新の状態 というステータスがあります。
この場合の最新の状態は、スナップショット1の事を指します。


ちなみに、ファイルサイズxですが、最初のスナップショットは、基本となるディスクファイルに全てデータが入ってる状態です。
ホストOS側から見ればスナップショットファイルは少しの容量がありますが、ゲストOSから見れば空です。
なのでファイルサイズxは、実質0のような物と考えられます。

▼スナップショット1
  最新の状態(変更)

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y スナップショット1を取った時以降の変更分がそのまま書き込まれる。

この状態で仮想マシンを起動すると、最新のスナップショットファイルにデータが書き込まれ、最新の状態(変更)というステータスに変わります。
これは、基本となるディスクファイルか、スナップショットが複数ある場合は、最新より1個古いスナップショットを比較をして、変更があるかを見ているようです。

▼スナップショット1
  ▼スナップショット2
    最新の状態

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y
▼スナップショット1
  ▼スナップショット2
    最新の状態(変更)

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y+z zがスナップショット2を取った時以降の変更分

もう文章よりも見てもらったほうが早いですね。
大体こんなような動きをしているようです。

最新のスナップショットの状態に戻す
▼スナップショット1
  ▼スナップショット2
    最新の状態(変更)

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y+z
▼スナップショット1
  ▼スナップショット2
    最新の状態(変更)

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y

この時、最新の状態(変更)を選択して、最新のスナップショットの状態に戻すと、スナップショット2のファイルが、スナップショット1のファイルで上書きされたような動きをします。

最新のスナップショットと状態を破棄
▼スナップショット1
  ▼スナップショット2
    最新の状態(変更)

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y+z
▼スナップショット1

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y

最新の状態(変更)を選択して、最新のスナップショットと状態を破棄すると、スナップショット2のファイルが削除されます。

選択したスナップショットを破棄
▼スナップショット1
  ▼スナップショット2
    ▼スナップショット3
      最新の状態

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y+z
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y+z
▼スナップショット1
  ▼スナップショット3
    最新の状態

.VirtualBox/HardDisks/example.vdi
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-1}.vdi //ファイルサイズはx+y
.VirtualBox/Machines/仮想マシン名/Snapshots/{id-2}.vdi //ファイルサイズはx+y+z

スナップショット2を選択して、選択したスナップショットを破棄すると、スナップショット2のファイルが削除されます。

スナップショットがない場合

スナップショットなしの仮想マシンを起動して、色々と書込みをしましたが .VirtualBox/Machines/仮想マシン名/ に Snapshots ディレクトリ自体が存在せず、.VirtualBox/HardDisks/ にあるディスクファイルにデータが書き込まれているようです。
なので、最新の状態(変更)というステータスは出てくる事が無く、巻き戻す事は出来ません。
何かを試してはインストール直後に戻したいといった事がある場合は、インストール直後にまずスナップショットを取る必要があります。

*1:ある程度予測で書いています。