「インストール - KVM」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
252行目: 252行目:
復元されたSUSEを起動する。<br>
復元されたSUSEを起動する。<br>
  sudo virsh start SUSE15
  sudo virsh start SUSE15
<br><br>
== 仮想マシンのスナップショット ==
===== スナップショットの概要 =====
KVMにおけるスナップショットとは、仮想マシンのある時点の状態を保持する機能である。
スナップショットは、一般的なバックアップのように全てのデータを保持せずに、仮想マシン上の変更が発生した時に差分のみを保持する。
スナップショットは、仮想マシン本体またはスナップショットファイルのいずれかが破損すると、元の状態に戻すことはできなくなるので、
バックアップの代わりとして利用する場合は注意すること。
スナップショットの作成手順として、親スナップショット(external)を作成して、それから派生する子スナップショット(internal)を作成する。
<br>
===== 親スナップショット(external)の取得 =====
<code>virsh snapshot-create-as</code>コマンドを使用することで、仮想マシンの親スナップショット(external)を取得することができる。
スナップショットの取得は、仮想マシンが起動中でも可能である。
sudo virsh snapshot-create-as <仮想マシン名> <スナップショット名> "<コメント>" --disk-only --atomic
<br>
===== 親スナップショット(external)の復元 =====
親スナップショットの復元は、<code>virsh snapshot-revert</code>コマンドを使用する。
親スナップショットの復元については、子スナップショット(internal)を取得してから行うこと。
sudo virsh snapshot-revert <仮想マシン名> <スナップショット名>
<br>
===== 親スナップショット(external)の削除 =====
親スナップショット(external)を削除する場合は、<code>--metadata</code>オプションを付けることで削除できる。
sudo virsh snapshot-delete <仮想マシン名> <親スナップショット名> --metadata
<br>
===== 子スナップショット(internal)の取得 =====
親スナップショット(external)を取得した状態で、以下のコマンドを実行すると、スナップショットを取得することができる。
なお、スナップショット名は親スナップショット(external)や他の子スナップショット(internal)と被らないようにすること。
sudo virsh snapshot-create-as <仮想マシン名> <子スナップショット名> "<コメント>"
<br>
===== 子スナップショット(internal)の復元 =====
特定のスナップショットに復元するには、<code>virsh snapshot-revert</code>コマンドを使用する。
指定するスナップショットは、子スナップショット(internal)を指定するようにする。
sudo virsh snapshot-revert <仮想マシン名> <子スナップショット名>
<br>
===== 子スナップショット(internal)の削除 =====
<code>virsh snapshot-delete</code>コマンドを実行することで、スナップショットを削除することができる。
sudo virsh snapshot-delete <仮想マシン名> <子スナップショット名>
<br>
===== スナップショットの確認 =====
sudo virsh snapshot-list <仮想マシン名>
<br>
# 出力例
  Name                Creation Time            State
------------------------------------------------------------
  SN01_KVM_SUSE        2020-01-01 00:00:00 +0900 shutoff
<br>
===== スナップショットのツリー表示 =====
スナップショットの派生関係を確認する場合、<code>--tree</code>オプションを付けることで確認できる。
sudo virsh snapshot-list <仮想マシン名> --tree
<br>
# 出力例
SN01_KVM_SUSE
  |
  +- SN02_KVM_SUSE
      |
      +- MariaDB_KVM_SUSE
      +- PostgreSQL_KVM_SUSE
<br>
===== 現在の状態が、どのスナップショットからの派生か確認する =====
<code>virsh snapshot-list</code>コマンドに<code>--tree --current</code>オプションを使用することで確認することができる。
sudo virsh snapshot-list <仮想マシン名> --tree --current
<br>
# 出力例
MariaDB_KVM_SUSE
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]]
[[カテゴリ:CentOS]][[カテゴリ:SUSE]]

2020年8月1日 (土) 10:08時点における版

概要

ここでは、KVM(Kernel-based Virtual Machine)とQEMUのインストールと仮想マシンの設定方法を記載する。
搭載しているCPUが仮想化機構(Intel VTやAMD-V等)を備えている必要がある。


KVMとQEMUのインストール

KVMとQEMUをインストールする。

# CentOS
sudo yum install qemu-kvm libvirt virt-install virt-manager

# SUSE
sudo zypper install qemu-kvm libvirt virt-install virt-manager


モジュールが読み込まれているか確認する。

lsmod | grep kvm


正常に読み込まれている場合は、以下のように表示される。

