6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Red Hat Linux V9.3移行後のKVMゲストOS再構築

Posted at

はじめに

先日、個人のRHEL検証環境をV8.9からV9.3へアップグレードを実施しました。その時の内容については下記の記事にまとめていますので、ご参照ください。

当環境では、RHEL V8使用時からKVM環境を作成し、KVMのゲストOSにCentOS 7.0をインストールして使用してきました。先日、RHEL V9アップグレード後に無影響確認を兼ねて、このKVMゲストOSを起動しようとしたところ、予期せぬ起動エラーに見舞われることとなったため、KVMゲストOSの再導入を行いました。
本記事では、アップグレード後にKVMゲストOSの起動に失敗した原因と、KVMゲストOSの再導入記録をまとめました。

KVMゲストOS起動時のエラー事象

KVM環境

筆者のKVM環境は、下記のようにディスクをKVMホスト/KVMゲストそれぞれにおいて、LVMを構成しています。

  • KVMホストのディスク
    • VG(ボリューム・グループ)名:rhel
    • LV(ロジカル・ボリューム)名:root
    • LV Path:/dev/rhel/root
  • KVMゲストのディスク
    • VG(ボリューム・グループ)名: rhel-guest
    • LV(ロジカル・ボリューム)名: guest
    • LV Path:/dev/rhel-guest/guest

KVMゲストOSの起動は、libvirtユーティリティーが提供しているvirshコマンドで起動しますが、その際に指定するドメイン名を「test-vm1」としています。

KVMゲストOSの仮想ディスクイメージは、QCOW2と呼ばれるストレージ形式で、「/var/lib/libvirt/images/」ディレクトリ配下に「test-vm1.qcow2」というネーミングで作成されています。virshコマンドでKVMゲストOSを起動すると、この「test-vm1.qcow2」という仮想ディスクイメージを読み込んでゲストOSのブート処理が行われます。

筆者のKVM環境では、この仮想ディスクイメージを上記に記載しているKVMゲスト用のLVMに保管しています。その為、KVMゲストOSを起動する際には、事前に当該LVMを「/var/lib/libvirt/images」にマウントしておく必要があります。

# mount /dev/rhel-guest/guest /var/lib/libvirt/images

KVMゲストOS起動

起動前のステータスは下記の通りです。

# virsh list --all
 Id   名前       状態
-------------------------------
 -    test-vm1   シャットオフ

この後、KVMゲストOSを起動しようとすると、下記のメッセージが出力されて、起動が失敗しました。

# virsh start test-vm1 --console
エラー: ドメイン 'test-vm1' の起動に失敗しました
エラー: サポートされない設定: ドメイン設定はビデオモデル 'qxl' をサポートしません

起動エラーの原因

KVMはLinuxをハイパーバイザーとして仮想化を提供しており、KVMゲストOSはKVMホストOSの仮想デバイスを擬似的なハードウェアとして利用しています。仮想デバイスのパフォーマンスを良くするために、準仮想化デバイスが使われますが、RHEL V8まではその準仮想化デバイスとしてサポートしている物の中に、準仮想化グラフィックカード(qxl)というものがありました。

RHEL V9のドキュメントを確認してみたところ、V9からこの準仮想化グラフィックカード(qxl)の記載がなくなっていることに気づきました。記載がないことから、確かにサポートされなくなったものと思います。

RHEL V9のリリースノートもチェックしてみましたが、仮想化関連で全くそのような情報の記載はありませんでした。

これもRHEL V9の新規インストールではなく、V8からV9へのアップグレードを行ったことによる新たな気づきとなりました。

KVMゲストOS再構築

KVMゲストOS環境を再構築するにあたり実施した作業内容は下記の通りです。

  • 現行のKVMゲストOS環境のドメインを下記コマンドで削除
# virsh undefine test-vm1
ドメイン 'test-vm1' の定義が削除されました

# virsh list --all
 Id   名前   状態
-------------------
  • 現行の仮想ディスクイメージファイル「test-vm1.qcow2」を削除
  • KVMゲストOSの再インストール
    GUI形式でのインストールを行うためにvirt-viewerの起動が必要になります。これを行うために、RHELのデスクトップ環境にログオンした上で、下記のコマンドを実行します。
    --cdromオプションに指定するISOファイルは事前にダウンロードの上、KVMホストOS上に保管しておきます。
