はじめに
昨年12月中旬に自宅PCの買い替えをしました。以前は、富士通社のノートPC(SSD:256GB、メモリ:8GB)を使用していましたが、ここ2,3か月の間に長時間大きなファンの回転音が続くようになり、さすがに耐えられなくなったので、HP社のノートPC(SSD:512GB、メモリ:16GB)のAIパソコンに替えることにしました。
私は、旧PC時代から、VMWare Workstaion Proをインストールし、その上にRHELを導入してKVM環境を構築していました。
- 当時の構成
- KVMホストOS:RHEL9.5 (メモリ:4GB) ※メモリはKVMゲストOS利用分含む
- KVMゲストOS:CentOS7.0 (メモリ:1GB)
今回、PCの買い替えに伴い、PCの性能も向上したので、せっかくならばとKVMゲストOSにもRHEL9.5を入れた下記の構成に変更しました。
- 今回の構成
- KVMホストOS:RHEL9.5 (メモリ:4GB) ※メモリはKVMゲストOS利用分含む
- KVMゲストOS:RHEL9.5 (メモリ:2GB)
最終的には構築成功できましたが、今回KVMホストOSも新規インストールしたこともあり、すんなりとはいかない部分がありましたので、その点について今後のために備忘録としてまとめました。
環境構築時の躓きポイント
virt-installコマンド実行時にqemu(Quick Emulator)の処理で、Permission Deniedでエラーとなる。
KVMホストOS上で、下記のコマンドを実行します。
# virt-install --name vm-guest1 --memory 2048 --vcpus 2 --disk size=19 --os-variant rhel9.5 --cdrom /home/testuser/temp/rhel-9.5-x86_64-boot.iso
すると、下記のようなエラーが出力されました。
WARNING /home/testuser/temp/rhel-9.5-x86_64-boot.iso は、ハイパーバイザーからアクセスできない可能性があります。'qemu' ユーザーに、次のディレクトリーの検索パーミッションを付与する必要があります: ['/home/testuser']
WARNING /home/testuser/temp/rhel-9.5-x86_64-boot.iso は、ハイパーバイザーからアクセスできない可能性があります。'qemu' ユーザーに、次のディレクトリーの検索パーミッションを付与する必要があります: ['/home/testuser']
インストールの開始中...
'vm-guest1.qcow2' を割り当てています | 19 GB 00:00:00
ディスク 'vm-guest1.qcow2' を削除中 | 00:00:00
ERROR 内部エラー: モニターへの接続中にプロセスが終了しました: 2025-01-13T02:05:39.330248Z qemu-kvm: -blockdev {"driver":"file","filename":"/home/testuser/temp/rhel-9.5-x86_64-boot.iso","node-name":"libvirt-1-storage","read-only":true}: Could not open '/home/testuser/temp/rhel-9.5-x86_64-boot.iso': Permission denied
仮想マシンのインストールが成功したように見えません。
成功していれば、次を実行すると、仮想マシンを再起動できます:
virsh --connect qemu:///system start vm-guest1
そうでなければ、インストールをやり直してください。
原因は、qemuユーザーが/home/testuserディレクトリに対するアクセス権がなかったことでした。PCの買い替えにより、KVMホストOSも新規インストールしていたので、このあたりの設定が外れてしまっていたものと思います。
$ id qemu
uid=107(qemu) gid=107(qemu) groups=107(qemu),36(kvm)
$ ls -l /home
合計 4
drwx------. 19 testuser testuser 4096 1月 11 19:15 testuser
そこで、/homeディレクトリで以下の処理を行うことで、Permission Deniedのエラーは解決することができました。
$ sudo usermod -aG testuser qemu
$ id qemu
uid=107(qemu) gid=107(qemu) groups=107(qemu),36(kvm),1000(testuser)
$ chmod 750 testuser
$ ls -l
合計 4
drwxr-x---. 19 testuser testuser 4096 1月 11 19:15 testuser
対応後のコマンド実行結果は下記のとおりです。
# virt-install --name vm-guest1 --memory 2048 --vcpus 2 --disk size=19 --os-variant rhel9.5 --cdrom /home/testuser/temp/rhel-9.5-x86_64-boot.iso
WARNING /home/testuser/temp/rhel-9.5-x86_64-boot.iso は、ハイパーバイザーからアクセスできない可能性があります。'qemu' ユーザーに、次のディレクトリーの検索パーミッションを付与する必要があります: ['/home/testuser']
WARNING /home/testuser/temp/rhel-9.5-x86_64-boot.iso は、ハイパーバイザーからアクセスできない可能性があります。'qemu' ユーザーに、次のディレクトリーの検索パーミッションを付与する必要があります: ['/home/testuser']
インストールの開始中...
'vm-guest1.qcow2' を割り当てています | 19 GB 00:00:00
ドメインを作成中... | 00:00:00
グラフィカルコンソールコマンドを実行しています: virt-viewer --connect qemu:///system --wait vm-guest1
(virt-viewer:5961): virt-viewer-WARNING **: 11:44:23.415: vnc-session: got vnc error Server closed the connection
仮想マシンの作成が完了しました。
ゲストを再起動しています。
グラフィカルコンソールコマンドを実行しています: virt-viewer --connect qemu:///system --wait vm-guest1
(virt-viewer:6258): virt-viewer-WARNING **: 11:52:05.648: vnc-session: got vnc error Server closed the connection
コマンド実行後にWarningが消えない点が釈然としないものの、KVMゲストOSのインストール作業には問題なく進むことができたので、とりあえず良しとします。
RHELでは各バージョンでシリアルコンソールの設定方法が異なる
KVMホストOS上で、KVMゲストを起動した後は、KVMゲストOSに一時的にログオンして作業したい場合などに備え、KVMゲスト上でシリアルコンソールの定義をしておくと便利です。
以前、CentOS7.0をKVMゲストOSとして使用していた際に設定した方法でシリアルコンソールの指定をするも、KVMゲストOS再起動後にシリアルコンソールが表示されなかったので、調べたところ、RHELでは各々バージョンでシリアルコンソールの設定方法が異なっていることがわかりました。詳細は下記のサイトに記述があります。(ちなみに、CentOS7.0のシリアルコンソールの設定方法は、RHEL7の場合と同様です。)
上記リンク先の「Red Hat Enterprise Linux 9」の箇所に、RHEL9におけるシリアルコンソールの設定方法が書いてありますので、これを参考に以下のコマンドをKVMゲストOS上で実行した後、再度KVMゲストOSを起動することで無事シリアルコンソールを表示させることができました。grubbyというコマンドも初めて目にしました。
# grubby --update-kernel=ALL --args="console=ttyS0"
KVMゲストOSの再起動結果です。
# virsh start vm-guest1 --console
ドメイン 'vm-guest1' が開始しました
ドメイン 'vm-guest1' に接続しました
エスケープ文字は ^] です (Ctrl + ])
[ OK ] Started Show Plymouth Boot Screen.
[ OK ] Started Forward Password Requests to Plymouth Directory Watch.
[ OK ] Reached target Path Units.
[ OK ] Found device /dev/mapper/rhel-root.
:
:
Red Hat Enterprise Linux 9.5 (Plow)
Kernel 5.14.0-503.21.1.el9_5.x86_64 on an x86_64
Activate the web console with: systemctl enable --now cockpit.socket
localhost login:
さいごに
今回はKVMホストOSを新規インストールした場合に、KVMゲストOSを構築する際に遭遇する可能性のある躓きポイントをRHELの場合を実例としてまとめました。特にRHELの場合はシリアルコンソールの設定方法が、RHELのバージョンごとに異なるため、シリアルコンソールを設定している場合、KVMゲストOSのRHELのバージョンを変更する際には注意が必要です。
(参考)KVMホストメモリ使用量確認
KVMゲストOS起動停止前後のKVMホストOSのメモリ使用量は下記のようになりました。
- KVMゲストOS起動中
# free
total used free shared buff/cache available
Mem: 3712588 2261584 808044 4944 879972 1451004
Swap: 2097148 645120 1452028
- KVMゲストOS停止中
# free
total used free shared buff/cache available
Mem: 3712588 1004976 2060724 4940 883888 2707612
Swap: 2097148 645120 1452028
KVMゲストOS起動中も、KVMホストOSのパフォーマンスは割と良好でした。