ちょっと調子に乗った人のQEMU for Windowsレビュー

どうも、シルフィードです。
最近になって、ちょいとVirtualBoxに飽きた(?)感じがしたので、QEMUを入れて遊んでみました。結構てこずるポイントがあったので共有。

QEMUってなんじゃいな

QEMUは、主にLinuxで使われるオープンソースの仮想マシンソフトウェアです。KVM使って仮想マシン組んだことある人もいるんじゃないかな。
初期設定ではVMwareやVirtualBoxのように実機のハードウェアを仮想化して用いるのではなく、CPU上で仮想ハードウェアを構築してOSを動かす形になります。そのため、RISC-VやSPARC、ARM(AArch)のCPUも完全に仮想化して実行することが可能。
ただし、その仕組みのせいでVMwareやVirtualBoxと比べ実行速度はかなり遅くなってしまいます。まぁ、OSに合わせてアクセラレータを指定してやれば、かなり早くなりますが(x86_64アクセラレーションに限る)。

また、Linux向けが母体なのでWindows向けのサポートはあんまり十分じゃないです。Linux版だと勝手にやってくれるのにWindows版では自力で頑張らなきゃいけないところや、どう足掻いても解決しない部分は出てくるとは思いますが、ロマンということで乗り切っていきましょう。

実際入れてみよう

今回はWindowsで用いるのでWindows版をダウンロード。
どうせ後でPATHを手動登録する必要があるので、インストール先は適当なところにしておけば大丈夫です。

UEFIを用いる場合はTianocore EDK IIをダウンロードしておきましょう。

上記はGitHubリポジトリ。最新版のEDK IIをビルドできるので、基本的にはこれをビルドして使うことになります。
ただし、Visual Studioが必要。MSYS2でのビルドはやめておいたほうがいいです(ヘッダーの関係のせいか、失敗する)。
めんどくせぇって人は、検索すればSourceForgeに5年ほど前のビルドが転がってるので、それを使いましょう。

MSYS2の利用者は、MSYSのリポジトリにqemuがあります。それを用いることも可能です(違いはインストール先とPATH登録を省略できることくらいしかない)。

起動してみよう

PATHにQEMUをインストールしたフォルダを追加してやったら、cmdで以下のコマンドを打って試験起動です。

qemu-system-x86_64

うまく行けば、こんな画面が出るかと。

SeaBIOSのオープンソース実装で起動している様子

このままではOSもなにもないので、何もせずに終了するだけです。
ここからは、試しでUbuntuを入れていきます。

QEMU for WindowsでUbuntuのインストール

そのまえに

WindowsでQEMUを使うなら、Windows Hypervisor Platformをつけておくのが懸命です。環境によってはArch Linuxのarchinstallが使えなくなったり、BIOS版で起動したArch LinuxのGRUBがフリーズしたりしますが、無いと重すぎて使い物になりません。
Windows Hypervisor Platformのつけ方は、調べればでてくると思うので割愛します。WSL2使用者ならもうついてるはず。

注記: これをつけるとVMwareやVirtualBoxが激重になります。また、Bluestacksでゲームをやってる人は、もしかしたらゲームの再インストールが必要になるかもしれません。



Ubuntuのダウンロード

CanonicalのGNOME版 Live ISOを使います。バージョンはJammy (22.04 LTS)。

バッチファイル用意

Windows版ではコマンドラインツールのみが利用できる状態、つまりLinuxにおけるvirt-managerのようなものがないので、事前にスクリプトを組んでおかないと大変になります。

@echo off
qemu-system-x86_64 -bios OVMF.fd -accel whpx -m (メモリ容量) -smp (指定コア数) -hda (仮想ハードディスクファイル).qcow2 -cdrom (UbuntuのISOファイル)

ISO起動用はこのような形式で書いてしまいましょう。HDD起動用は-cdromオプションを取り除き、さらに必要に応じて -device VGA か -device virtio-vga オプションをつけます。 Ubuntuの場合はvirtioドライバがあるので後者がおすすめ。
必要なファイルは後で用意します。

