私はKVM/ubuntuでいくつかのVMを実行しています。これらはすべて-snapshot
パラメータ(VMは、再起動後に破棄される可能性のあるいくつかのもののみを計算します)。
私が読んだドキュメントのうち、変更はイメージに書き戻されませんが、一時ファイルに保存され、シャットダウン後に削除されます。
さて、これらの「一時ファイル」はファイルシステムのどこに保存されているのだろうか?
Lsofを使用してスナップショットストレージを見つけてください。
# ps aux | grep kvm
$PID ? Sl 5289:40 /usr/bin/kvm ...
# lsof -n -p $PID
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
または1つのコマンド:
# lsof -n -p $(ps ax | grep [k]vm | awk '{print $1}' | head -1)
「-snapshot」がその変更をどこに保存するかを自分で考えたところ、最終的にどこにあるかがわかりました。
つまり、環境変数TMPDIRにディレクトリのパスを設定すると、一時データがそこに格納されます。
それ以外の場合は、/ tmpに保存します。
したがって、一時スナップショットを/ tmpではなく/ var/tmp/kvmに保存する場合は、次のようにqemuを実行します。
$ TMPDIR=/var/tmp/kvm qemu-system-x86_64 -enable_kvm ...
または、最初に変数を「エクスポート」することもできます。
$ export TMPDIR=/var/tmp/kvm
$ qemu-system-x86_64 -enable_kvm ...
複数のVMを起動する場合は、呼び出しごとに変数を指定する必要がないため、これが適している場合があります。
また、VMのシャットダウン時に変更を失うのではなく、変更を保持できるようにする場合は、qemuオプションに「-no-shutdown」を追加することも忘れないでください。
-no-shutdownを使用すると、シャットダウン後にvmが停止状態になりますが、vmプロセスは存続します。
これにより、KVMモニターコンソールに接続し、「commit」コマンドを発行して、一時ファイルからのすべての変更をVMイメージファイルに書き戻すことができます。その後、実際にVMプロセスを終了する「quit」コマンドを発行します。
「-no-shutdown」がないと、「commit」コマンドを発行する機会がありません。これがないと、VMプロセスがシャットダウンすると、一時ファイルのすべての変更が失われます。
また、別のメモ:VMが "-snapshot"で始まったら、$ TMPDIRで指定されたディレクトリにファイルが表示されないことを不思議に思わないでください。
ファイルはそこにありますが、qemuはファイルを作成した直後にファイルを削除するため、ディレクトリリストには表示されません。
ただし、qemuプロセスは引き続きファイルへの参照を保持しているため、qemuプロセスが終了するまでファイルは存続します。そうして初めて、「削除された」ファイルは本当に削除され、そのファイルが占めていたスペースは空きスペースとしてファイルシステムに戻されます。
上記で使用したlsof
コマンドのもう少し簡潔なバージョンを次に示します。このバリアントにはいくつかの改善があります。 1つは、すべてのKVM VMを一覧表示することです。
$ lsof -n -p $(pgrep kvm | tr '\012' ,)
次に、これらの拡張子を使用してVMイメージに名前を付けることを知っている場合は、出力をgrepして.img
および.qcow2
ファイルを探すことができます。
$ Sudo lsof -n -p $(pgrep kvm | tr '\012' ,) |grep -E ".img|.qcow2"
qemu-kvm 3836 root 11u REG 253,0 10737418240 19169281 /var/lib/libvirt/images/vm1.img
qemu-kvm 3895 root 11u REG 253,0 48318382080 19890183 /kvm/vm2.img
qemu-kvm 3924 root 11u REG 253,0 10737418240 19890185 /kvm/vm3.img
qemu-kvm 13594 root 11u REG 253,0 43881005056 69173572 /var/lib/libvirt/images/vm4.qcow2
また、これについて調べてlibvirtd
にクエリを実行し、使用可能なストレージプールを確認することもできます。
$ Sudo virsh pool-list
Name State Autostart
-----------------------------------------
default active yes
$ Sudo virsh vol-list default
Name Path
-----------------------------------------
vm1-d-disk0 /var/lib/libvirt/images/vm1-d-disk0
vm2-d-disk0 /var/lib/libvirt/images/vm2-d-disk0
vm3.img /var/lib/libvirt/images/vm3.img
...
したがって、default
プールを使用しているVMの場合、デフォルトのパスは/var/lib/libvirt/images
になります。これは、-snapshot
アクティビティに関連する一時ファイルも存在するディレクトリと同じになります。
スナップショットは、構成する場所に保存されます。私のF14では/var/lib/libvirt/images
にありますが、virt-manager
またはvirsh
のストレージドメインを好きなように使用できます。
私は同じものを調べていて、ハードドライブのどこにもそれらを見つけることができなかったので、それらはメモリに残っていると思いますか?それはまた、なぜそれらが永続的でないのかを説明するでしょう。
それらをディスクに書き込みたい場合は、save/restoreコマンドを使用してください。ここでパスを指定できます。