ストレージ設定では仮想ディスク、CD/DVD・フロッピーディスクのドライブやイメージを操作します。

VirtualBoxでは仮想ストレージコントローラーを仮想マシンに定義し、仮想デバイス(仮想ディスクやCD/DVDイメージなど)をコントローラーに割り当てることで、デバイスを使用できるようにします。

VirtualBoxのストレージ設定の画面

ストレージツリー

新規仮想マシン作成ウィザードで仮想マシンを作成するとSATAコントローラーの下に仮想ディスクが、IDEコントローラーの下にCD/DVDドライブが定義されています。

コントローラーの追加/削除やデバイスの追加/削除は下のボタンで行えます。
デバイスの追加/削除はコントローラーを選択した状態で、右側に表示されるボタンでも行えます。

ストレージコントローラーを追加

ストレージコントローラーを追加します。
追加できるコントローラーは以下になりますが、古いOSを使う場合、SATAやSASのコントローラーに対応していない場合があるので注意が必要です。

また、コントローラーはそれぞれ一つずつしか追加できません。

IDE コントローラー

古くからあるストレージコントローラーで、VirtualBoxがデフォルトで使用するコントローラーです。
ほとんどすべてのOSが対応していますが、3.2からの新機能の非同期I/Oには対応していないため、パフォーマンスはよくありません。

IDEコントローラーには3つのコントローラータイプPIIX3・PIIX4・ICH6がありますが、機能やパフォーマンスに違いあるわけではありません。

他の仮想ソフトウェア(VirtualPCなど)から仮想マシンをインポートする際に、元と異なるタイプのコントローラーを指定すると起動できない場合があるので、その際に設定を変更します。

SCSI コントローラー

SCSIコントローラーもIDEと同様に古くからあるコントローラーで、高いパフォーマンスが求められるワークステーションや、サーバに使用されてきました。
ポート1から15まで、最大15ドライブを接続できます。

VirtualBoxではLsilogicコントローラーとBuslogicコントローラーをサポートしています。

SCSIコントローラーの仕様にはOS側の対応も必要ですが、Windows 2003以降にはLSI Logicコントローラ用のドライバが付属していますが、Windows NT 4.0およびWindows 2000にはBusLogicコントローラ用のドライバが付属しています。

Windows XPにはどちらのドライバも付属していません。

SATA コントローラ

2003年に導入された比較的最近登場したストレージコントローラーで、ポート0から29まで、最大30ドライブを接続できます。
本物のSATAコントローラーと同様に、IDEコントローラーと比べ転送速度が速くCPUリソースの消費も少なくなっています。

このため、選択したゲストOSに応じて、新しく作成された仮想マシンの仮想ハードディスクイメージはデフォルトでSATAを使用します。

ただしVista以前のWindowsOSをゲストとする場合、AHCIドライバが必要になります。
SATAドライバをインストールしてからコントローラの種類を変更することで、インストール後にIDEからSATAに切り替えることができます。

Oracle VM VirtualBoxでは、Intel Matrix Storageドライバを推奨しています。

SAS コントローラー

比較的最近登場したコントローラーです。

ポート0から7まで、最大8ドライブを接続できます。
一部のハイエンドOSが必要とする高速なコントローラーですが、ホストマシン側もSASを使用していないと真価を発揮しないでしょう。

LsiLogic SASのみサポートしています。

SATAと同様に、SASコントローラはサポートしているOSでしか見えません。

特に、Windows Vistaより前のWindowsでは、SASはサポートされていません。 そのため、Windows XPは、SP3であっても、追加のドライバをインストールしない限りディスクを認識しません。

フロッピー コントローラー

I820783のみサポートしています。

デバイス0,1の最大2ドライブを接続できます。

USBコントローラー

すべての主要なOSはUSBをサポートしているため、サードパーティのドライバを不要にする汎用ドライバで動作します。
そのためSATAコントローラをサポートしていないレガシーなOSはUSBの恩恵を受ける可能性があります。

Oracle VM VirtualBoxが提供する仮想USBストレージコントローラは、他のタイプのストレージコントローラとは動作が異なります。