kvm_intel             241664  0
kvm                   704512  1 kvm_intel
irqbypass              16384  1 kvm


KVMを起動および自動起動する場合は、以下のコマンドを実行する。

sudo systemctl start libvirtd
sudo systemctl enable libvirtd



仮想ネットワークの設定

CentOS

仮想マシンがブリッジ接続できるように、ブリッジネットワークを構成する。
ens2のインターフェース名の部分は環境によって異なるため、自身の環境に読み替えること。
ブリッジbr0を追加する。

nmcli connection add type bridge autoconnect yes con-name br0 ifname br0

Connection 'br0' (a7fa989a-798e-40ac-acc4-3d1733189b82) successfully added.


br0のIPアドレスを設定する。

nmcli connection modify br0 ipv4.addresses 10.0.0.30/24 ipv4.method manual


br0のゲートウェイを設定する。

nmcli connection modify br0 ipv4.gateway 10.0.0.1


br0のDNSを設定する。

nmcli connection modify br0 ipv4.dns 10.0.0.1


既存のインターフェースは一旦削除する。

nmcli connection del ens2


br0のメンバーとして再度追加する。

nmcli connection add type bridge-slave autoconnect yes con-name ens2 ifname ens2 master br0


CentOSを再起動する。

reboot


正常にbr0が起動しているか確認する。

ip a


SUSE

仮想マシンをブリッジ接続する場合は、NetworkManagerをwickedに変更して、ブリッジネットワークを構成する。

sudo mv /etc/sysconfig/network/ifcfg-eth0 /etc/sysconfig/network/ifcfg-br0
sudo vi /etc/sysconfig/network/ifcfg-br0


以下の内容を、/etc/sysconfig/network/ifcfg-br0ファイルに追記する。

# 最終行に追記
BRIDGE='yes'
BRIDGE_FORWARDDELAY='0'
BRIDGE_PORTS='eth0'
BRIDGE_STP='off'


次に、以下の内容を、/etc/sysconfig/network/routesファイルに追記する。

sudo vi /etc/sysconfig/network/routes


# 最終行:br0のデフォルトゲートウェイを追記する
default 192.168.1.1 - br0


wickedサービスを再起動する。

sudo systemctl restart wickedd wicked


正常にbr0が起動しているか確認する。

ip a



仮想マシンの作成(CLI)

仮想マシンをインストールして作成する。
ここでは、仮想マシンとしてSUSE Linxu Enterprise Server 15(以降、SUSEという)をインストールする。

取得したSUSEのisoファイルを/tmpディレクトリに配置して、テキストモードでインストールする。
コンソールからでもPutty等のエミュレータ経由からでも実行できる。
初期設定では、仮想マシンの保管場所(ストレージプール)は、/var/lib/libvirt/imagesディレクトリであるが、ここでは、別の場所に新たにストレージプールを作成して進める。

ストレージプールディレクトリの作成

まず、ストレージプールディレクトリを作成する。

sudo mkdir -p /var/kvm/images


仮想マシンの作成とインストール
sudo virt-install \
--name sle15 \
--ram 4096 \
--disk path=/var/kvm/images/sle15.img,size=30 \
--vcpus 2 \
--os-type linux \
--os-variant sle15 \
--network bridge=br0 \
--graphics none \
--console pty,target_type=serial \
--location /tmp/SLE-15-Installer-DVD-x86_64-GM-DVD1.iso \
--extra-args 'console=ttyS0,115200n8 serial'

Starting install...     # インストールが開始される


上記の例で指定しているオプションの意味を以下に示す。その他多数のオプションは、man virt-installで確認できる。

  • --name
    仮想マシンの名前を指定する。
  • --ram
    仮想マシンのメモリ容量を指定する。(単位は、M)
  • --disk path=xxx ,size=xxx
    [path=]で仮想マシンのディスクの保管場所を指定する。(初期設定では、/var/lib/libvirt/imagesディレクトリ)
    [size=]で仮想マシンのディスク容量を指定する。(単位は、G)
  • --vcpus
    仮想マシンの仮想CPU数を指定する。
  • --os-type
    仮想マシンのOタイプを指定する。
  • --os-variant
    仮想マシンの種類を指定する。
    osinfo-query osで指定可能な種類を確認できる。
  • --network
    仮想マシンのネットワークタイプを指定する。
    ここでは、仮想マシンにブリッジ接続させるため、--network bridge=br0としている。
    br0は、上記セクションの[仮想ネットワークの設定]で設定したブリッジインターフェースを指定している。
    ホストがNICを複数持っていて、かつ、ブリッジインターフェースを複数設定しており、仮想マシンからも同様に複数のネットワークインターフェースを使用する場合は、改行して複数指定する。
  • --graphics
    グラフィクスを指定する。
    noneを指定するとグラフィックスを使用しない。
  • --console
    コンソールタイプを指定する。
  • --location
    インストール元を指定する。
  • --extra-args
    インストール時にカーネルに渡すパラメータを指定する。