# virt-install --name test-vm1 --memory 1024 --vcpus 2 --disk size=6 --os-variant centos7.0 --cdrom /home/testuser/data/CentOS-7-x86_64-Minimal-2207-02.iso

Starting install...
Allocating 'test-vm1.qcow2'                                                                                                  | 6.0 GB  00:00:00     
Creating domain...                                                                                                           |         00:00:00     
Running graphical console command: virt-viewer --connect qemu:///system --wait test-vm1

KVMゲストOSのインストールが完了すると、virt-viewer上にCentOS 7.0のログオン画面が表示されます。また、KVMホストOSの「/var/lib/libvirt/images」ディレクトリ配下に、KVMゲストOSの仮想ディスクイメージファイルが作成されたことがわかります。

# ls -l /var/lib/libvirt/images
合計 2096448
drwx------. 2 root root      16384  4月 23  2022 lost+found
-rw-------. 1 qemu qemu 6443696128  4月 23 21:52 test-vm1.qcow2

KVMゲストOSのシリアルコンソール定義

virt-viewr上で、KVMゲストOSにrootユーザーでログオンし、下記の設定を行います。

  • /etc/default/grubのGRUB_CMDLINE_LINUXで始まる行に"console=tty0 console=ttyS0"を追加。
  • 変更を反映させない可能性があるkernelオプションを下記のコマンドを実行して削除する。
# grub2-editenv - unset kernelopts
  • 上記設定内容を反映させるために、下記のコマンドを実行。
# grub2-mkconfig -o /boot/grub2/grub.cfg
  • KVMゲストOSをシャットダウン

後は、KVMホストOS(RHEL V9.3)側で再度KVMゲストOSを起動すれば、KVMホストOSにSSH接続しているターミナル上でKVMゲストOS(CentOS 7.0)のログオン画面を表示することができるようになります。

# virsh start test-vm1 --console
ドメイン 'test-vm1' が開始しました
ドメイン 'test-vm1' に接続しました
エスケープ文字は ^] です (Ctrl + ])
[  OK  ] Started Show Plymouth Boot Screen.
[  OK  ] Reached target Paths.
[  OK  ] Started Forward Password Requests to Plymouth Directory Watch.
[  OK  ] Reached target Basic System.
:
:
Welcome to CentOS Linux 7 (Core)!
:
:
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.114.2.el7.x86_64 on an x86_64

localhost login:

KVMゲストOSのホスト名変更

デフォルトでは、KVMゲストOSのホスト名は上記の通り「localhost」となっています。KVMホストOSもホスト名は「localhost」となっていて紛らわしいので、KVMゲストOSのホスト名を変更します。KVMゲストOSにrootユーザ-でログオンし、下記のコマンドを実行します。

# hostnamectl set-hostname test-vm1
# hostnamectl status
   Static hostname: test-vm1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 4e038f5efeda4a45ba8579234c81b457
           Boot ID: 02371492e61a44969725566be72e3a35
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.114.2.el7.x86_64
      Architecture: x86-64

この後、KVMゲストからログオフすると、以下のようにホスト名が「test-vm1」に変わります。

# exit
ログアウト

CentOS Linux 7 (Core)
Kernel 3.10.0-1160.114.2.el7.x86_64 on an x86_64

test-vm1 login:

これで、KVMゲストOSの再構築作業は完了です。

さいごに、再作成後のKVMゲストOSのDumpXMLファイルを下記のコマンドで作成しておきます。今後のテンプレートとして活用することができるようになります。

# virsh dumpxml test-vm1 > /home/testuser/data/test-vm1.xml
test-vm1.xml
<domain type='kvm'>
  <name>test-vm1</name>
  <uuid>4e038f5e-feda-4a45-ba85-79234c81b457</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://centos.org/centos/7.0"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-rhel9.2.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  :
  :
  (略)
  :
  :
 </domain>

さいごに

本記事では先日実施したRHEL V8.9からV9.3へのアップグレード後にKVMゲストOSの起動に失敗した原因、それに伴うKVMゲストOSの再導入記録をご紹介しました。
RHELを新規インストールされる場合は、KVM環境も新規作成することになるので、特に気にすることはないと思います。
ただ、今回のようにRHELをアップグレードした場合ですと、一部の仮想デバイスがサポートされなくなったことで既存のKVM環境に影響がありましたので、今後アップグレードを検討ないしは予定されている方への参考になれば幸いです。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?