【鯖】LinuxでWindowsでFF14を遊ぶ

 長らく音信不通状態だった(?)ハイウィズ鯖の中の人です。いえいえ、3月から今月にかけて色々と忙しく、充実した日々だったのでブログを更新する都合ができずじまいでした。当方はGW、10連休が決まり、4月28日は平成最後のガタケット163と・・・仕事面では新しい担務も増えて、忙しい令和元年を迎えそうです。
 3月17日には「大洗海楽フェスタ2019」3月21日には「ガタケット162」が開催されて、それぞれ参加していました。こちらのレポートは10連休の時にでも考えていますので、少しお待ちください。
 ・・・あとは3月29日の金曜日夕刻から4月5日の夜まで、ハイウィザード鯖の「Teamspeak3」サーバーが予期せぬ停止をしていたらしく、長期間ログインできない状態でした。こちらについても深くお詫び申し上げたいと思います。もしIRCやTS3を利用中に長期間ログインできないなど不都合があれば遠慮なく、ハイウィザード鯖の公式Twitter(https://twitter.com/Highwizard_Biz)へDM頂ければ対応させて頂きたいと思います。今後ともハイウィザード鯖をよろしくお願いします。



 さて、今回のお代は、予てから不調だった我が家のデータサーバーの復旧記です。通称クルル鯖と呼んでいる、総容量10TBのクルル鯖。実質CentOSでNASをやっている感じのサーバーだったのですが、マザーボードが2008年製とかなり古く、震災を乗り越えた2年後にLinuxサーバーとして転用。その後はハイウィザード鯖の最新化によってデータ鯖になっていた・・・経緯です。年式が古くエラーも頻発していたのでそろそろ交換かなーと思っていたら、マザーがぶっ飛びまして、HDDも不調に。我が家のPC環境も用途別にデスクトップPCをサーバーにしてて電力も気になるし、あまり使用していなかったFF14対応のPCを新生「クルル鯖」として甦させるように設計を始めました。

目標・・・CentOS(Linux)で仮想化→Win10でFF14をプレイする!

 CentOS(Linux)で仮想化をするのは特段難しいことではなく、安価に手軽に仮想化することができます。Windowsだと「VMware Workstation」といった「VMWare」製品が有名ですが、LinuxではKVM(QEMU)を使います。しかもLinuxはフリーなOSなので、誰でも自由に構築できるほか、今回の用途のようにNASをやりつつも、たまーにはWindows10を起動させてFF14をプレイ。というような使い方も可能です。1台2役といったところでしょうか?

★ 環境面と用意したもの
【構成】
OS : CentOS Linux release 7.6.1810 (Core)
CPU : Intel(R) Pentium(R) CPU G4400 @ 3.30GHz
メモリー : 24 GB
GPU : NVIDIA GeForce GTX 750 Ti
 ゲストとして「Windows10 Pro 64Bit版」をインストールします。24GB中10GBを割り当て、ハードディスクは全容量15TB中1TBの領域を割り当てます。クルル鯖・・・驚異の15TBあるのです。まだまだ増やせるよ・・・(何
 CentOS7をインストールする前に必要なハードウェアをそろえておきます。ただ単に「QEMU」などの仮想化プログラムを導入するだけでは不足するため、付随するものを準備し、あらかじめ設定しておきます。特にGPUはパススルーを行わないといけないため、マザーボードのBIOS設定で「VT-d」や「I/O Virtualization Technology」の項目を有効にしておく必要があります。パススルーを行うと指定したデバイスはホストPCから切り離されるため、PCIバス対応のUSB拡張ボードでホスト内臓のUSBとは違うポートを用意したりすることも重要だとおもいます。
【必要だったハードウェア】
① USB3.0増設ボード(PCI Express x1接続用)
② ディスプレイ2台(一つはCentOS7用としてオンボード接続、もう一つはHDMI対応のPCモニターでこちらはグラボに接続)
 USB拡張ボードが必要な理由はマザーボードのUSBコントローラーをパススルーした場合、Linux側での制御ができなくなるため。ディスプレイが2台必要なのは上記理由と同じ。(オンボード側出力とグラボ側出力両方にディスプレイを接続しておく)

★ CentOS7の導入からGPUパススルーまでの手順
① CentOS7インストールメディアから「最小インストール」を行う。
※ 最小インストールを選択するのは標準通りインストールすると旧バージョンの「QEMU」などが入ってしまい後々苦労するため。
② 開発ツール関連のインストール
#yum -y groupinstall ‘Development tools’(←開発系ツールのインストール)
#yum -y install zlib zlib-devel glib2 glib2-devel ncurses-devel SDL-devel(←QEMUインストールに必要な開発ツール)


③ QEMU(KVM)関連のインストール
※ 普通にyumインストールするとヴァージョンが低いQEMUがセットアップされるため、事前に最新版のリポジトリを入れてからセットアップする。
#yum -y install centos-release-qemu-ev (←リポジトリのインストール)
#yum install -y qemu-kvm-ev qemu-img-ev virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer(←QEMU関連のインストール)
#systemctl enable libvirtd(←libvirtdの自動起動設定)
#systemctl start libvirtd(←libvirtdの起動)


【 GPUをCentOS7に読み込ませない(GRUB_CMDLINE_LINUX行の末尾に「intel_iommu=on nomodeset」を追記 】
#vi /etc/default/grub(←GURG=ブートローダーの編集)
GRUB_CMDLINE_LINUX=”(色々記述がある一番最後に・・・右を追記する→)intel_iommu=on nomodeset”
#grub2-mkconfig -o /boot/grub2/grub.cfg(← GURBの再構築)
#reboot (←CentOS7を再起動させる。この作業で「IOMMU」が有効となり、GPU含むドライバーも読み込まれない → パススルーする初期条件が整う)


③ GUIで仮想マシンをセットアップしたいので、GNOME Desktopを導入。
#yum groupinstall “GNOME Desktop”
ランレベル(ターゲット)の変更
#systemctl set-default graphical.target
#rm ‘/etc/systemd/system/default.target’
#ln -s ‘/usr/lib/systemd/system/graphical.target’ ‘/etc/systemd/system/default.target’


④ GPUをパススルーするにあたって、UEFIモードでWindowsが入るように設定する。
OVMF のセットアップ
#vim /etc/yum.repos.d/kraxel.repo
 include=https://www.kraxel.org/repos/firmware.repo(←追記)
#yum install edk2.git-ovmf-x64(←OVMFのインストール)
#vim /etc/libvirt/qemu.conf(←追記内容 ※検索で「nvram」の記述あたりに以下文を記述)

nvram = [
“/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd”,
“/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw”
]

#systemctl restart libvirtd(←追記が終わったらlibvirtdを再起動させる)

⑤ GNOMEデスクトップの システム → 仮想マシンマネージャー で起動させて「仮想マシン」を作成。Windowsをインストールする。
 このとき、チップセットは「Q35」をブートシステムは「UEFI」を指定し、HDDとCDROMは「SATA」を選ぶ。(IDEを選ぶとエラーになり、SCSIを選ぶと今度は仮想ゲストで正しく認識されない)
 パススルーするPCIデバイスも選択。GPUをパススルーするときは、初期で登録されているディスプレイアダプターやビデオを削除する。細部の設定が完了したら最後に「インストールの開始」をクリックし、仮想ゲストを作成する。ネットワーク設定についてはブリッジ接続が良いとする文献が目立つものの、設定が面倒くさいことや失敗したときのシステムへのダメージも大きいため「Default(NAT設定)」でインストールを行うことをお勧めしたい。

(実は別にPCI接続のLANボードをパススルーしたり、すべてのセットアップが終了したのちにパススルーしているUSB増設ボードにUSBのLANアダプターを刺したりすることで個別にネットワーク環境を構築可能であり、そのほうが手軽で無難)

⑥ 平行して「virsh edit」で「Error 43 : Driver failed to load」対策を行う。これはNVDIAのグラフィックボードはKVM(QEMU)を使用しての利用に対応していないためQEMUのデバイス番号を変えないといけないため。

#virsh edit (仮想マシン名)
<features>
<hyperv>
<vendor_id state=’on’ value=’whatever’/> (←追加)
</hyperv>
<kvm> (←追加)
<hidden state=’on’/>(←追加)
</kvm>(←追加)
</features>


⑦ Windows10のセットアップをガイダンスに従ってセットアップする。
⑧ Windows10のインストールが終了したら「NVIDIA GeForce GTX 750 Ti」のドライバーをインストールする。ドライバーはNVIDIA公式でダウンロードができる。
⑨ インストール後はWindowsを一度シャットダウンし、仮想マシンマネージャーも一旦終了する。
⑩ 仮想マシンマネージャーを再度起動させ、Windows10を起動させる。
⑪ ディスプレイが正常な解像度で表示されていたらすべての作業が終了。デバイスマネージャー等でグラフィックボードが正常動作していることも確認できれば完了となる。



 CentOS7でのKVM=QEMU仮想化環境のWindows10なFF14ベンチマークは「非常に快適」のご評価を頂きました!
 仮想ゲストのGPUパススルーは意外と難しい分野になると思うのですが、基本を押さえればなんとかなりそうな感じでした。現状CPUの仮想化は誰でも楽にできるのですが、GPUの仮想化まではなっていなくて、ホストにGPUを読み込ませず、仮想ゲストのOSだけにGPUを読み込ませる必要があることを抑えれば、あとは楽にできる感じです。(そのためディスプレイが2台必要・・・zzz)
 Linux側ではSSHなどでほとんど制御ができるため、普段はサーバーとしてのLinux。FF14などのパワーのある遊びをしたいときはWindowsを仮想マシンマネージャーから起動させて楽しむ。新しいライフスタイルの提案としては良いのではないでしょうか?
 ある意味、Macの「BootCamp」みたいなことがLinuxでもできるという点ではメリットも多く、これまで電力消費の高いデスクトップサーバー3台を2台に減らせたのは大きな省電力の一歩ともいえるかもしれません。

 2月~3月ぐらいにNAS代わりだったデータサーバーのクルル鯖の不調から1か月半にしてようやく安定してきたので、やっとガタケット163の準備に・・・(おい
 大丈夫です。物語の土台になるお話はできているので、頑張って形にしていきたいと思います。4月28日、平成最後の「ガタケット163」でオリジナルの小説を出すという・・・平成最後のガタケットなので・・・ここは頑張らないと・・・いけない・・・
 何かと忙しい4月ですが、これからのためにも楽しくやっていきたいですね。新年度もどうかよろしくお願いします。