インストーラ起動後は、CLIでインストール作業を進める。CLIもGUIと同様なのでインストール過程は省略する。
インストールが完了すると、一旦再起動がかかり、以下のようにターミナル上に仮想マシンのログインプロンプトが表示される。

Welcome to SUSE Linux Enterprise Server 15  (x86_64) - Kernel 4.12.14-25.25-default (ttyS0).

eth0: 10.0.0.204 fe80::5054:ff:feff:cfce

linux-6am4 login:


ホストと仮想マシンの切り替え

仮想マシン側からホスト側へのコンソールの切り替えは、[Ctrl]キー + []]キーである。
また、ホスト側から仮想マシン側へのコンソールの切り替えは、virsh console <仮想マシン名>]と入力して実行する。

仮想マシンの複製

作成した仮想マシンは容易に複製できる。

sudo virt-clone --original sle15 --name template --file /var/kvm/images/template.img

Allocating 'template.img' | 30 GB 00:00:02
Clone 'template' created successfully.


# ディスクイメージ
ll /var/kvm/images/template.img

-rw------- 1 root root 2835087360 Jan 18 19:09 /var/kvm/images/template.img


# 定義ファイル
ll /etc/libvirt/qemu/template.xml

-rw------- 1 root root 3681 Jan 18 11:09 /etc/libvirt/qemu/template.xml



仮想マシンの作成(GUI)

ここでは、GUIの操作で、仮想マシンを作成およびインストールする。

  1. ターミナルにてsudo virt-managerコマンドを実行して、Virtual Machine Managerを起動する。
    左上のPCアイコンまたは[ファイル] - [新しい仮想マシンの作成]を選択して、新規仮想マシン作成ウィザードを開く。
  2. [新しい仮想マシン]画面が開くので、仮想マシンのインストール元を指定する。
    インストールメディアまたはISOファイルとアーキテクチャを選択して、OSのタイプとバージョンを指定する。
  3. 仮想マシンのメモリ容量と仮想CPU数を指定する。
  4. 仮想ディスクの場所や容量を指定する。
  5. 仮想マシン名を入力する。また、これまでの設定内容を確認しておく。
  6. インストーラが起動するので、画面に従ってインストールする。



KVMの操作方法

Libvirtに含まれるVirshコマンドを使用した仮想マシンの操作方法を記載する。

  • 仮想マシンを起動する。
sudo virsh start <仮想マシン名>


  • 仮想マシンを起動して同時にコンソールに接続する。
sudo virsh start <仮想マシン名> --console


  • 仮想マシンを停止する。
sudo virsh shutdown sle15


  • 仮想マシンを強制停止
sudo virsh destroy sle15


  • 仮想マシンをシステム起動時に自動起動の設定をする。
sudo virsh autostart sle15


  • 仮想マシンの自動起動設定を解除する。
sudo virsh autostart --disable sle15


  • 仮想マシンの一覧を表示する。
sudo virsh list


  • 全ての仮想マシンを一覧を表示する。
sudo virsh list --all


  • コンソールを切り替える。
    仮想マシン側からホスト側へのコンソールの切り替えは、 [Ctrl]キー + []]キーである。
    ホスト側から仮想マシン側へのコンソールの切り替えは、sudo virsh console <仮想マシン名>コマンドを実行する。


  • 他、多くのサブコマンドが用意されている。
sudo virsh --help



仮想マシンのバックアップおよび復元

ここでは、仮想マシンが以下の情報に基づいているとする。

ドメイン名(仮想マシン名) : SUSE15
イメージ名 : SUSE15.qcow2
設定ファイル(XML) : SUSE15.xml
バックアップ先 : /run/media/Storage1 (外付けSSD)


仮想マシンのバックアップ

仮想マシンを停止する。

sudo virsh shutdown SUSE15


設定ファイルをバックアップする。

sudo virsh dumpxml SUSE15 > /run/media/Storage1/SUSE15.xml


仮想マシンのイメージをバックアップする。

sudo cp -p <仮想マシンのイメージがあるディレクトリ>/SUSE.qcow2 /run/media/Storage1/.


