web-dev-qa-db-ja.com

kvm-snapshotsはどこに保存されますか?

私はKVM/ubuntuでいくつかのVMを実行しています。これらはすべて-snapshotパラメータ(VMは、再起動後に破棄される可能性のあるいくつかのもののみを計算します)。

私が読んだドキュメントのうち、変更はイメージに書き戻されませんが、一時ファイルに保存され、シャットダウン後に削除されます。

さて、これらの「一時ファイル」はファイルシステムのどこに保存されているのだろうか?

4
bmaeser

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)
3
ooshro

「-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プロセスが終了するまでファイルは存続します。そうして初めて、「削除された」ファイルは本当に削除され、そのファイルが占めていたスペースは空きスペースとしてファイルシステムに戻されます。

2

上記で使用した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アクティビティに関連する一時ファイルも存在するディレクトリと同じになります。

1
slm

スナップショットは、構成する場所に保存されます。私のF14では/var/lib/libvirt/imagesにありますが、virt-managerまたはvirshのストレージドメインを好きなように使用できます。

0
dyasny

私は同じものを調べていて、ハードドライブのどこにもそれらを見つけることができなかったので、それらはメモリに残っていると思いますか?それはまた、なぜそれらが永続的でないのかを説明するでしょう。

それらをディスクに書き込みたい場合は、save/restoreコマンドを使用してください。ここでパスを指定できます。

0
Ernesto