KVMで仮想化環境 - 仮想マシン作成~スナップショット取得

概要

こちらのブログで作成した仮想化環境に仮想マシンを作成します。また、CLIでスナップショットの取得を行います。
仮想ホスト側でネットワーク設定でブリッジ等を作成していない状態ですので、作成した仮想マシンから外部へは通信可能ですが、外部から仮想マシンへの通信はできない状態になります。

  • 環境
    • ESXi上に構築したRHEL9.4にKVMを構築 (KVM on ESXi)
  • OS (仮想ホスト)
    • Red hat Enterprise Linux 9.4
  • 主要ソフトウェア
    • qemu-kvm-8.2.0-11.el9_4.3.x86_64
    • libvirt-10.0.0-6.3.el9_4.x86_64
    • virt-install-4.1.0-5.el9.noarch
    • virt-viewer-11.0-1.el9.x86_64

仮想マシンン作成

Cockpit画面で左メニューの「仮想マシン」を選択し、「仮想マシンの作成」ボタンをクリックします。

仮想マシンの新規作成画面が出るので適切な内容を入力します。

・インストールタイプ
インストールタイプにはインストール元のソースを指定します。
ローカルインストールメディアを指定する場合はKVMサーバにisoファイルを配置しておきます。

・インストールソース
インストールソースにはisoファイルのパスを指定します。上記画像の例では、ファイルの所有者をqemuとして/var/iso/下にisoファイルを配置しています。

・オペレーティングシステム
オペレーティングシステムは自動的に入力されます。自動的に入力されない場合はプルダウンから選択します。

・ストレージ
ストレージはqcow2またはrawから選びます。
検証環境など性能を求められない環境ではqcow2で問題ありません。
・qcow2:必要に応じてディスクを拡張する方式。スナップショットを取得可能。ディスク拡張時にI/Oが劣化する。
・raw:最初に指定容量を確保する。パフォーマンスに優れている。スナップショット機能が制限される。

すべて入力したら「作成して実行する」をクリックします。
仮想マシンが作成・起動され、仮想マシンの詳細画面に移動するとコンソール画面で仮想マシンの起動画面が表示されます。
「展開」をクリックすると全画面表示になります。この画面でOSのセットアップが可能になります。

作成した仮想マシンのディスクイメージはデフォルトで下記のパスに保存されます。

# ls -l /var/lib/libvirt/images/
-rw-------. 1 qemu qemu 32217432064  7月 30 14:37 testvm01.qcow2

スナップショット取得(RHEL9.4以降)

RHEL9.4以降では、スナップショット機能をGUI(Cockpit)から使用可能です。RHEL9.3以前、RHEL8ではGUIではメニューがなく、またRed hatのドキュメントにも記載がありません。RHEL9.3以前でもコマンドラインからのスナップショット取得は可能ですが少し注意が必要です。

スナップショットには内部と外部の2種類あります。RHEL9.4では外部スナップショットが推奨されています。内部スナップショットは非推奨です。
・内部スナップショット
元と同じVMイメージファイル内にsnapshot作成、以降の変更差分をそのまま記録。
・外部スナップショット
snapshot作成時点で元のVMイメージファイルを固定し、新しく別のイメージファイルにそれ以降の変更差分を記録。

RHEL9.4のGUI(Cockpit)では外部スナップショットの取得が可能です。GUIでのスナップショット取得は画面に表示される通りに実施するだけの簡単操作ですので、ここではコマンドで取得する方法を記載します。

まずは稼働中の仮想マシンを確認します。

# virsh list --all
 Id   名前       状態
-------------------------
 4    testvm01   実行中

稼働中の場合はシャットダウンします。

# virsh shutdown testvm01
ドメイン 'testvm01' はシャットダウンされています
# virsh list --all
 Id   名前       状態
-------------------------------
 -    testvm01   シャットオフ

スナップショットを取得します。

# virsh snapshot-create-as testvm01 testvm01-snap01 --atomic --disk-only
ドメインのスナップショット testvm01-snap01 が作成されました

virsh snapshot-create-asの後ろにドメイン名(仮想マシン名)とスナップショット名を指定します。
atomicオプションをつけることで成功または変更なしでの失敗を保証します。
disk-onlyオプションはメモリ状態を含まないスナップショットの作成になりますが、このオプションをつけないと外部スナップショット(別ファイル保存)になりません。

