RHEL9でのKVMスナップショット作成

今運用している環境は、一度動き始めると変更が殆ど入らないので年一回の計画停電のときにqcow2ファイルのbackupを取って終わりにしていたのだけれど、一部の仮想マシンはスナップショットが必要になったので簡単に調べた。

内部スナップショット

スナップショットのファイルをqcow2 ファイル内に保存する。
従って、スナップショットを作成する度に、/var/lib/libvirt/images以下のqcow2ファイルが大きくなっていく。20GBのqcow2ファイルでスナップショットを1回作成すると5GBほどqcow2のファイルサイズが大きくなる。
仮想マシンマネージャーやCockpitのWebGUIでスナップショットを保存すると、内部スナップショットとして扱われる。
ただし、内部スナップショットはRHEL9で非推奨で「Red Hat は内部スナップショットの完全なテストとサポートを提供していません。」と公式ドキュメントに記載がある。
また「警告 実稼働環境では内部スナップショットを使用しないでください。」とまで書かれている。
従って、基本的に外部スナップショットを使うのが良さそう。

外部スナップショット

元のqcow2ファイルを読み込み専用とし、それとは別に新しいqcow2ファイルを作成し差分を記録していく。
RHEL9では以下の条件を満たす場合サポートされる。

ホストが RHEL 9.4 以降を使用している。
仮想マシンがファイルベースのストレージを使用している。
次のいずれかの条件の下で仮想マシンのスナップショットを作成する。

仮想マシンがシャットダウンされている。
仮想マシンが実行中の場合は、--disk-only --quiesce オプションまたは --live --memspec オプションを使用する。

ファイルは、/var/lib/libvirt/imagesに書き出される。Testguest2.Snapshot2という命名形式

スナップショットの作成方法

RHEL8までは、Virtual Machine ManagerのGUIで[仮想マシンのスナップショットを監理]からスナップショットの作成ができる。
RHEL9移行はVirtual Machine Managerに加えて、CockpitのWebGUI上でもスナップショットが作成できる。
この場合は内部スナップショットとなる。

CLIで外部スナップショットを作成する

# virsh snapshot-create-as Testguest2 Snapshot2 "clean system install" --disk-only --quiesce
Domain snapshot Snapshot2 created.
snapshot-create-asコマンドで外部スナップショットが作成される。
# virsh snapshot-list
で作られたスナップショットを確認できる。
# virsh snapshot-dumpxml | grep external
で作られたスナップショットが外部であることを確認できる。

少なくともRHEL7系ではsnapshot=externalを指定しないと外部スナップショットとならなかったようだ。
RHEL9系では明示的にオプションを指定せずともデフォルトでsnapshot=externalが指定されているようだ。

雑感

公式ドキュメントを読むと、やはり動作状態のメモリ記録が難しいようで、仮想マシンを止めて実行するのが確実。
Webサイトによっては仮想マシンマネージャーでサポートされていることを理由に、外部スナップショットより内部スナップショットを推奨するような書かれ方をしているが、あくまで公式ドキュメントでは非推奨となっているところに注意。
あと、スナップショットを保存するとEthernetのLinkがダウンするので、なんとも、、、思っていたよりスナップショットって使いにくいなという印象。確かに公式に稼働環境で使うなと言われる所以だなと、、、