Ubuntu で Linux KVM と VirtualBox を共存させる方法
はじめに
開発環境やテスト環境を構築する際、仮想化技術は不可欠なツールです。Linux 環境で利用できる仮想化ソリューションとして、OS に統合されたハイパーバイザーである Linux KVM と、クロスプラットフォームで利用可能な VirtualBox が広く知られています。
KVM は、Linux カーネルに直接組み込まれているため、高速かつ安定した動作が期待でき、特にサーバー環境でよく利用されています。一方、VirtualBox は、Linux だけでなく、Windows や macOS など、さまざまな OS 上で動作し、手軽に利用開始できるため、デスクトップ環境での仮想化や、異なる OS 環境のテストに便利です。
通常、これらの仮想化ソフトウェアは、CPU の仮想化支援機能(Intel VT-x や AMD-V)を排他的に利用するため、同時に実行することはできません。しかし、開発プロジェクトの要件や、使用したい仮想アプライアンスの形式によっては、一台のマシンで KVM と VirtualBox の両方を使い分けたい場面が出てきます。
たとえば、コンテナを使った開発をするときに利用する Docker Desktop を Linux で使う場合は KVM の環境が必要です。そのため、Docker Desktop for Linux を使う場合は KVM が実行できる環境を用意することになります。
このとき、VirtualBox の仮想マシンを同じマシンで使いたい場合があります。KVM の環境があれば、仮想マシンは KVM で用意すれば良いように思うかもしれませんが、それでは開発環境として不足だという場面があります。たとえば、Windows の評価用仮想マシンは公式で VirtualBox のものが提供されていますが、Linux KVM のものはありません。これを動かしたい場合は VirtualBox の環境が必要です。
また、開発向けのインフラ環境構築で良く利用する Vagrant は VirtualBox と組み合わせて使うのが一般的です。他にも KVM の仮想マシンは Linux でしか使えないため、他の OS のマシンへ持っていって、そのまま稼働させることはできません。一方、VirtualBox であれば Windows や macOS へ仮想マシンを簡単に持っていって稼働させることができます。
このように、Docker Desktop と Vagrant の両方を使えるマシンが必要な場合があるため、これらを共存させるように設定できるか調べてみました。
この記事では、Ubuntu 24.04 LTS 環境において、Linux KVM と VirtualBox を共存させ、必要に応じて切り替えて利用するための環境構築手順を解説します。
Linux KVM とは
KVM (Kernel-based Virtual Machine) は、Linux カーネルそのものをハイパーバイザーとして機能させるための仮想化基盤です。Linux に統合されているため、追加のハイパーバイザーソフトウェアをインストールすることなく、ネイティブに近いパフォーマンスで仮想マシンを実行できるのが大きな特徴です。
一般的に、ハードウェアエミュレーターである QEMU と組み合わせて利用されます。QEMU でディスク、ネットワーク、ビデオなどのデバイスをエミュレートできるようにし、KVM で CPU やメモリといったハードウェアの仮想化を実現していると考えておけば良いです。KVM は、ハードウェアで用意されている仮想化支援機能(Intel VT-x, AMD-V)を利用することで、ソフトウェアだけでは難しい処理の高速化を実現しています。
VirtualBox とは
Oracle VM VirtualBox は、Oracle が開発・提供しているクロスプラットフォーム対応の仮想化ソフトウェアです。Windows, macOS, Linux など、さまざまなホスト OS 上で動作し、多種多様なゲスト OS をサポートしています。
直感的な GUI(グラフィカルユーザインタフェース)を備えており、仮想マシンの作成や管理が容易なため、個人利用やデスクトップ用途で広く普及しています。また、ゲスト OS との間でクリップボード共有やファイル共有を簡単に行うための「Guest Additions」など、便利な機能も豊富に提供されています。
Linux KVM 環境の構築
ここでは、Linux KVM 環境の構築について次の順で説明します。
- Linux KVM 用ソフトウェアのインストール
- Linux KVM 用仮想ネットワーク
- Linux KVM 用仮想マシンの作成
- Linux KVM 用仮想マシンの動作確認
Linux KVM 用ソフトウェアのインストール
まず、KVM を動作させるために必要なソフトウェアをインストールします。
1. 仮想化支援機能の確認
CPU が仮想化支援機能(Intel VT-x または AMD-V)に対応しているかを確認します。以下のコマンドを実行してください。
egrep -c '(vmx|svm)' /proc/cpuinfo
実行結果として 1
以上の数値が表示されれば、CPU は仮想化支援機能に対応しています。もし 0
が表示された場合は、マシンの BIOS/UEFI 設定で仮想化支援機能(Intel VT-x や AMD-V など)が無効になっている可能性があります。その場合は、マシンを再起動し、BIOS/UEFI 設定画面で有効にしてください。
2. KVM 関連パッケージのインストール
次に、KVM 本体と、仮想マシンの管理に必要なツールをインストールします。
sudo apt-get update
sudo apt-get install -y \
qemu-kvm \
libvirt-daemon-system \
libvirt-daemon \
libvirt-clients \
bridge-utils \
libosinfo-bin \
virtinst \
virt-manager
インストールしているパッケージについての説明は、以下のとおりです。
パッケージ | 説明 |
---|---|
qemu-kvm |
KVM と連携して動作するエミュレーター |
libvirt-daemon-system |
libvirtd デーモンをシステムサービスとして管理 |
libvirt-daemon |
仮想マシン、ストレージ、ネットワークなどを管理する libvirtd デーモン本体 |
libvirt-clients |
virsh などの管理用クライアントツール |
bridge-utils |
仮想ブリッジネットワークを作成・管理するためのツール |
libosinfo-bin |
ゲスト OS に関する情報(対応ハードウェアなど)のデータベースとツールを提供 |
virtinst |
CUI で仮想マシンを作成する virt-install コマンドを提供 |
virt-manager |
GUI ベースの仮想マシン管理ツール |
3. ユーザーの権限設定
自分のアカウントで KVM 上の仮想マシンを管理できるように、カレントユーザーを libvirt
グループと kvm
グループに追加します。
sudo usermod -aG libvirt "$(whoami)"
sudo usermod -aG kvm "$(whoami)"
この設定を有効にするには、一度ログアウトしてから再度ログインします。
4. KVM の動作確認
最後に、libvirtd
サービスが正常に動作していることを確認します。
sudo systemctl status libvirtd
出力結果で active (running)
と表示されていれば問題ありません。
また、以下のコマンドで、現在作成されている仮想マシンの一覧(この時点では空のはずです)を表示できれば、KVM 環境は正常にセットアップされています。
virsh list --all
Linux KVM 用仮想ネットワーク
libvirt
は、インストール時に default
という名前の仮想ネットワークを自動的に作成します。これは、ホスト OS の外部とは隔離された NAT(Network Address Translation)ネットワークです。
以下のコマンドで、利用可能な仮想ネットワークの一覧を確認できます。
virsh net-list
default
ネットワークが active
状態で表示されるはずです。
ネットワークの詳細を確認するには、以下のコマンドを実行します。
virsh net-dumpxml default
この XML 定義から、ネットワークが NAT モードであることや、DHCP によってゲスト OS に割り当てられる IP アドレスの範囲などを確認できます。
Linux KVM 用仮想マシンの作成
KVM 上に仮想マシンを作成するには、GUI ツールの virt-manager
を使う方法と、CUI ツールの virt-install
を使う方法があります。ここでは、直感的に操作できる virt-manager
を使った手順を説明します。
- アプリケーションメニューから「仮想マシンマネージャー」を検索して起動します。
- メニューの「ファイル」から「新しい仮想マシン」を選択します。
- インストールメディアを選択します。ここでは、ダウンロード済みの ISO イメージファイル(例:
ubuntu-24.04.2-desktop-amd64.iso
)を選択することを想定しています。「ローカルのインストールメディア」を選び、「進む」をクリックします。 - ISO ファイルのパスを指定し、OS の種類とバージョンを適切に設定します(通常は自動で検出されます)。
- 仮想マシンに割り当てるメモリと CPU コア数を設定します。
- 仮想マシン用のストレージ(仮想ディスク)のサイズを設定します。最小インストール時に 10 GB 程度の容量が必要だったので、20 GB 以上にしておくのが良いでしょう。
- 最後に、仮想マシンの名前を設定し、「完了」をクリックする前に「インストールの前に設定をカスタマイズする」にチェックを入れます。
- 設定画面が表示されたら、左側のメニューから「NIC」を選択し、「ネットワークソース」が
default
になっていることを確認します。 - 「適用」をクリックし、左上の「インストールの開始」ボタンを押すと、仮想マシンが起動し、OS のインストールが始まります。
あとは、通常の PC に OS をインストールするのと同じ手順で、ゲスト OS のセットアップを進めてください。
Linux KVM 用仮想マシンの動作確認
virt-manager
のメイン画面から、作成した仮想マシンを選択して「開く」ボタンをクリックすると、仮想マシンのコンソール画面が表示されます。ここから、ゲスト OS の操作が可能です。
また、virsh
コマンドを使っても、仮想マシンの状態確認や操作ができます。
仮想マシンの一覧表示:
virsh list --all
仮想マシンの起動:
virsh start <仮想マシン名>
仮想マシンのシャットダウン:
virsh shutdown <仮想マシン名>
仮想マシンの強制停止:
virsh destroy <仮想マシン名>
これらのコマンドで、仮想マシンが正常に管理できることを確認してください。
KVM と VirtualBox 共存のための設定
Linux OS の起動時に KVM 用のモジュールについて自動で有効化されないようにします。そのためには、/etc/default/grub
に GRUB_CMDLINE_LINUX="kvm.enable_virt_at_load=0"
の指定を追加します。
/etc/default/grub
に対応済みの設定、/tmp/grub
に対応前の設定を保存してある場合、これらの差分を diff
コマンドで確認すると、次のようになります。
$ sudo diff /etc/default/grub /tmp/grub
11c11
< GRUB_CMDLINE_LINUX="kvm.enable_virt_at_load=0"
---
> GRUB_CMDLINE_LINUX=""
この設定を起動時に使われる GRUB
へ適用するには次のコマンドを実行します。
sudo cp -a /boot/grub/grub.cfg /boot/grub/grub.cfg.back
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo uppdate-grub
Ubuntu を再起動したら、設定が反映されていることを確認します。/proc/cmdline
を cat
コマンドで開くと、kvm.enable_virt_at_load=0
が含まれたものが表示されるはずです。
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-(略) root=UUID=(略) ro kvm.enable_virt_at_load=0 quiet splash vt.handoff=7
もしくは、/sys/module/kvm/parameters/enable_virt_at_load
を開いて、N
となっていることを確認しても良いです。
$ cat /sys/module/kvm/parameters/enable_virt_at_load
N
この設定で、KVM と VirtualBOx を共存させることができます。
VirtualBox 環境の構築
ここでは、VirtualBox 環境の構築について次の順で説明します。
- VirtualBox 用ソフトウェアのインストール
- VirtualBox 用仮想ネットワーク
- VirtualBox 用仮想マシンの作成
- VirtualBox 用仮想マシンの動作確認
VirtualBox 用ソフトウェアのインストール
次に、VirtualBox をインストールします。Ubuntu の公式リポジトリからインストールする方法が最も手軽なのですが、少し古いバージョンとなってしまいます。VirtualBox のサイトの https://www.virtualbox.org/wiki/Linux_Downloads からダウンロードすると、最新版が使えるようになります。
なお、この記事では説明をしていませんが、Secure Boot を有効にしている場合は、VirtualBox のインストールの途中で対話的な対応が必要になります。再起動時の Secure Boot 対応のためのパスワード設定と、パソコン再起動時の Secure Boot 対応のためのパスワード入力が必要になります。
Vagrant を使う場合の説明もあわせて、下記に記事があります。参考にしてください。
1. KVM モジュールのアンロード
VirtualBox をインストールして利用する前に、競合を避けるために KVM のカーネルモジュールをアンロード(無効化)しておくと、より安全です。
sudo rmmod kvm_intel
sudo rmmod kvm_amd
sudo rmmod kvm
Intel CPU の場合は kvm_intel
を、AMD CPU の場合は kvm_amd
をアンロードします。両方実行しても問題ありません。ただし、モジュールがロードされていない場合はエラーが出力されます。
$ sudo rmmod kvm_amd
rmmod: ERROR: Module kvm_amd is not currently loaded
2. VirtualBox のインストール
ここでは Ubuntu 24.04 用の deb ファイルをダウンロードしてインストールします。ダウンロード URL は VirtualBox のサイトの https://www.virtualbox.org/wiki/Linux_Downloads を参照して2025年8月26日時点で入手したものを使っています。
BASE_URL=https://download.virtualbox.org
DEB_FILE=virtualbox-7.2_7.2.0-170228~Ubuntu~noble_amd64.deb
DEB_URL="${BASE_URL}/virtualbox/7.2.0/${DEB_FILE}"
curl -O -L "${DEB_URL}"
sudo apt-get install -y "./${DEB_FILE}"
インストール後、vboxusers
グループに自分のアカウントを追加します。
sudo usermod -aG vboxusers "$(whoami)"
3. VirtualBox Extension Pack のインストール (推奨)
USB 2.0/3.0 サポート、リモートデスクトップ機能、ディスク暗号化などの追加機能を利用するには、「VirtualBox Extension Pack」のインストールが必要です。
まず、インストールされている VirtualBox のバージョンを確認します。
vboxmanage --version
次の VirtualBox の公式サイトから、表示されたバージョンに一致する Extension Pack をダウンロードします。
ダウンロードが完了したら、以下のコマンドで Extension Pack をインストールします。
sudo vboxmanage extpack install <ダウンロードしたExtension Packのファイル名>.vbox-extpack
インストール中にライセンスの同意を求められるので、内容を確認して y
を入力してください。
VirtualBox 用仮想ネットワーク
VirtualBox では、仮想マシンのネットワーク設定として、いくつかのモードを選択できます。仮想マシンの設定画面の「ネットワーク」セクションから、これらのモードを切り替えることができます。
-
NAT: KVM の
default
ネットワークと同様に、ホスト OS の IP アドレスを変換して外部と通信します。仮想マシンから外部への通信は可能ですが、外部から仮想マシンへ直接アクセスすることはできません。 - ブリッジアダプター: ホスト OS と同じネットワークに、仮想マシンが直接接続されるように見せかけるモードです。ルーターから直接 IP アドレスが割り当てられ、ホスト OS と同じようにネットワーク上で扱われます。
- 内部ネットワーク: 同じ内部ネットワークに接続された仮想マシン間でのみ通信が可能な、完全に隔離されたネットワークです。
- ホストオンリーアダプター: ホスト OS と仮想マシン間でのみ通信が可能なネットワークです。
通常は、デフォルトの NAT モードを使います。ただし、今回、手元で動作確認したマシンでは NAT モードだとインターネット接続ができませんでした。ブリッジアダプターのモードへ変更したところ、インターネット接続ができるようになりました。
なお、NAT モードでも、手動でゲスト OS のネットワーク設定で DNS に 10.0.2.3
を指定することで解決しました。10.0.2.3
は、VirtualBox の NAT 用ネットワークの内部 DNS の IP アドレスです。この値ではなく、パブリック DNS の 8.8.8.8
や 1.1.1.1
などを指定しても動作するはずです。
個人的な利用方法としてはブリッジアダプターを使うことが多いので、これについては、きちんと調べていません。ここでは、ブリッジアダプターのモードを使うことにして、設定変更して先に進みます。
VirtualBox 用仮想マシンの作成
VirtualBox の GUI は非常に直感的で、簡単に仮想マシンを作成できます。
OS のインストールをせずに仮想マシンを用意することも可能です。それについては次の記事で Windows 版の VirtualBox を使って説明しています。VirtualBox のバージョンが少し古いのですが、今回使用している Linux 版の VirtualBox でも基本は同じなので参考になるはずです。
ここでは、インストールする OS の ISO イメージファイルを用意して、OS をインストールする仮想マシンを用意する手順について簡単に説明します。OS の ISO イメージファイルは、たとえば Ubuntu Desktop の LTS 版(2025年8月27日時点だと 24.04)であれば、https://ubuntu.com/download/desktop から入手可能です。
- アプリケーションメニューから「Oracle VM VirtualBox」を検索して起動します。
- ツールバーの「新規」ボタンをクリックします。
- 「名前と OS タイプ」の画面で、仮想マシンの名前を入力し、インストールする OS の ISO イメージファイルを選択します。多くの場合、ISO イメージを選択すると「タイプ」と「バージョン」は自動的に設定されます。
- 「ハードウェア」のセクションで、仮想マシンに割り当てるメインメモリーのサイズとプロセッサー数を設定します。
- 「ハードディスク」のセクションで、仮想ディスクのサイズを設定します。
- 設定内容を確認し、「完了」ボタンをクリックすると、仮想マシンが作成されます。
- メイン画面で作成した仮想マシンを選択し、ツールバーの「起動」ボタンをクリックすると、OS のインストールが開始されます。
OS のインストール完了後、より快適に利用するために Guest Additions をインストールすることをお勧めします。ゲスト OS のウィンドウメニューから「デバイス」-「Guest Additions CD イメージの挿入」を選択します。すると、ゲスト OS 内で Guest Additions CD イメージがマウントされて使えるようになります。これを使って Guest Additions をインストールしてください。
これらの GUI 操作やコマンドで、仮想マシンが正常に管理できることを確認してください。
ゲスト OS が Ubuntu 24.04 の場合、Guest Additions を使えるようにするには、次のコマンドを実行して必要なパッケージをインストールが必要です。
sudo apt-get install -y build-essential dkms "linux-headers-$(uname -r)"
それから、VBoxLinuxAdditions.run
を実行します。たとえば、ubuntu
ユーザーを使っていた場合、Guest Additions CD イメージの挿入をすると、/media/ubuntu/VBox_GAs_7.2.0
にこのファイルがあります。
ターミナルで次のようにコマンド実行することで、VBoxGuestAdditions のインストールができます。
sudo /media/ubuntu/VBox_GAs_7.2.0/VBoxLinuxAdditions.run
VirtualBox 用仮想マシンの動作確認
VirtualBox のメイン画面から、作成した仮想マシンを選択し「起動」ボタンを押すことで、仮想マシンが起動します。
コマンドラインから操作する場合は、vboxmanage
コマンドを使用します。
仮想マシンの一覧表示:
vboxmanage list vms
実行例は次のとおり。
$ vboxmanage list vms
"ubuntu2404" {f6a4f6e1-略}
実行中の仮想マシンの一覧表示:
vboxmanage list runningvms
仮想マシンの起動:
vboxmanage startvm "<仮想マシン名>" --type gui
実行例は次のとおり。
$ vboxmanage startvm "ubuntu2404" --type gui
Waiting for VM "ubuntu2404" to power on...
VM "ubuntu2404" has been successfully started.
仮想マシンの ACPI シャットダウン:
vboxmanage controlvm "<仮想マシン名>" acpipowerbutton
仮想マシンの強制停止:
vboxmanage controlvm "<仮想マシン名>" poweroff
KVM と VirtualBox の切り替え方法
前述の通り、KVM と VirtualBox は CPU の仮想化支援機能を共有できないため、同時に利用することはできません。GRUB の設定で共存できていますが、より安全に動作させたい場合は、利用したい仮想化ソフトウェアに応じて、KVM カーネルモジュールをロード・アンロードします。
手元では、こういったコントロールを手動でしなくても、KVM と VirtualBox の仮想マシンを同時に使用できていますが、長時間並列稼働させることまではしていません。
今回の環境は、KVM のゲスト仮想マシンや VirtualBox のゲスト仮想マシンで一時的に開発作業をするために用意するものなので、長時間の安定稼働までは必要ないはずですが、切り替えができることも知っておいた方が良いので、紹介します。
VirtualBox を利用する場合
VirtualBox を利用する前には、KVM モジュールがロードされていない状態にする必要があります。
lsmod | grep kvm
kvm_intel
や kvm_amd
、kvm
が表示された場合は、以下のコマンドでアンロードします。
sudo rmmod kvm_intel
sudo rmmod kvm_amd
sudo rmmod kvm
この状態で VirtualBox の仮想マシンを起動すれば、ハードウェア仮想化支援を利用して動作します。
KVM を利用する場合
KVM を利用する前には、KVM モジュールがロードされている状態にする必要があります。
sudo modprobe kvm
Intel 系の CPU を使っている場合は kvm_intel
をロードします。
sudo modprobe kvm_intel
AMD 系の CPU を使っている場合は kvm_amd
をロードします。
sudo modprobe kvm_amd
この状態で virt-manager
や virsh
を使って KVM の仮想マシンを起動します。
スクリプトによる切り替えの自動化
毎回手動でコマンドを実行するのは手間がかかるため、簡単なシェルスクリプトを作成しておくと便利です。ここでは Intel 系 CPU か AMD 系 CPU かの判定に grep Intel /proc/cpuinfo
のコマンドを使っていますが、手元の環境に合わせて適切なものにして使ってください。
use-vbox.sh
#!/bin/bash
echo "Disabling KVM modules for VirtualBox..."
if grep Intel /proc/cpuinfo; then
sudo rmmod kvm_intel
else
sudo rmmod kvm_amd
fi
sudo rmmod kvm
echo "Done. You can now use VirtualBox."
use-kvm.sh
#!/bin/bash
echo "Enabling KVM modules..."
sudo modprobe kvm
if grep Intel /proc/cpuinfo; then
sudo modprobe kvm_intel
else
sudo modprobe kvm_amd
fi
echo "Done. You can now use KVM."
これらのファイルに実行権限を与えておけば、簡単に切り替えができるようになります。
chmod +x use-vbox.sh use-kvm.sh
まとめ
本記事では、Ubuntu 24.04 環境に Linux KVM と VirtualBox をインストールし、両者を切り替えて利用する方法を解説しました。
Linux 起動時のコマンドオプションに kvm.enable_virt_at_load=0
を設定しておくと、1台のマシンで2つの強力な仮想化環境を共存させ、プロジェクトの要件に応じて柔軟に使い分けることができます。
それぞれのツールの長所を活かし、より効率的な開発・テスト環境を構築するための一助となれば幸いです。
Discussion