【鯖】CentOS8のKVM-QEMUの仮想化の整理

 ハイウィザード鯖の中の人です。新型コロナウイルスの猛威が地元を襲い始めています。宮城/仙台の繁華街『国分町』にほど近い洋風居酒屋でクラスター感染が発覚。一気に感染者数が増えちゃった感。いよいよか・・・という感じです。仙台市での感染流行は、同時に東北地方のポータル都市でもあるので、東北地方細部まで感染の波が押し寄せるという・・・とりあえず『正しく怖がる』を軸に、基本的な衛生対策で乗り切っていこうと思います。

 さて、3月30日の日記でも触れている『CentOS8.X』での『KVM-QEMU』仮想化についてですが、あの後少し不具合もあったので数回インストールし直しをしています。この影響で使っていたWindows7ProのプロダクトKeyによる認証がうまく通らなくなり、Microsoftのアクティベーションセンターとライセンス認証技術サポートセンターの職員さまとの協力もあり、最終的に落ち着いたのでWin10Pro-64Bit版の導入までを整理したいと思います。

★ CentOS8.XにおけるKVM-QEMU仮想化の手順
 最初にCentOSの公式サイトからCentOS8のISOイメージを取得し、DVDに焼いておきます。その後UEFI(Unified Extensible Firmware Interface)モードでDVDからインストールメディアを立ち上げ、CentOS8.Xをインストールします。
 インストールが完了したらライセンスに同意したうえで、以後はSSHを使い、いつも使用しているWindows機で操作していきます。(実機のデスクトップで「GNOME端末」を立ち上げてもOK)
 CentOS7.Xまではyumを使用して各種アプリケーションをインストールしていましたが、CentOS8.Xからはdnfを使います。yumがdnfに変わっただけで使用感はさほど変わりありません。各種レポジトリやOSのアップデートを着実に行っていきます。初期設定が一通り完了したら、KVMとQEMU関連のセットアップに入ります。

 以下のコマンドを実行して環境を整備します。

# dnf -y groupinstall ‘Development tools’ ← 開発関連のツールセットのインストール
# dnf -y -y install zlib zlib-devel glib2 glib2-devel ncurses-devel SDL-devel ← 同上
# dnf -y install qemu-kvm libvirt libvirt-client virt-viewer virt-install virt-manager ← KVM-QEMU関連導入


 以上3点をdnfで導入したら「systemctl enable libvirtd」「systemctl start libvirtd」でサービスを起動、再起動時自動起動するように設定しておきます。

 基本的な「KVM-QEMU」導入はこれだけですが、ここから少し手直しが必要で、以下の手順で調整をします。

① /etc/default/grub を編集。「GRUB_CMDLINE_LINUX」の項目の最後に『intel_iommu=on nomodeset』を追記します。これでiommuをonにした上でGPUをロードしないようにします。編集が終われば「grub2-mkconfig -o /boot/grub2/grub.cfg」を実行してブードローダーを再構築します。
②  「 lspci -nn | grep -i nvidia 」でGPUのベンダーIDとデバイスIDを調べ「# /etc/modprobe.d/vfio.conf」を新規作成し『options vfio-pci ids=XXXX:ZZZZ,YYYY:NNNN』(調べたベンダーIDとデバイスIDを記述)して保存する。保存後「# echo ‘vfio-pci’ > /etc/modules-load.d/vfio-pci.conf」を実行して再起動を行う。
③ 「# /etc/libvirt/qemu.conf」の「nvram」を有効にするため当該の行の#を消す。
④ CentOS8.Xのホーム画面より「仮想化マネージャー(virt-manager)」を起動し、ガイダンスに従ってWindows10のインストールを行う。インストールを実施する前に各種設定を必ず行う。(PCIデバイスの追加でGPUを指定する、UEFIでのインストールを選択するなど)
⑤ NVIDIAのGPUの場合は「# virsh edit (仮想化タイトル)」を実行し、編集が必要です。(Error 43 : Driver failed to load 対策)
 <features>と</features>の間に「<vendor_id state=’on’ value=’whatever’/>」と「<kvm><hidden state=’on’/></kvm>」を記述します。value=’whatever’のwhateverは12文字ちょうどの英数字であればOKなので、推しのキャラネームを入れても12文字以内なら大丈夫です。終セラのフェリドさんの本名はちょうど12文字だったので、今回はそれにしました。(ぉぃ

 ・・・基本的な作業はここまで。Windows10が起動したらライセンス認証を行い、無事に認証が通ればドライバーのインストールなどを経て、GPUパススルーによる3DゲームなどをLinux上のWindowsで楽しむことができます。作業時間はおおむね6時間ぐらいでしょうか?私の場合は無駄な作業も多かったので倍以上かかったり不具合が多かったり・・・と大変でしたが、OSインストール直後に仮想化環境を整えるよりも、先に「dnf -y update」を実行して最新のOSにしてから仮想化環境を整えると、後のWindowsインストールに影響が出ないのかなぁと思っています。LinuxはKernelが変わるた度に中身が変わってしまい、依存性エラーでとんでもない方向へ行ってしまうので・・・。

 今後の課題は仮想環境上で動くWindowsのバックアップ方法でしょうか?再インストール回数が一定回数を超えるとライセンス認証が通らなくなるなどの不都合も生じます。特にWindows10の場合はかつてのWindowsとは異なり、無償アップグレードの関係もあってライセンス認証の手段が複雑になっています。場合によっては正規のプロダクトKeyを保有していても、再度ライセンスを購入せざる得ないこともあり得るため注意が必要です。今回は正規品であることをサポートで確認して頂けたのでWin10のプロダクトKeyを頂くことができましたが・・・再インストールに頼らないバックアップ方法を考えたい所。
 仮想化自体ファイル管理なのだから仮想化ファイルをバックアップすればいいじゃないという説もあるのですが「qcow2」形式のファイルはそのまま別のQEMUでは使えないようで・・・物理PCと同等のバックアップ手段が欲しいなぁといったところ。BIOS時代のバックアップソフトしかないのが玉の傷・・・(´・ω・`)

 クルル鯖のデータサーバー(Linux)とWindows10仮想化環境のダブル運用において、大容量のデータのバックアップにWindowsのバックアップは常に悩むコロナの春。新年度を迎えられた皆様、どうか体調にお気をつけてお過ごしください。