他のストレージコントローラは、複数のディスクが接続されているゲストからは単一のPCIデバイスとして見えますが、USBベースのストレージコントローラは仮想ストレージコントローラとしては見えません。

コントローラに接続されている各ディスクは、ゲストからは専用のUSBデバイスとして認識されます。

注意として、USBを使用して接続されたドライブからの起動は、BIOSがUSBサポートを欠いているためEFIが使用されている場合にのみサポートされます。

NVMeコントローラー

2011年に登場した最近の規格で、SSDで使用されているSATAプロトコルの帯域幅制限を緩和するために、PCI Expressに直接接続することで最大のスループットを達成するのが非常に簡単で、ATAやSCSIとは互換性がありません。

NVMeを使用するには仮想マシンのOS側でNVMeデバイスをサポートする必要があります。 たとえば、Windows 8.1ではネイティブのNVMeサポートが追加され、Windows 7ではネイティブサポートがアップデートで追加されています。

NVMeコントローラは拡張パックの一部です。

ただしNVMeを使用して接続されたドライブからの起動は、BIOSが適切なドライバを欠いているためEFIが使用されている場合にのみサポートされます。

どのコントローラーが最適なのか

このようにストレージコントローラが豊富に選択されているため、どのコントローラを選択すべきかわからない場合がありますが、IDEがゲストによってサポートされている唯一のコントローラでない限り、IDEは避けるべきです。

SATA、SCSI、SASはどちらを使用しても、大きな違いはありません。

デバイスの追加

選択したコントローラーにデバイスを割り当てます。

デバイスの除去

選択したデバイスをコントローラーから除去します。

ホストのI/Oキャッシュを使う

ホストOSのファイルキャッシュを利用して、ゲストOSのディスクI/Oパフォーマンスを著しく向上させます。
ホストOSがファイルとして扱っている、仮想ディスクのイメージファイルなどに有効です。

いわゆる非同期I/Oという以下の仕組みでパフォーマンスを向上させます。

  1. ゲストマシンの書き込みをホストOSのキャッシュメモリに書き出す
  2. ゲストマシンにはこの時点で書き込みを完了したと返答する
  3. ホストOSはキャッシュメモリにあるデータをハードディスクに書き出す

ゲストOSは高速なキャッシュメモリとI/Oのやり取りをすることで、劇的なパフォーマンス向上をすることができます。

ただし、

  • キャッシュから実際のファイルへの書き込みが非同期となるため、電源障害やホストのクラッシュ等でゲストOSのデータが消失する可能性がある
  • イメージファイルは巨大な為、一度に複数の仮想マシンを立ち上げるとホストOSのキャッシュを使い果たしパフォーマンスに影響を及ぼす可能性がある
  • ゲストOS・ホストOSの両方で同様のI/Oキャッシュが保存される
    このときの2重キャッシュは性能向上にはほとんど影響しません
  • writeに対してreadはそれほどのパフォーマンス向上は望めない

などのデメリットも存在します。
電源断時にデータロスしても構わない&ホストOS側のメモリが潤沢な場合に使うと良いかもしれません。

デバイスの属性

IDEデバイス

IDEコントローラーのスロットには以下の4つがあります。

  • IDE プライマリマスター
  • IDE プライマリスレーブ
  • IDE セカンダリマスター
  • IDE セカンダリスレーブ

接続するデバイスは仮想メディアマネージャーをから選択します。

CD/DVDドライブやフロッピーの場合、ホストマシンのドライブを選択する事も可能です。

仮想ハードディスクの場合「Solid-state drive」のオプションがありますが、ここにチェックを入れるとゲストマシンが仮想ハードディスクをSSDとみなします。
ゲストOSがSSDをサポートしていると(Windows7など)パフォーマンスが向上します。

CD/DVDドライブの場合「Live CD/DVD」のオプションがありますが、チェックをしておくとマシンからイジェクトしない限り、仮想メディアマネージャから仮想CD/DVDを「除去」できなくなります。

以下、他のデバイスの設定項目はIDEとほぼ同じです。

SATAデバイス
SCSIデバイス
SASデバイス
フロッピーデバイス