また、各仮想マシンの定義ファイルは、/etc/libvirt/qemuディレクトリに存在する。
その定義ファイルを指定してvirsh defineコマンドを実行することで、仮想マシンをvirshコマンドで管理できるようになる。

sudo virsh define /etc/libvirt/qemu/<仮想マシン名>.xml


なお、この定義ファイルは直接編集せず、virsh editコマンドを使用して編集すること。
なぜなら、virsh editコマンドを使用することで、定義ファイルに誤りがあった場合にエラーを出力してくれるので安全である。

仮想マシンの復元

運用しているSSDとは別のSSDで復元する。
ここでは、外付けSSDを/run/media/Storage1にマウントしている。

バックアップした仮想マシンのイメージを復元する。

sudo cp -p <仮想マシンのイメージをバックアップしたディレクトリ>/SUSE.qcow2 <仮想マシンのイメージを保存するディレクトリ>/.


バックアップした設定ファイルを復元する。

sudo cp -p /run/media/Storage1/SUSE15.xml /etc/libvirt/qemu/.


復元した設定ファイルをKVMに反映する。

sudo virsh define /etc/libvirt/qemu/SUSE15.xml


バックアップに成功すると、以下のようなメッセージが出力される。

ドメイン SUSE が /etc/libvirt/qemu/SUSE15.xml から定義されました


復元されたSUSEを起動する。

sudo virsh start SUSE15



仮想マシンのスナップショット

スナップショットの概要

KVMにおけるスナップショットとは、仮想マシンのある時点の状態を保持する機能である。 スナップショットは、一般的なバックアップのように全てのデータを保持せずに、仮想マシン上の変更が発生した時に差分のみを保持する。

スナップショットは、仮想マシン本体またはスナップショットファイルのいずれかが破損すると、元の状態に戻すことはできなくなるので、 バックアップの代わりとして利用する場合は注意すること。

スナップショットの作成手順として、親スナップショット(external)を作成して、それから派生する子スナップショット(internal)を作成する。

親スナップショット(external)の取得

virsh snapshot-create-asコマンドを使用することで、仮想マシンの親スナップショット(external)を取得することができる。 スナップショットの取得は、仮想マシンが起動中でも可能である。

sudo virsh snapshot-create-as <仮想マシン名> <スナップショット名> "<コメント>" --disk-only --atomic


親スナップショット(external)の復元

親スナップショットの復元は、virsh snapshot-revertコマンドを使用する。 親スナップショットの復元については、子スナップショット(internal)を取得してから行うこと。

sudo virsh snapshot-revert <仮想マシン名> <スナップショット名>


親スナップショット(external)の削除

親スナップショット(external)を削除する場合は、--metadataオプションを付けることで削除できる。

sudo virsh snapshot-delete <仮想マシン名> <親スナップショット名> --metadata


子スナップショット(internal)の取得

親スナップショット(external)を取得した状態で、以下のコマンドを実行すると、スナップショットを取得することができる。 なお、スナップショット名は親スナップショット(external)や他の子スナップショット(internal)と被らないようにすること。

sudo virsh snapshot-create-as <仮想マシン名> <子スナップショット名> "<コメント>"


子スナップショット(internal)の復元

特定のスナップショットに復元するには、virsh snapshot-revertコマンドを使用する。 指定するスナップショットは、子スナップショット(internal)を指定するようにする。

sudo virsh snapshot-revert <仮想マシン名> <子スナップショット名>


子スナップショット(internal)の削除

virsh snapshot-deleteコマンドを実行することで、スナップショットを削除することができる。

sudo virsh snapshot-delete <仮想マシン名> <子スナップショット名>


スナップショットの確認
sudo virsh snapshot-list <仮想マシン名>


# 出力例
 Name                 Creation Time             State
------------------------------------------------------------
 SN01_KVM_SUSE        2020-01-01 00:00:00 +0900 shutoff


スナップショットのツリー表示

スナップショットの派生関係を確認する場合、--treeオプションを付けることで確認できる。

sudo virsh snapshot-list <仮想マシン名> --tree


# 出力例
SN01_KVM_SUSE
 |
 +- SN02_KVM_SUSE
     |
     +- MariaDB_KVM_SUSE
     +- PostgreSQL_KVM_SUSE


現在の状態が、どのスナップショットからの派生か確認する

virsh snapshot-listコマンドに--tree --currentオプションを使用することで確認することができる。

sudo virsh snapshot-list <仮想マシン名> --tree --current


# 出力例
MariaDB_KVM_SUSE