作成されたスナップショットを確認します。

# virsh snapshot-list testvm01
 名前              作成時間                    状態
--------------------------------------------------------
 testvm01-snap01   2024-08-22 12:22:09 +0900   shutoff

作成された外部スナップショットファイルはデフォルトでVMファイルと同じ場所に保存されます。

# ls -l /var/lib/libvirt/images/
合計 2281324
-rw-------. 1 root root 32217432064  8月 23 10:03 testvm01.qcow2
-rw-r--r--. 1 root root      197088  8月 23 10:36 testvm01.testvm01-snap01

作成されたスナップショットが外部スナップショットであることを確認します。

# virsh snapshot-dumpxml testvm01 testvm01-snap01 | grep external
    <disk name='vda' snapshot='external' type='file'>。

snapshot='external'と表記がされていれば外部スナップショットになります

現在使用されているスナップショット(書き込みが行われているファイル)を確認します。

# virsh snapshot-current testvm01 --name
testvm01-snap01

複数スナップショットがある場合はtreeオプションを使用して階層表示することも可能です。

# virsh snapshot-create-as testvm01 testvm01-snap02 --atomic --disk-only
ドメインのスナップショット testvm01-snap02 が作成されました

# virsh snapshot-list testvm01
 名前              作成時間                    状態
--------------------------------------------------------
 testvm01-snap01   2024-08-23 10:36:55 +0900   shutoff
 testvm01-snap02   2024-08-23 11:10:11 +0900   shutoff

# virsh snapshot-list testvm01 --tree
testvm01-snap01
  |
  +- testvm01-snap02

スナップショットを指定して削除するにはsnapshot-deleteを使用します。削除の確認は出ませんので注意して削除対象を指定する必要があります。

# virsh snapshot-delete testvm01 testvm01-snap01
ドメインのスナップショット testvm01-snap01 が削除されました

# virsh snapshot-list testvm01
 名前              作成時間                    状態
--------------------------------------------------------
 testvm01-snap02   2024-08-23 11:10:11 +0900   shutoff

# virsh snapshot-list testvm01 --tree
testvm01-snap02

# ls -l /var/lib/libvirt/images/
合計 2281324
-rw-------. 1 qemu qemu 32217432064  8月 23 10:03 testvm01.qcow2
-rw-r--r--. 1 root root      197088  8月 23 12:14 testvm01.testvm01-snap02

指定のスナップショットに戻すには、snapshot-revertを使用します。

# virsh snapshot-create-as testvm01 testvm01-snap01 --atomic --disk-only
# virsh snapshot-create-as testvm01 testvm01-snap02 --atomic --disk-only
# virsh snapshot-create-as testvm01 testvm01-snap03 --atomic --disk-only
# virsh snapshot-create-as testvm01 testvm01-snap04 --atomic --disk-only

# ls -l /var/lib/libvirt/images/
合計 2281912
-rw-------. 1 root root 32217432064  8月 23 10:03 testvm01.qcow2
-rw-r--r--. 1 root root      197088  8月 26 10:16 testvm01.testvm01-snap01
-rw-r--r--. 1 root root      197088  8月 26 10:17 testvm01.testvm01-snap02
-rw-r--r--. 1 root root      197088  8月 26 10:17 testvm01.testvm01-snap03
-rw-r--r--. 1 root root      197088  8月 26 10:17 testvm01.testvm01-snap04

# virsh snapshot-list testvm01 --tree
testvm01-snap01
  |
  +- testvm01-snap02
      |
      +- testvm01-snap03
          |
          +- testvm01-snap04
          
# virsh snapshot-current testvm01 --name
testvm01-snap04

# virsh snapshot-revert testvm01 testvm01-snap02
ドメインスナップショット testvm01-snap02 が復元されました

# virsh snapshot-current testvm01 --name
testvm01-snap02

KVMで仮想マシンの作成からスナップショットの取得まで実施してみました。
RHEL9.4からGUIでのスナップショットの取得が可能になり、より簡単に運用が行えるようになっています。しかし、スナップショットの取得には注意事項が多いので、Red hatが推奨している"停止時"・"外部スナップショット"のみを使用するのが安全です。

参考サイト

Red Hat Document 仮想化の設定および管理

お問い合わせ

弊社では様々なサービスを取り扱っております。
詳細はサービス一覧からご覧ください。

お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]

お問い合わせ
  • X