VirtualBoxを利用する全てのユーザー(初心者から開発者まで)は、VirtualBoxの仮想マシン(VM)でUSBデバイスにアクセスするさまざまなシナリオに直面します。特に、ホストコンピューターに接続されたUSBデバイスにアクセスする場合が重要です。
VirtualBoxユーザー(vboxusers)は、仮想マシン内でUSBパススルーを成功させ、Ethernet(またはその他のネットワーク接続)を介してUSBハードウェアデバイスにアクセスするにはどうすればよいのでしょうか?
以下でその答えを解説します…
この記事では、Ubuntu Linuxを使用したVirtualBoxゲストマシンで、Windowsオペレーティングシステムを実行するホストマシンにSDカードを接続し、Ethernet(またはその他のネットワーク接続)を通じてハードウェアアクセスを有効にするためのステップバイステップの手順を紹介します。
以下の手順を実行する前に、USBパススルーに関与するすべてのマシンのドライバが最新であることを確認してください。
プラットフォーム、ツール、OS(VboxManage、Ubuntu、XP、VirtualBox Extension Packsなど)にかかわらず、ドライバが最新または使用しているVirtualBox Extension Packと互換性があることが、USBパススルー成功の鍵です。
ステップ1-1: コマンドプロンプトを管理者として開く
Windowsオペレーティングシステム(例: XP Pro)を使用している場合、コマンドプロンプトまたはWindows PowerShellを管理者権限で開きます。
(例: “Windows”キー + “x” を押し、メニューから “コマンドプロンプト (管理者)” を選択)
ステップ1-2: wmic コマンドを使用してディスクドライブをリスト表示
PCにSDカードを挿入する前に、以下のコマンドを実行します。Linuxでは、lsusb コマンドを使用してUSBバスなどの詳細情報を確認できます。
wmic diskdrive list brief
出力例:
キャプション | デバイスID | モデル | パーティション数 | サイズ |
SAMSUNG MZFLV256HCHP-000MV | \\.\PHYSICALDRIVE0 | SAMSUNG MZFLV256HCHP-000MV | 3 | 256052966400 |
ステップ1-3: SDカードを挿入して再度コマンドを実行
SDカードをマシンに挿入後、再度同じコマンドを実行します。Linuxの場合はlsusbを使用してUSBデバイス情報を確認します。
新しい行が追加され、SDカードのDeviceIDが表示されます:
例: \\.\PHYSICALDRIVE1
キャプション | デバイスID | モデル | パーティション数 | サイズ |
Generic- USB3.0 CRW -SD USB Device | \\.\PHYSICALDRIVE1 | Generic- USB3.0 CRW -SD USB Device | 2 | 31914086400 |
SAMSUNG MZFLV256HCHP-000MV | \\.\PHYSICALDRIVE0 | SAMSUNG MZFLV256HCHP-000MV | 3 | 256052966400 |
注意: 3.0 USBデバイスを使用しているのか、2.0 (EHCI: Enhanced Host Controller Interface)USBデバイスを使用しているのかを確認してください。
ステップ2-1: フォルダをVirtualBoxのインストールフォルダに移動する
以下の例では、インストールフォルダは次のようになります: C:\Program Files\Oracle\VirtualBox\
cd "C:\Program Files\Oracle\VirtualBox\"
ステップ2-2: VBoxManage.exe を使用してVMDKファイルを作成
VBoxManage.exeを用いてSDカードのVMDKファイルを作成します。このコマンドの最後の引数として、SDカードのDeviceIDを指定します。(ステップ1-1から1-3を参照)
.\VBoxManage.exe internalcommands createrawvmdk -filename C:\sdcard.vmdk -rawdisk
\\.\PHYSICALDRIVE1
出力例:
sdcard.vmdk がCドライブのルートフォルダ内に作成されます。
RAW host disk access VMDK file C:\sdcard.vmdk created successfully.
ステップ 3-1: 管理者としてVirtualBox GUIを起動します
ステップ 3-2: VirtualBox GUI内で次のパスに移動します:「設定 > ストレージ」
ステップ 3-3:「コントローラー: SATA」をクリックします。
ステップ 3-4:「ホスト I/O キャッシュを使用する」横のチェックボックスをオンにします。
ステップ 3-5:「ハードディスクを追加」アイコンをクリックします(以下の図解を参照)。
ステップ 3-6:「既存のディスクを選択」を選びます。
ステップ 3-7: Cドライブに移動し、ステップ2で作成した「sdcard.vmdk」ファイルを選択します。
仮想マシンを起動し、確認を行います。この例では、32GBのSDカードにRaspbian OSイメージが含まれている場合、「/dev/sdb」と表示されます。
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 29.8 GiB, 32010928128 bytes, 62521344 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb1d773dc
デバイス | ブート 開始 | 終了 | セクター | サイズ | ID | タイプ |
/dev/sdb1 | 8192 | 96453 | 88262 | 43.1M | c | W95 FAT32 (LBA) |
/dev/sdb2 | 98304 | 31116287 | 31017984 | 14.8G | 83 | Linux |
SDカードを使用中に、多くのエラーが発生する場合があります。以下は、VirtualBoxのSDカードパススルーに関するトラブルシューティングのオプションです。
トラブルシューティングオプション 1:
エラー: 「I/Oキャッシュがmedium 'ahci-0-1'内のデータを更新中にエラーが発生しました (rc=VERR_ACCESS_DENIED)」
このエラーが発生した場合、手順2に戻り、**「ホストI/Oキャッシュを使用」**チェックボックスが選択されていることを確認してください。
トラブルシューティングオプション 2:
エラー: 「メディアレジストリに保存された値と一致しない媒体のUUIDです。」
VirtualBoxのインストールフォルダ内で、以下のコマンドを実行してください:
.\VBoxManage.exe list hdds
これにより、エラーメッセージの詳細にあるUUIDを特定できます。
例:
UUID: 5b951504-358d-4a6e-bb8f-61be3ec32367
Parent UUID: base
State: inaccessible
Type: normal (base)
Location: C:\Users\max\Desktop\sdcard.vmdk
Storage format: VMDK
Capacity: 0 MBytes
Encryption: disabled
次に、以下のコマンドを使用してディスクを削除します(UUIDを指定してください):
.\VBoxManage.exe closemedium disk 5b951504-358d-4a6e-bb8f-61be3ec32367