仮想マシン
 Computer >> コンピューター >  >> ソフトウェア >> 仮想マシン

KVM と VirtualBox を共存させる方法 ― アンインストールも再起動も不要なモジュール切り替え術

KVM と VirtualBox は「共存できない」とよく言われます。正確には、KVM のカーネルモジュールがメモリにロードされている間、VirtualBox が起動できなくなるというものです。逆に KVM の方は VirtualBox と並行しても問題なく動作するため、実質的には一方向だけの問題です。しかも解決は非常に簡単です。残念ながら、「どちらかをアンインストールしろ」という酷いチュートリアルを数多く見かけます。また、もう少しまともな解説でも、単に「rmmod しろ」と書いてあるだけで、元に戻す方法まで説明しているものはほとんどありません。

この記事では、何もアンインストールせず、使用のたびに再起動することもなく、KVM と VirtualBox を並べて使う方法を紹介します。競合する相手側を動作させるために、それぞれの機能を無効化・有効化する手順を学びましょう。すべてライブで行い、再起動は一切不要です。それでは始めましょう。

症状 ― VirtualBox が起動しない

VirtualBox を起動すると、次のようなエラーが表示されることがあります。

「VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot.」(VirtualBox は VMX ルートモードでは動作できません。KVM カーネル拡張を無効にし、カーネルを再コンパイルして再起動してください)

おっと、落ち着いてください。これは非常に技術的で恐ろしく見えるメッセージですが、何かを再コンパイルする必要は一切ありません。修正にかかる時間はわずか5秒で、システムへの破壊もまったくありません。

問題の仕組み

VirtualBox と KVM は同時に動作できないため、VirtualBox を使いたい場合は KVM を無効化する必要があります。問題は「どうやって」無効化するかです。答えは、カーネルモジュールの組み込みと取り外しです。

Linux はカーネルモジュールの動的な挿入・削除をサポートしており、再起動なしでメモリ上のモジュールをロード・アンロードできます。詳細については、Linux コマンド関連の記事や Crash Book を参照してください。

ここでは insmod コマンドと rmmod コマンドを使用します。

モジュールの取り外し

まずカーネル空間を確認しましょう。lsmod コマンドを実行して、メモリにロードされているモジュールの一覧を見てみます。

ご覧のとおり、VirtualBox は vboxdrvvboxnetflt ドライバを使用し、KVM は kvmkvm_intel ドライバを使用しています。なお、kvm_intel は Intel アーキテクチャ専用で、AMD プラットフォームの場合は kvm_amd になります。ここでは KVM のモジュールをアンロードします。

/sbin/rmmod kvm_intel
/sbin/rmmod kvm

大きな疑問:これで KVM が使えなくなってしまった。どうやって元に戻せばいいのか?

鋭い指摘です!それでは復旧方法を見ていきましょう。

モジュールの挿入

モジュールを取り外したのと同じ要領で、再度挿入することができます。ディスク上のモジュールの場所を特定してから挿入してください。依存関係がある場合に便利な modprobe コマンドを使うこともできます。

まずモジュールを探しましょう(コマンドには sudo を想定していますが、root として実行しても構いません)。

updatedb
locate kvm

検索結果は大量に出るので、kvm.ko と kvm-intel.ko に絞り込むとよいでしょう。

次に、実行中のカーネルに一致するモジュールを挿入します。カーネルバージョンは uname -r で確認できます。

/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm.ko
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm-intel.ko

実際の操作画面の例を紹介します。まず lsmod で kvm モジュールがロードされていないことを確認し、次に kvm モジュールをロードしてから、再度 lsmod を実行します。

なお、スクリーンショット内のコマンドは上記のコードボックスとは少し異なります。/sbin が PATH に含まれている前提で、簡潔さのために短縮形の insmod コマンドを使っています。一方で、モジュールのフルパスも併用して、実際のパスの形式をお見せしました。この手順をスクリプト化する(ぜひそうすべきです)場合は、フルパスが必須となり、柔軟性を高めるためにバッククォートによるコマンド置換の利用をおすすめします。

