【ITニュース解説】Running QEMU VMs on ARM64: UEFI Requirements
2025年10月05日に「Dev.to」が公開したITニュース「Running QEMU VMs on ARM64: UEFI Requirements」について初心者にもわかりやすく解説しています。
ITニュース概要
QEMUでARM64仮想マシンを動かすには、x86_64と異なりUEFIファームウェアの指定が必須だ。ARM64の起動にはUEFIが前提のため、QEMUコマンドで`-bios`オプションを使い、edk2-aarch64-code.fdのような専用ファームウェアファイルを明示的に設定する必要がある。
ITニュース解説
QEMUは、コンピューターの中に仮想のコンピューター(仮想マシン)を作り、それを動かしたり管理したりするための非常に強力で柔軟なツールだ。これは、さまざまな種類のコンピューターのCPU(中央演算処理装置)アーキテクチャをサポートしており、例えばWindowsが動いているパソコンの上でLinuxを動かしたり、異なる種類のCPU向けのソフトウェアを開発したりする際に非常に役立つ。QEMUがこれほど多様なプラットフォームに対応できることは大きな強みだが、その反面、仮想マシンを設定する際には、それぞれのCPUアーキテクチャが持つ細かい違いを理解する必要がある。
特に、現在広く使われているx86_64というCPUアーキテクチャと、スマートフォンやタブレット、最近ではサーバーにも採用されているARM64というCPUアーキテクチャでは、コンピューターが起動する仕組みに基本的な違いがある。この違いを把握していないと、QEMUを使って仮想マシンを動かそうとしたときに、予期せぬ問題に直面する可能性がある。この記事では、ARM64の仮想マシンをQEMUで動かす際に特に重要となる、UEFI(Unified Extensible Firmware Interface)という起動方法に関する要件について詳しく解説する。
x86_64のコンピューターでは、電源を入れたときに最初に動作するソフトウェアとして、従来のBIOS(Basic Input/Output System)か、より新しいUEFIのどちらかを使ってシステムが起動する。QEMUでx86_64の仮想マシンを動かす場合、多くの場合、特別な設定をしなくてもQEMUが自動的にBIOSまたはUEFIを使って起動してくれる。しかし、ARM64のコンピューター、特にサーバーやクラウド環境で使われるOS(例えばUbuntuのARM64クラウドイメージなど)は、UEFIを標準の起動方法として強く推奨している。これは、UEFIがハードウェアの初期設定やOSの起動に必要なプログラムを読み込むために不可欠な存在だからである。
そのため、ARM64で仮想マシンを動かす場合、QEMUに対してUEFIファームウェアを明示的に指定する必要がある。具体的には、次の2種類のファイルが関係する。一つは「UEFIファームウェアファイル(.fdファイル)」で、これは従来のBIOSの代わりとなるもので、UEFIのプログラムコード、各種ドライバー、そしてOSを起動する前の環境(プリブート環境)が含まれている。もう一つは「UEFI変数ファイル(.varsファイル)」で、これはコンピューターの電源を切っても内容が保持されるメモリー(NVRAM:不揮発性RAM)に保存される設定データである。このファイルには、デフォルトの起動順序や、セキュアブートなどの重要な設定情報が記録されている。これらのファイルをQEMUに正しく指定することで、ARM64の仮想マシンは適切に起動できるようになる。
では、これらのUEFIファームウェアファイルはどこで見つけられるのだろうか。幸いなことに、QEMUをインストールすると、さまざまなCPUアーキテクチャに対応するファームウェアファイルが自動的に一緒にインストールされる。自分のQEMU環境で利用可能なファームウェアファイルを探すには、「qemu-system-aarch64 -L help」というコマンドをコンピューターのターミナルで実行してみると良い。このコマンドを実行すると、QEMUがファームウェアファイルを探すパス(ディレクトリ)が表示される。例えば、「/opt/homebrew/Cellar/qemu/10.1.0/bin/../share/qemu-firmware」のようなパスが表示されるだろう。これらのディレクトリの中に、UEFIファームウェアファイル(.fd)とUEFI変数ファイル(.vars)が格納されている。ARM64の仮想マシンで「virt」という種類の仮想ハードウェア(マシンタイプ)を使う場合、「edk2-aarch64-code.fd」というファイルが適切なUEFIファームウェアとしてよく利用される。
これらの知識を踏まえて、実際にARM64の仮想マシンをQEMUで動かすためのコマンドを見てみよう。x86_64の場合とは異なり、ARM64ではいくつかの重要なオプションを追加する必要がある。
例えば、UbuntuのARM64クラウドイメージを動かす場合、次のようなコマンドを使うことになる。
qemu-system-aarch64 \
-machine virt -accel hvf -m 2048 \
-nographic -hda ./ubuntu-25.04-server-cloudimg-amd64.img \
-smbios type=1,serial=ds='nocloud;s=http://192.168.178.37:8000/' \
-bios edk2-aarch64-code.fd
このコマンドの中で、ARM64の仮想マシンを動かす上で特に重要な新しい要素が二つある。一つは「-machine virt」というオプションだ。これは、QEMUが提供する仮想ハードウェアの種類を指定するもので、x86_64で一般的に使われる「q35」の代わりに、ARM64で推奨される「virt」を指定している。この「virt」は、仮想化環境向けに最適化された仮想ハードウェアを提供する。もう一つ、そして最も重要なのが「-bios edk2-aarch64-code.fd」というオプションである。この「-bios」パラメーターは、QEMUにどのファームウェアを使って仮想マシンを起動するかを明示的に指示する。ここで先ほど見つけた「edk2-aarch64-code.fd」というUEFIファームウェアファイルを指定することで、ARM64の仮想マシンはUEFI経由でOSを正しく起動できるようになる。
結論として、QEMUを使ってARM64の仮想マシンを動かすには、OSの起動プロセスにおいてUEFIが果たす重要な役割を理解することが不可欠だ。x86_64の仮想マシンとは異なり、ARM64ではUEFIファームウェアファイルをQEMUコマンドで正しく指定する必要がある。この設定を適切に行うことで、異なるCPUアーキテクチャを持つホストコンピューターの上でも、ARM64の仮想マシンを問題なく起動し、利用することができるようになるだろう。この知識は、システムエンジニアを目指す上で、多様な環境での仮想化技術を使いこなすための第一歩となるはずだ。