web-dev-qa-db-ja.com

libvirtおよびqemu / kvm-snapshotオプション

Libvirtを使用して、QEMUの「-snapshot」オプションを使用したいと思います。そうすれば、マシンがシャットダウンしたときに、行われたすべてのディスク変更が破棄されます。

-snapshotオプションのマニュアルは次のとおりです。

ディスクイメージファイルの代わりに一時ファイルに書き込みます。この場合、使用するrawディスクイメージは書き戻されません。ただし、C-a sを押すと、強制的に書き戻すことができます。

私が望むことをほぼ実行する同様の機能(qcow2オーバーレイイメージ、libvirtバッキングストア)が存在しますが、違いは、VMを起動するたびに新しい環境が必要なことです。これは可能ですか?

3
user34480

Libvirtがまだサポートしていないコマンドラインスイッチを追加する唯一の方法は、ラッパースクリプトを作成し、代わりにそれを使用するようにVMの構成を変更することです。例えば、

 cat>/usr/local/bin/qemu-snapshot << 'END' 
#!/ bin/sh 
 exec/usr/bin/qemu "$ @" -snapshot 
終わり
 chmod + x /usr/local/bin/qemu-snapshot
 virsh -c qemu:/// system edit my_vm 
 change 
 <emulator>/usr/bin/qemu </ emulator> 
 to 
 <emulator>/usr/local/bin/qemu-snapshot </ emulator> 

(それは可能性があります /usr/bin/kvmまたはそのようなもの。)

4
ephemient

Kvmのモニターを送信する必要がありますcommit all CTRL + a ..と同等にします。

1
dgeo

スナップショットの変更をディスクimgにコミットする方法を理解しましたか? C-asはしゃがんでいないようです。試しても、ctrl ctrl ctrl-as。 virshにもcommitコマンドはありません。

あなたがそれを理解したならば、それを伝えることは非常に役に立ちます! :D

0
Jonathan

注意

xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0

ヘッダーで、それを調べてください。これはほとんど機能します!

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>...</name>
  <memory unit='KiB'>...</memory>
  <os>
    <type Arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
  </os>

  <qemu:commandline>
     <qemu:arg value='-snapshot'/>
  </qemu:commandline>

  <devices>
    <emulator>/usr/bin/kvm</emulator>

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/tmp/some/existing/image.qcow2'/>
      <target dev='hda' bus='ide'/>
<!--
    https://bugzilla.redhat.com/show_bug.cgi?id=832194
      <transient />
-->
    </disk>
  </devices>
</domain>

残念ながら、このhapen:

internal error: process exited while connecting to monitor: qemu-system-x86_64: -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1: Device needs media, but drive is empty
qemu-system-x86_64: -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1: Device initialization failed.
qemu-system-x86_64: -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1: Device 'ide-hd' could not be initialized

しかしとにかく、これはカスタムqemu引数を渡すためのはるかにクリーンな方法です

0
socketpair