※1 ISO起動時にvirtio-vgaオプションをつけると、GNOMEの挙動がおかしくなります。非推奨。
※2 -cdromオプション外してそのままISO指定してもええやろと思ったそこのあなた。一応できはしますが、それをやるとISOがどういうわけかhdaに割り当てられるので、わけがわからないことになります。非推奨。
※3 virtio-gpuというオプションもありますが、起動時のコンソール出力の崩れや、総合的な描画速度低下を引き起こす可能性があります。非推奨。

仮想ハードディスクファイルの用意

qemu-imgユーティリティを使用します。

qemu-img -f qcow2 (ファイル名).qcow2 (指定容量)

容量指定にはSi接頭辞のイニシャル(K, M, G)を利用可能です (ただし作成されるのはそれぞれKiB, MiB, GiB単位の容量)。
-f qcow2とすることで、QEMU ディスクイメージ バージョン2 ファイルとして作成します。

ディレクトリ整備

ディレクトリ構造は以下の通り。

~/Ubuntu 22.04
|- OVMF.fd
|- ubuntu_2204.qcow (先ほど作成した仮想ハードディスク)
|- ubuntu.iso (Ubuntu 22.04のインストール Live ISO)
|- boot_iso.bat (ISO起動用batファイル)
|- boot_hdd.bat (HDD起動用batファイル)

もちろん、名前はお好みで変えてもらって構いません。



いざ起動

boot_iso.batをダブルクリックして起動。
一瞬コンソールが見えてすぐ消えたというなら、何かしら間違っているのでターミナルから実行してご確認を。

無事起動
ここまで映ればまぁ成功

あとは、いつも通りにUbuntuをインストールするだけ。
Ubuntuのインストール方法を忘れたという人や、VM初心者の方は一度箸を休めて、Ubuntuのインストール方法を調べてください。

さて、ここまで終わればHDD起動用スクリプトで起動すれば、生まれたてのUbuntuを見れるはずです。
まぁ、初期設定が途中で勝手にクラッシュするんですがね…(後述)

注意点

  • GNOME系ソフトの一部がクラッシュする

クラッシュログ見てないので細かいことは言えないのですが、なぜか初期設定とGNOME アプリストアがクラッシュします。

  • 再起動(及びサスペンド)ができない

whpxの影響。再起動かけると即刻QEMUが落ちます。
whpxを切ればそりゃ解決はしますが、尋常じゃないレベルで動作が重くなるので非推奨。諦めましょう。
もちろん、バッチから起動し直せば正常起動します。

  • gitがエラーを起こす

pullしてもfetchしてもcommitしても、以下のエラー。

Error: git-remote-http died of signal 4

GNUTLS_CPUID_OVERRIDE環境変数を0x1にしてやると解決するそうです。
常用するなら.bashrcに登録するのがおすすめ。

  • 起動時にマウスカーソルがどっかいく

QEMUのvirtio-vgaの仕様です。マウスカーソル座標をオーバーライドするので、仮想ディスプレイの初期化時にマウスカーソルが仮想ディスプレイ内の初期化位置に持ってかれます。
「持っていかれたァァァァァァァ」なんてどこぞの錬金術師みたいに叫ぶ必要はなく、カーソルをウィンドウ外に出してやれば解決。

不便だと言うなら、virtio-vgaをオフにするだけ。ただし、画面サイズ自動拡縮機能や、アクセラレーションがほぼなくなるので、基本的に目を瞑ってやったほうがいいかも。

  • この指示通りにやったら音が出なかった

スクリプトでのサウンドアダプターの登録を省略したから。自分の使う用途からして、音が出る機能はいらないので省略しました。
音出しに関しては、公式ドキュメントなりArch Wikiなりを見てもらえばわかるかと。

さいごに

正直、普段遣いならVirtualBoxやVMwareを使うほうが便利だとは思います。
しかし、こいつらが起動できなくなったりしたときや、Windows Hypervisor Platform使用時でも仮想マシンを共存させたいときなどは、使えておかないと困るときだってあります。

また、ARMやSPARC、RISC-Vなどの他CPUのOS・ソフトを動かせるという機能を使えば、Raspberry Piなどの環境向けのソフト開発を簡単にすることができます。今回の様な、「x86_64エミュレーション」に限った話ではないのがこのソフトのスゴイところ。

それでは、QEMUで良きエミュレータライフを!

この記事が気に入ったらサポートをしてみませんか?