スクリプト化

次はこの作業を自動化しましょう。必要なのは2つのスクリプトです。1つは KVM モジュールをアンロードするもの、もう1つはロードするものです。より厳密に運用したいなら、KVM 使用中は VirtualBox のサービスを停止し、KVM の使用後に開始するようにしてもよいでしょう。以下は VirtualBox ドライバを操作する例です。

したがって、VirtualBox を有効化して KVM を無効化するサンプルスクリプトは次のようになります。

#!/bin/bash
/sbin/rmmod kvm_intel
/sbin/rmmod kvm
/etc/init.d/vboxdrv start

逆に、KVM をロードして VirtualBox を停止するスクリプトはこちらです。

#!/bin/bash
/etc/init.d/vboxdrv stop
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm.ko
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm-intel.ko

AMD マシンの場合は、kvm-intel.ko を kvm-amd.ko に置き換えてください。また、すでに起動しているサービスを再度起動しようとしないよう、健全性チェック(状態確認処理)を追加する必要がある点にも注意してください。ここでは省略しましたので、宿題として考えてみてください。

同様に、CPU アーキテクチャにも注意が必要です。多くの人にとっては x86(x86_64 含む)で問題ありませんが、SPARC や ARM、Itanium など別のアーキテクチャを使用している場合は、パスを適宜変更してください。

あとは、これらのスクリプトへのデスクトップショートカットを作成すれば完成です。特定のカーネルバージョンではなく uname を使うことで、カーネルをアップグレードした後もスクリプトがそのまま動作します。

まとめ

ご覧のとおり、現実は思っていたほど厳しいものではありません。このチュートリアルでは、どちらかをアンインストールしたり、使用のたびに再起動したりすることなく、VirtualBox と KVM を協調させるシンプルな方法を紹介しました。Linux のアーキテクチャはモジュールのライブ挿入を可能にしているため、本当に再起動が必要になるのはカーネルのアップグレード時だけです。

このチュートリアルから学べることは複数あります。快適さと実用性を両立させる賢い方法、カーネルモジュールの挿入・削除の手順、作業のスクリプト化の手法、そして KVM と VirtualBox を並べて使うという目標の達成方法です。

この記事がお役に立てば幸いです。

それでは、また。

  1. VirtualBoxでディスクをクローンする方法【VBoxManage活用チュートリアル】

    仮想化を業務でも趣味でも利用している方なら、VirtualBoxという強力かつ多用途な無料ソリューションを目にしたことがあるかもしれません。VirtualBoxは、デスクトップユーザーに対して、あらゆる形でOSを展開できる大きな柔軟性を提供してくれます。さらに、単なる趣味として仮想化を楽しんでいるだけでなく、仮想化を通じて新しいOSを学ぼうとする熱心なソフトウェア愛好家の方であれば、次のような場面に必ず直面することでしょう。それは「大量の仮想マシンを展開する必要がある」というシナリオです。一台ずつインストール作業を行う時間的な余裕はないはずです。実際、大規模に環境を展開する際に手動で一つずつマ

  2. VirtualBox 3.0.0 徹底レビュー!DirectX対応とネットワーク機能強化がすごい

    私のお気に入りのデスクトップ仮想化ソフトウェアといえば、VirtualBoxとVMware Serverです。どちらも愛用しており、それぞれに魅力があります。全体的にはよく似た製品ですが、片方にしかない独自の機能を持っており、互いをうまく補完し合う関係にあると言えます。 つい先日、VirtualBox 3.0.0が大きな話題とともにリリースされました。これは、旧バージョンやVMware Serverと比べてどこまで進化したのかを確かめる絶好の機会です。深呼吸して、私と一緒にツアーに出かけましょう。長めの前置きで少々お付き合いいただきますが、きっと価値のある内容のはずです。 VirtualBo