VirtualBox
ubuntu16.04

Ubuntu Desktop 16.04でVirtualBoxが動かないときの対処方法

More than 1 year has passed since last update.

開催した勉強会、Nagoya.cloud.first #1でUbuntu 16.04でVirtualBoxを用いてVirtual Machineが作成できないという事象に遭遇したのですが、その原因と解決方法についてあたりがつきましたので共有します。


TL;DR


  • Ubuntu 16.04でリポジトリを編集せずにaptコマンドでVirtualBoxを入れた場合、仮想マシンを作成後、isoイメージを読み込ませようとするとホストOSごとフリーズする場合がある

  • Meltdown対応のためにカーネルのバージョンが上がっていることが原因

  • 最新のVirtualBox(>=5.2)を利用することで対処可能


発生条件

Ubuntu 16.04を入れた直後にaptでVirtualBoxをインストールすると、少し古いバージョン5.0のものがインストールされます。GCPでUbuntu16.04のインスタンスを立て、次のコマンドを実行することで確認できました。

$ sudo apt update; sudo apt upgrade

$ sudo apt install virtualbox
()
Setting up virtualbox (5.0.40-dfsg-0ubuntu1.16.04.2) ...
vboxweb.service is a disabled or a static unit, not starting it.
()

バージョン確認は次のコマンドでもできます。

$ VBoxManage -v

5.0.40_Ubuntur115130

この状態で、kernelのバージョンを4.13以降にあげている場合、VirtualBoxに作成したVMにisoファイルをマウントさせて起動させるとホストOSごとフリーズします。GUI環境でのみこの現象を確認しましたが、CUI環境(例えば、サーバーとして利用している場合や、Vagrantを利用している場合)では確認を行っていません。


解決策 : VirtualBoxのバージョンを5.2以上に上げる

virtualbox crash on kernel 4.13.0-26 - Ask Ubuntuで回答されているように、VirtualBoxのバージョンを上げることで対策可能です。VirtualBox公式に掲載されている手順に従えば、Virtualbox 5.2系がインストールできます。

幾つか不具合報告がなされているため、VirtualBoxをアンインストールしてから実行するほうが良いかもしれません。アンインストールは次のコマンドでできます。

apt autoremove 'virtualbox*'


補足 : Linuxカーネルのバージョンを上げる理由

Ubuntu Japanese Teamの連載するUbuntu Weekly Topicsでは2018年3月2日号 Spectre/Meltdown対策さらにさらにその後・3月初旬編:Ubuntu Weekly Topicで次のように解説されています。


Meltdownは,基本的にKPTIによって対処済みです。詳細は次の通りです。

* カーネルを含めた,他のプロセスのメモリの中身を読み取ることが可能な問題。すでに攻撃コードに転用可能なサンプルが存在しており,攻撃も十分に可能と考えられる。「⁠なんらかの信用できないコードが実行されうる環境」では必ず対策が必要。

* 対策には基本的にカーネルのPTI(KPTI)が必要。KPTIを有効にすることで,ワークロードによっては一定の性能劣化が発生する場合がある。

* UbuntuにはKPTIが実装済みで,デフォルトで有効(1-2月に提供された新しいカーネルへのアップデートが必要)⁠。


このような理由から、Ubuntuをデスクトップ環境で利用している場合、カーネルのアップデートを行ったほうが良いでしょう。

クラウド環境で新規にVMを立てて運用する場合、クラウド事業者側で既にカーネルのバージョンが上げられている場合があります。例えば、2018/03/11現在、GCPでUbuntu 16.04のイメージを利用してインスタンスを作成した場合、カーネルのバージョンは4.13.0になっていました。


Special Thanks

次のツイートにより今回の事象の発生原因と、対策方法を特定できました。

また、検証とその結果についても教えていただきました。ありがとうございました。