hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

virshコマンドの使い方



1 virshコマンドとは?

仮想マシンとハイパーバイザを管理するコマンドです。

2 検証環境

KVMホストのCentOS版数は以下のとおりです。

[root@kvm ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

カーネル版数は以下のとおりです。

[root@kvm ~]# uname -r
3.10.0-957.el7.x86_64

NetworkManagerサービスの状態を確認します。activeであることを確認します。

[root@kvm ~]# systemctl is-active NetworkManager
active

3 オプション一覧

virshコマンドのオプションは非常に多いので、ここでは、ネットワークに関する設定をおもに試したいと思います。なお、オプションは、virsh helpを実行すると表示されます。

[root@kvm ~]# virsh help
グループ別コマンド:

 Domain Management (ヘルプのキーワード 'domain'):
    attach-device                  XML ファイルによるデバイスの接続
    attach-disk                    ディスクデバイスの接続
    attach-interface               ネットワークインターフェースの接続

さらに、オプションの詳細を表示するには、以下のように実行します。

[root@kvm ~]# virsh help net-autostart
  名前
    net-autostart - ネットワークの自動起動

  形式
    net-autostart <network> [--disable]

  詳細
    システム起動時にネットワークを自動的に起動するよう設定します。

  オプション
    [--network] <string>  ネットワークの名前または UUID
    --disable        自動起動の設定解除

4 仮想マシンの各種情報を表示する方法

4.1 仮想マシン一覧を表示する方法(list)

listは実行中の仮想マシンを表示するオプションです。

[root@kvm ~]# virsh list
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中

--allオプションを付けると、シャットオフの仮想マシンも表示します。 serverが実行中で、routerがシャットオフであることがわかります。

[root@kvm ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中
 -     router                         シャットオフ

4.2 設定ファイルの出力方法(dumpxml)

dumpxmlは、仮想マシンの設定ファイルを出力するオプションです。

[root@kvm ~]# virsh dumpxml server
<domain type='kvm' id='1'>
  <name>server</name>
-snip-

4.3 IDの表示方法(domid)

domidは、仮想マシンのIDを表示するオプションです。

[root@kvm ~]# virsh domid server
1

4.4 情報の表示方法(dominfo)

dominfoは、仮想マシンの名前やPCU数等の情報を表示するオプションです。

[root@kvm ~]# virsh dominfo server
Id:             1
名前:         server
UUID:           66d60e60-2221-49d1-9939-d9a82b848a4e
OS タイプ:   hvm
状態:         実行中
CPU:            4
CPU 時間:     66.9s
最大メモリー: 4194304 KiB
使用メモリー: 4194304 KiB
永続:         はい (yes)
自動起動:   無効にする
管理済み保存: いいえ (no)
セキュリティモデル: selinux
セキュリティ DOI: 0
セキュリティラベル: system_u:system_r:svirt_t:s0:c351,c394 (enforcing)

4.5 状態の表示方法(domstate)

domstateは、仮想マシンの状態を表示するオプションです。

serverは実行中であることがわかります。

[root@kvm ~]# virsh domstate server
実行中

routerはシャットダウン中であることがわかります。

[root@kvm ~]# virsh domstate router
シャットオフ

4.6 UUIDの表示方法(domuuid)

domuuidは、UUIDの表示すりオプションです。

[root@kvm ~]# virsh domuuid server
66d60e60-2221-49d1-9939-d9a82b848a4e

4.7 名前の表示方法(domname)

domnameは、IDに対する仮想マシン名を表示するオプションです。

[root@kvm ~]# virsh domname 1
server

5 仮想マシンの起動、停止方法

5.1 起動方法(start)

仮想マシン一覧を確認します。serverが実行中、routerがシャットオフの状態であることがわかります。

[root@kvm ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中
 -     router                         シャットオフ

routerを起動します。

[root@kvm ~]# virsh start router
ドメイン router が起動されました

仮想マシン一覧を確認します。routerが実行中になったことがわかります。

[root@kvm ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中
 2     router                         実行中

5.2 停止方法(shutdown)

routerを停止してみます。

[root@kvm ~]# virsh shutdown router
ドメイン router はシャットダウン中です

仮想マシン一覧を確認します。routerがシャットオフになったことがわかります。

[root@kvm ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中
 -     router                         シャットオフ

6 仮想マシンの一時停止、再開方法

6.1 一時停止(suspend)

仮想マシン一覧を確認します。serverが実行中であることがわかります。

[root@kvm ~]# virsh list
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中

serverを一時停止にします。

[root@kvm ~]# virsh suspend server
ドメイン server は一時停止されました

仮想マシン一覧を確認します。serverが停止中であることがわかります。

[root@kvm ~]# virsh list
 Id    名前                         状態
----------------------------------------------------
 1     server                         一時停止中

6.2 再開(resume)

serverを再開します。

[root@kvm ~]# virsh resume server
ドメイン server が再開されました

仮想マシン一覧を確認します。serverが実行中になったことがわかります。

[root@kvm ~]# virsh list
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中

7 仮想マシン名の変更方法

仮想マシンの名前(ドメイン名)を変更してみます。名前を変更するには、仮想マシンをシャットオフにして行う必要があります。

[root@kvm ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中
 -     router                         シャットオフ

routerの名前をbridgeに変更してみます。

[root@kvm ~]# virsh domrename router bridge
Domain successfully renamed

仮想マシン一覧を確認します。routerがbridgeに変更されたことがわかります。

[root@kvm ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中
 -     bridge                         シャットオフ

8 仮想マシンのインタフェース情報の参照、変更方法

8.1 仮想マシンIPアドレスを表示する方法(domifaddr)

serverのvnet0に設定されているIPアドレスを表示してみます。

[root@kvm ~]# virsh domifaddr server
 名前     MAC アドレス     Protocol     Address
-------------------------------------------------------------------------------
 vnet0      52:54:00:98:4d:5d    ipv4         192.168.122.55/24

8.2 インタフェース名等の取得方法(domiflist)

仮想マシンのインタフェースを確認してみます。実行中でもシャットオフ中の仮想マシンに対しても実行することができます。

[root@kvm ~]# virsh domiflist server
インターフェース 種類     ソース  モデル   MAC
-------------------------------------------------------
vnet0      network    default    virtio      52:54:00:98:4d:5d

8.3 統計情報の取得方法(domifstat)

domifstatは、統計情報を表示するオプションです。

[root@kvm ~]# virsh domifstat server --interface vnet0
vnet0 rx_bytes 99883
vnet0 rx_packets 1746
vnet0 rx_errs 0
vnet0 rx_drop 0
vnet0 tx_bytes 21596
vnet0 tx_packets 276
vnet0 tx_errs 0
vnet0 tx_drop 0

vnet0の状態を確認します。アップしていることがわかります。

[root@kvm ~]# virsh domif-getlink server --interface vnet0
vnet0 up

vnet0の状態を確認します。リンクアップしていることがわかります。

[root@kvm ~]# virsh domif-getlink server --interface vnet0
vnet0 up

serverのインタフェース(vnet0)をDOWNします。

[root@kvm ~]# virsh domif-setlink server vnet0 down
デバイスが正常に更新されました

インタフェースの状態を確認します。リンクダウンしていることがわかります。

[root@kvm ~]# virsh domif-getlink server --interface vnet0
vnet0 down

9 仮想マシンのインタフェース追加、削除方法

ここでは、仮想マシンにインタフェースの追加、削除の方法だけ説明します。追加したインタフェースにIPアドレスを設定し、仮想マシン同士で通信をするための環境作成手順は、仮想マシンにNICを追加する方法 - hana_shinのLinux技術ブログを参照してください。

9.1 事前準備

KVMホストに仮想ブリッジ(br1)を作成します。ifnameにはデバイス名、con-nameにはプロファイル名を指定します。プロファイルとは設定ファイルのことです。デバイスに設定したIPアドレスやデフォルトルータのIPアドレス等を定義したもので、/etc/sysconfig/network-scripts配下にいいいい作成されます。

[root@kvm ~]# nmcli connection add type bridge ifname br1 con-name br1-profile
接続 'br1-profile' (3bbbaf0a-9b0d-4b4c-9762-f1db0be5575b) が正常に追加されました。

バイスの状態を確認します。仮想ブリッジが追加されたことがわかります。ただし、この時点では、仮想ブリッジは、まだシステムに接続されていません。

[root@kvm ~]# nmcli device |grep br1
br1         bridge    接続中 (IP 設定を取得中)  br1-profile

作成した仮想ブリッジに、管理用のIPアドレスを設定します。

[root@kvm ~]# nmcli connection modify br1-profile ipv4.method manual ipv4.addresses "10.0.0.1/24"

仮想ブリッジをシステムに接続します。

[root@kvm ~]# nmcli device connect br1
デバイス 'br1' が '3bbbaf0a-9b0d-4b4c-9762-f1db0be5575b' で正常にアクティベートされました。

バイスの状態を確認します。仮想ブリッジがシステムに接続されたことがわかります。

[root@kvm ~]# nmcli device |grep br1
br1         bridge    接続済み  br1-profile

9.2 追加方法(attach-interface)

実行中の仮想マシンを確認します。これらの仮想マシンにインタフェースを追加していきます。

[root@kvm ~]# virsh list
 Id    名前                         状態
----------------------------------------------------
 1     server                         実行中
 2     router                         実行中

サーバにはインタフェースを2つ追加してみます。

[root@kvm ~]# virsh attach-interface --type bridge --source br1 --model e1000 server
インターフェースが正常に接続できました
[root@kvm ~]# virsh attach-interface --type bridge --source br1 --model e1000 server
インターフェースが正常に接続できました

サーバのインタフェースを確認します。vnet2とvnet3の2つのインタフェースが追加されたことがわかります。

[root@kvm ~]# virsh domiflist server
インターフェース 種類     ソース  モデル   MAC
-------------------------------------------------------
vnet0      network    default    virtio      52:54:00:98:4d:5d
vnet2      bridge     br1        e1000       52:54:00:4e:da:11
vnet3      bridge     br1        e1000       52:54:00:8c:68:92

次にルータにインタフェースを追加してみます。

[root@kvm ~]# virsh attach-interface --type bridge --source br1 --model e1000 router
インターフェースが正常に接続できました

ルータのインタフェースを確認します。vnet4が追加されたことがわかります。

[root@kvm ~]# virsh domiflist router
インターフェース 種類     ソース  モデル   MAC
-------------------------------------------------------
vnet1      network    default    virtio      52:54:00:09:62:b0
vnet4      bridge     br1        e1000       52:54:00:5a:d8:d1

brctlコマンドを使っても、仮想ブリッジに追加されたインタフェースを確認することができます。

[root@kvm ~]# brctl show br1
bridge name     bridge id               STP enabled     interfaces
br1             8000.fe54004eda11       no              vnet2
                                                        vnet3
                                                        vnet4

9.3 削除方法(detach-interface)

ルータのインタフェースを確認します。ルータからvnet4を削除します。

[root@kvm ~]# virsh domiflist router
インターフェース 種類     ソース  モデル   MAC
-------------------------------------------------------
vnet1      network    default    virtio      52:54:00:09:62:b0
vnet4      bridge     br1        e1000       52:54:00:5a:d8:d1

vnet4を削除します。

[root@kvm ~]# virsh detach-interface --type bridge --mac 52:54:00:5a:d8:d1 router
インターフェースが正常に切断されました

ルータのインタフェースを確認します。vnet4が削除されたことがわかります。

[root@kvm ~]# virsh domiflist router
インターフェース 種類     ソース  モデル   MAC
-------------------------------------------------------
vnet1      network    default    virtio      52:54:00:09:62:b0

同様に、ホストのvnet2とvnet4を削除します。

[root@kvm ~]#  virsh detach-interface --type bridge --mac 52:54:00:4e:da:11 server
インターフェースが正常に切断されました
[root@kvm ~]#  virsh detach-interface --type bridge --mac 52:54:00:8c:68:92 server
インターフェースが正常に切断されました

ブリッジのインタフェースを確認します。サーバ、ルータに接続していたインタフェースが削除されていることがわかります。

[root@kvm ~]# brctl show br1
bridge name     bridge id               STP enabled     interfaces
br1             8000.000000000000       no

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