変更要約: 初版(主題2.05・副主題2.05.1〜2.05.2に対応)
5.2仮想マシンの作成と管理
virt-manager(GUI)とvirt-install(CLI)による仮想マシンの作成、完全仮想化と準仮想化(virtio)の違い、virshによるコマンドラインでのライフサイクル操作、virt-manager によるパフォーマンス監視を学びます。
前節で KVM の仕組みを押さえたら、次は実際に仮想マシンを作って動かして観察する運用の視点です。GUI・CLI どちらからでも作成でき、デバイスの見せ方(完全仮想化か準仮想化か)を選び、virsh で日々のライフサイクルを回すのが LinuC-2 の実務像です。
5.2.1仮想マシンの作成
- virt-manager=仮想マシンの作成・起動・コンソール接続・設定変更を行うGUI管理ツール。ウィザード形式で ISO 指定・メモリ/CPU割り当て・ディスク作成を進められる。
- virt-install=同等の作成処理をコマンドラインから一括指定するツール。スクリプト化・自動プロビジョニングに向く(例
virt-install --name vm1 --memory 2048 --vcpus 2 --disk size=20 --cdrom /path/to.iso)。
5.2.2完全仮想化と準仮想化(virtio)
- 完全仮想化=ゲストに実在するハードウェアと同じデバイスをエミュレーションして見せる方式。ゲスト OS の変更は不要だが、エミュレーションのオーバーヘッドが大きい。
- 準仮想化=ゲストがハイパーバイザー向けに最適化された仮想デバイスドライバを使うことで、エミュレーションのオーバーヘッドを削減する方式。KVM/QEMU 環境ではvirtioがその標準実装(virtio-blk=ディスク、virtio-net=ネットワーク等)。
- virsh=コマンドラインから仮想マシンのライフサイクルを操作するツール(
virsh list --all=一覧、virsh start/virsh shutdown/virsh destroy=起動/正常停止/強制停止、virsh undefine=定義削除)。virt-manager でもパフォーマンス(CPU/メモリ使用率等)を監視できる。
「virt-install はCLIで作成を完結できる(自動化向き)」「virtio は準仮想化の標準実装でオーバーヘッドを削減」「virsh destroy は強制停止・virsh shutdown は正常停止」の3点が頻出です。「完全仮想化=ゲスト変更不要だが遅い/準仮想化=ゲスト側にvirtioドライバが要るが速い」というトレードオフの対比も定番です。
実務の作成フローは、検証や単発作業ならvirt-managerのウィザードで完結させ、同じ構成を何十台も展開するならvirt-installをシェルスクリプトに組み込んで冪等かつ再現可能に作る、という使い分けが定石です。作成時に選べるデバイスの見せ方が完全仮想化と準仮想化で、前者はゲストに一切変更を求めず「本物のハードウェアがある」ように振る舞わせる代わりにエミュレーションのコストがかかります。後者、特に KVM/QEMU の標準であるvirtioは、ゲスト側に virtio 対応ドライバがあることを前提に、ハイパーバイザーとの通信路を簡略化してディスク I/O やネットワークのスループットを大きく改善します。多くの Linux ディストリビューションは virtio ドライバを標準搭載しているため、実務では特別な事情がない限り virtio を選ぶのが基本方針です。日々の運用では GUI を開かずにvirsh list --allで状態を一覧し、virsh start vm1で起動、virsh shutdown vm1でゲスト OS に正常なシャットダウンを要求し、応答がないときの最終手段としてvirsh destroy vm1(電源プラグを抜くのに相当する強制停止)を使います。パフォーマンスの継続観察には virt-manager の詳細ビューで CPU・メモリ・ディスク I/O・ネットワークのグラフを確認するのが定番の運用手順です。
| 項目 | 完全仮想化 | 準仮想化(virtio) |
|---|---|---|
| ゲスト側の変更 | 不要 | virtio対応ドライバが必要 |
| 性能 | エミュレーションのオーバーヘッド大 | 通信路簡略化で高速 |
| 代表デバイス | エミュレートされた実機相当デバイス | virtio-blk・virtio-net |
ひっかけ: 「virsh destroy はディスク上の仮想マシン定義そのものを削除する」は誤りです。virsh destroy は強制停止(電源断相当)にすぎず、定義を消すのは virsh undefine です。また「準仮想化はゲストOSの変更なしに使える」も誤り=準仮想化(virtio)はゲスト側に対応ドライバが必要で、変更不要なのは完全仮想化の方です。
5.2.3この節のまとめ
- virt-manager=GUI作成/virt-install=CLI一括作成(自動化向き)
- 完全仮想化=ゲスト変更不要だが低速/準仮想化(virtio)=ゲストにドライバ要だが高速。運用は virsh start/shutdown/destroy/undefine で
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 同一構成の仮想マシンを50台、スクリプトで自動プロビジョニングしたい。最も適した作成手段は?
Q2. ディスクI/Oのスループットを重視し、ゲスト側に対応ドライバを導入してKVM/QEMU向けに最適化したデバイスを使いたい。採用すべき方式は?
Q3. 応答しなくなった仮想マシン vm1 を、電源を強制的に落とすのと同等の方法で即座に停止したい。適切なコマンドは?

