気の向くままに辿るIT/ICT/IoT
システム開発

VirtualBoxとLinuxカーネル

ホーム前へ次へ
*BSD/PC-UNIX/Linuxって?

VirtualBoxとLinuxカーネル

VirtualBoxとLinuxカーネル

VirtualBoxとLinuxカーネルにおけるvboxdrvエラー
VirtualBoxとLinuxカーネルにおけるvboxdrvエラー

 Linux上にVirtualBoxをインストールして使用している場合、Linuxカーネルを更新した時にvboxdrvに関するエラーに遭遇することがあります。

 この時、VirtualBox Manager自体は、起動しますが、ゲストOSを起動しようとする際にエラーとなります。

 VirtualBox Managerではなく、端末からVBoxSDL/vboxsdlで起動すると次のようなエラーが表示されます。

$ vboxsdl -norawr0 --startvm ... &
[2] 18191
$ WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (3.19.3-200.fc21.i686) or it failed to
         load. Please make sure that you have kmod-VirtualBox for current kernel and load the kernel module by executing
           'systemctl restart systemd-modules-load.service' (as root)
         You will not be able to start VMs until this problem is fixed.
VBoxSDL: Error -1908 in suplibOsInit!
VBoxSDL: Kernel driver not installed
VBoxSDL: Tip! Make sure the kernel module is loaded. It may also help to reinstall VirtualBox.

 vboxdrvは、初めてVirtualBoxをインストールした時に[vboxdrv setup]を促されるもので当初あったことは間違いありませんが、この時には、/etc/init.d/vboxdrvを確認してみるもありませんでした。

 以前からFedora 20上でVirtualBoxを利用、Linuxカーネルの更新も幾度となくありましたが、このエラーに遭遇したタイミングとしては、Fedora 21になり、rpm-fusion-freeにVirtualBoxが入ったのを知り、これに入れ替え、何度めかの更新時、Linuxカーネルが3.18.9-200から3.19.3-200(3.18から3.19)にアップデートされた時でネットでちょっと調べただけでも結構前から出るときは出ていた模様。

 これらの仮想化ソフトウェアは、その性質上からLinuxカーネルの実装は重要なようで基本、Linuxカーネルの更新に合わせて自動的に追随し、対応したモジュールをLinuxカーネルに組み込んでいる?ようで、時には、これが間に合わないことがあるということのようです(が、後述のように、これはディストリビューションのオリジナルカーネルにおける話のようで本家、つまり、VirtualBoxのリポジトリからインストールしたものでは起こらない模様)。

 VirtualBoxにおける対策としては、最新のLinuxカーネル対応版が出るまで待ちつつ、それまでは、ホストOSを更新前の以前のLinuxカーネルで起動して利用するか、ソースコードからコンパイルするしか、対処のしようはないようです。(VMwareでは以前のLinuxカーネルで利用するか、最新のカーネルで個々のエラーに応じて手作業で修正するか、パッチをあてれば対処可能。)

 [yum search virtualbox]としてもソースはなさ気だったため、[yum repolist all]で登録済みリポジトリを確認、[yum-config-manager --enable virtualbox]で無効となっていた[virtualbox]リポジトリを有効にし、[yum search virtualbox]、すると[VirtualBox-kmodsrc]があったので[yumdownloader --source VirtualBox-kmodsrc]としてダウンロードしてみたものの、[/usr/src/akmods/]を見るとより新しい[VirtualBox-kmodsrc]が既にあり、意味なし。

 ということで今回のケースについては、VirtualBoxを利用する場合、最新のLinuxカーネル対応版が出るまで以前のLinuxカーネルで起動して利用することにしよう。。。

 と一瞬思いましたが、本家からインストールした時には、こうした状況に遭遇したことはなく、rpmfusion-freeからインストールした後に起こったということは、Linuxカーネル3.19が云々という以前に、もしかして本家のリポジトリからインストールすれば、こうしたことは起こらないのかも?

$ sudo yum remove VirtualBox
$ sudo yum-config-manager --disable rpmfusion-free
$ sudo yum-config-manager --enable virtualbox
$ yum search virtualbox
...
VirtualBox-4.2
VirtualBox-4.3
...
$ sudo yum install VirtualBox-4.3
$ sudo /etc/init.d/vboxdrv setup
...
$

 そこで最新のLinuxカーネル3.19.3-200で起動したFedoraにおいて[rpmfusion-free]からインストールしたVirtualBoxをアンインストール、[yum-config-manager]でリポジトリ[rpmfusion-free]を無効に、代わりに当初インストールしておいたリポジトリ[virtualbox]を有効にし、検索してみると4.2と4.3があったので4.3をインストール後、念の為、[vboxdrv setup]。

 ちなみにバージョンを確認してみると[rpmfusion-free]のVirtualBoxは、4.3.20、本家は、4.3.26でした。

 早速、VirtualBoxを起動、拡張パックのアップグレードを促され、インストールまでした後、ゲストOSを起動してみると案の定、何事もなかったように起動出来ました。

 ちゃんと調べてはいませんが、VirtualBoxのカーネルモジュールが必要なのは、Fedora、もしくは、rpmfusion-freeであって本家ならその必要はないか、既に対応済みなのかといったところなのでしょう。

追記

 後日、yum updateしたらLinuxカーネルも3.19.3-200から3.9.15-200にアップグレードされ、3.9.15-200では、vboxdrvの存在も確認でき、/etc/init.d/vboxdrv setupを実行したら、仮想マシンも無事起動できるようになりました。

ホーム前へ次へ