なにかの技術メモ置き場

なにかの技術メモ置き場

@インフラエンジニア

virshコマンドに慣れる

概要

ゲストマシンの設定変更をvirshコマンドだけでやってみる。

ユースケース

・ゲストマシンに内蔵ストレージを追加したい。
・ゲストマシンに光学ドライブを追加しISOファイルをメディアとして挿入したい。または、挿入済みのISOファイルを変更したい。
・ゲストマシンにネットワークインターフェースを追加したい。
・上記の要望を、virsh editにより実現しようとしたが、そもそもxmlファイルの書式がわからない。
・とりあえず既存の定義やネットで調べた情報をコピーして動いたから良しとしたが、適切な方法を知りたい。

環境

構成

用途 ホスト名 OS QEMU libvirt
ホストマシン kvm01 CentOS 8.1.1911 2.12 4.5
ゲストマシン guest01 CentOS 8.1.1911 - -

前提

・ゲストマシンは作成済みとする。
・適当なディスクイメージを作成済みとする。

[root@kvm01 ~]# qemu-img create /var/lib/libvirt/images/disk01.img 10G
Formatting '/var/lib/libvirt/images/disk01.img', fmt=raw size=10737418240
[root@kvm01 ~]# qemu-img info /var/lib/libvirt/images/disk01.img
image: /var/lib/libvirt/images/disk01.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 4.0K

・適当なISOイメージを入手済みとする。

[root@kvm01 ~]# ls -l /tmp/*.iso
-rw-r--r--. 1 qemu qemu  987758592  9月 12  2019 /tmp/CentOS-7-x86_64-Minimal-1908.iso
-rw-rw-rw-+ 1 qemu qemu 7554990080  1月  4 06:47 /tmp/CentOS-8.1.1911-x86_64-dvd1.iso

操作

目次

1-1.ディスク追加
1-2.ディスク削除
2-1.光学ドライブ&メディア追加
2-2.光学ドライブ&メディア削除
2-3.光学メディア挿入/排出/変更
3-1.ネットワークインターフェース追加
3-2.ネットワークインターフェース削除

オンライン操作の可否

操作 オンライン操作
ディスク追加/削除
光学ドライブ追加/削除 ×
光学メディア挿入/排出/変更
ネットワークインターフェース追加/削除

※○・・・稼働中のゲストマシンに設定が即時反映される。
※×・・・稼働中のゲストマシンに反映されるタイミングはゲストマシンの停止後となる。
※△・・・busのtypeがideの場合のみ可能。

1-1.ディスク追加

構文

virsh attach-disk [--domain] <ゲストマシン名> [--source] <ディスクイメージ> [--target] <デバイス名> [--config]

実行例

[root@kvm01 ~]# virsh attach-disk --domain guest01 --source /var/lib/libvirt/images/disk01.img --target vdd
ディスクが正常に接続されました

備考
・「--config」なしでオンライン設定、ありでオフライン設定となる。
・オプションの順番について。ロングオプション(--XXX)を省いた場合のみ順序性が発生する。

[root@kvm01 ~]# virsh attach-disk
エラー: コマンド 'attach-disk' には <domain> オプションが必要です
エラー: コマンド 'attach-disk' には <source> オプションが必要です
エラー: コマンド 'attach-disk' には <target> オプションが必要です
[root@kvm01 ~]# virsh attach-disk guest01 vdd /var/lib/libvirt/images/disk01.img
エラー: ディスクの接続に失敗しました
エラー: 内部エラー: 無効なハードディスクデバイス名: /var/lib/libvirt/images/disk01.img
[root@kvm01 ~]# virsh attach-disk guest01 /var/lib/libvirt/images/disk01.img vdd
ディスクが正常に接続されました

1-2.ディスク削除

構文

virsh detach-disk [--domain] <ゲストマシン名> [--target] <デバイス名> [--config]

実行例

[root@kvm01 ~]# virsh detach-disk --domain guest01 --target vdd
ディスクが正常に切断されました

2-1.光学ドライブ&メディア追加

構文

virsh attach-disk [--domain] <ゲストマシン名> [--type] cdrom [--target] <デバイス名> [--source] <メディアファイルのパス> [--targetbus {ide|virtio}] {--config|--current}

※当方環境ではゲストマシン起動中は「--config」が必須、停止中は「--config」「--current」のいずれかが必須だった。

実行例

[root@kvm01 ~]# virsh attach-disk --domain guest01 --type cdrom --target vdc --source /tmp/CentOS-8.1.1911-x86_64-dvd1.iso --targetbus ide --config
ディスクが正常に接続されました

備考
・当方環境では光学ドライブの追加/削除はオンライン設定ができなかった。
・また、光学メディアの変更は「--targetbus ide」を指定しないとできなかった。なお、省略時はbusとしてvirtioが採用される。

2-2.光学ドライブ&メディア削除

構文

virsh detach-disk [--domain] <ゲストマシン名> [--target] <デバイス名> {--config|--current}

実行例

[root@kvm01 ~]# virsh detach-disk --domain guest01 --target vdc --config
ディスクが正常に切断されました

2-3.光学メディア挿入/排出/変更

構文

# 挿入
virsh change-media [--domain] <ゲストマシン名> [--path] <デバイス名> --source /tmp/CentOS-8.1.1911-x86_64-dvd1.iso --insert [--current|[--live|--config]]

# 排出
virsh change-media [--domain] <ゲストマシン名> [--path] <デバイス名> --eject [--current|[--live|--config]]

# 変更
virsh change-media [--domain] <ゲストマシン名> [--path] <デバイス名> --source /tmp/CentOS-8.1.1911-x86_64-dvd1.iso [--current|[--live|--config]]

実行例

# 挿入
[root@kvm01 ~]# virsh change-media --domain guest01 --path vdc --source /tmp/CentOS-8.1.1911-x86_64-dvd1.iso --insert
Successfully inserted media.

# 排出
[root@kvm01 ~]# virsh change-media --domain guest01 --path vdc --eject
Successfully ejected media.

# 変更
[root@kvm01 ~]# virsh change-media --domain guest01 --path vdc --source /tmp/CentOS-8.1.1911-x86_64-dvd1.iso
Successfully updated media.

備考
・「--current」「--live」「--config」すべての省略時は「--current」動作になる?

3-1.ネットワークインターフェース追加

構文

virsh attach-interface [--domain] <ゲストマシン名> [--type] <インターフェースの種類> [--source] <ホストマシンのインターフェース名> [[--model] <モデル名>] [--config]

実行例

[root@kvm01 ~]# virsh attach-interface --domain guest01 --type bridge --source br0 --model virtio
インターフェースが正常に接続できました

3-2.ネットワークインターフェース削除

構文

virsh detach-interface [--domain] <ゲストマシン名> [--type] <インターフェースの種類> [--mac] <MACアドレス> [--config]

実行例

[root@kvm01 ~]# virsh detach-interface --domain guest01 --type bridge --mac 52:54:00:9f:0e:f9
インターフェースが正常に切断されました

備考
・削除したいインターフェースのMACアドレスは事前に確認しておく。

[root@kvm01 ~]# virsh dumpxml guest01 | grep "mac address"
      <mac address='52:54:00:00:82:9a'/>
      <mac address='52:54:00:32:4c:a5'/>
      <mac address='52:54:00:04:85:51'/>
      <mac address='52:54:00:9f:0e:f9'/> # 今回の例ではこれ

備考

・今回の操作を設定ファイルを直接編集する場合の例は以下を参照。
none06.hatenadiary.org