名前つきスナップショット

-snapshotオプションを使わずに、一時ファイルに名前を付けて使用する方法があります。
まず、RedHatのハードディスクイメージがあるとして、それに対する一時ファイルredhat-tmp.qcowを作ります。フォーマットは、QCOWもしくはQCOW2を選びます。
DOS> qemu-img create -b redhat.img -f qcow redhat-tmp.qcow
その後、作った一時ファイルをハードディスクとして指定してQEMUを起動します。
DOS> qemu -L ../pc-bios -hda redhat-temp.qcow
すると、RedHatが立ち上がります。
変更点は、redhat-temp.qcowに書き込まれますので、ベースファイルredhat.imgは保護されています。
変更を反映したい場合は、QEMUモニターでcommitします。
(qemu) commit hda
名前を付ける利点は、QEMUを終了しても、一時ファイルを指定することで変更点が残ることです。作業を継続することができます。また、元のハードディスクに変更を反映することが出来ます。

-snapshotオプションの使い方

使い方は、
DOS> qemu -L ../pc-bios -hda redhat.img -snapshot
とやると、一時ファイルがC:Documents and Settings(user name)Local SetttingsTempに出来ます。ハードディスクの形式は、RAWフォーマットでもいいです。
作業をやったあと、QEMUモニターで、
(qemu) commit hda
をするまで、ハードディスクイメージには変更したところが書き込まれません。
逆に言うと、commitしないでQEMUを終了してしまうと、変更点がすべて消えてしまいます。
もし、2つのハードディスクを使っている場合は、それぞれ別の一時ファイルが作られます。commit時に、変更点を反映するハードディスクを指定することが出来ます。

-snapshotオプション

やっと-snapshotオプションが動き出した。多分大丈夫だと思うけれど、バグは取れたと思う。
オブジェクトの生成と消失を確実に管理できるとプログラムは安定する気がする。
WaitForMultipleObjectsは、待っているハンドルの優先順位が無いです。だから、イベントを受け取ったらなるべく早く配列から取り除いてあげないと、思った動作をしないことがわかった。複数のイベントをネストさせて、新しく登録したイベントから検出させるとかできないんですよね。
調べてみると、スナップショットを使うには3通りほど方法があります。-snapshotオプションを使う方法、一時ファイルに名前をつける方法、QCOW2ファオーマットを使ってVMスナップショットを使う方法です。
使い方を整理してみようと思います。