Proxmox 4.0 で USB デバイスのパススルーを試してみます。ESXiでもESXiホストにつながっていたUSB機器を仮想マシン側に接続することが出来ました。これが Proxmox でも出来るよねという実験です。今回は Windows ゲストで試してみます。
早速 WebUI から・・・と思ったのですが、どうやら現時点においては WebUI からの設定は出来なさそうです。Proxmoxのコンソール(シェル)で作業することが必要のようです。
まずは VM ID を調べておきます。ここでは 101 が USB 接続先となる VM の ID です。ここからは全て Proxmox に SSH でログインして作業しました。がんばれるなら ProxmoxのWebUIでのシェルもありかもしれません。
ログインして 以下のコマンドを実行します。
# qm monitor 101 Entering Qemu Monitor for VM 101 - type 'help' for help qm> info usbhost Bus 1, Addr 7, Port 5.1.4, Speed 1.5 Mb/s Class 00: USB device 15d9:0a4d, USB OPTICAL MOUSE Bus 1, Addr 6, Port 5.1.1, Speed 1.5 Mb/s Class 00: USB device 0dc6:9813, SCISSORS Keyboard Bus 1, Addr 3, Port 3, Speed 480 Mb/s Class 00: USB device 058f:6387, Mass Storage Bus 1, Addr 2, Port 1, Speed 480 Mb/s Class 00: USB device 0789:0169, 802.11 n WLAN
以上のような感じで情報が出てきました。これは proxmox 側が認識している USB 機器の情報です。ここで必要になる情報は繋げたいUSB機器の Bus 番号と Port 番号です。今回は USB メモリと USB WiFi ドングルを仮想マシンに接続してみようと思います。
USBメモリを接続する
今の環境で USB メモリの Bus番号: 1, Port番号: 3 ということが既にわかっています。この情報を設定ファイルに記述することになります。以前の記事で設定ファイルの所在は判明していますので、 /etc/pve/qemu-server/101.conf を開きます。
設定ファイルは今のところ以下のような感じになっていました。
bootdisk: virtio0 cores: 2 ide2: local:iso/virtio-win-0.1-100.iso,media=cdrom,size=68314K memory: 2048 name: HelloProxmox2 net0: virtio=EA:2C:D4:F9:F6:C3,bridge=vmbr0 numa: 0 ostype: win7 smbios1: uuid=36dcad71-8bbc-4a0a-9f35-3af035c32d7c sockets: 1 vga: qxl virtio0: local:101/vm-101-disk-1.qcow2,cache=writeback,size=64G
この設定の末尾に情報を追加します。書式は “usb0: host=(バス番号)-(ポート番号)” です。そのため今回は以下のようになります。
usb0: host=1-3
これで仮想マシンを再起動すれば、以下のような感じでデバイスドライバがインストールされ認識されます。
他にも以下のような方法で簡単に動的に追加できる(ハズ)なのですが、USBメモリのデバイスドライバインストール過程で失敗してしまい正常に動作しませんでした。いつかはこれで出来るようになるのかもしれません。
qm> device_add usb-host,hostbus=1,hostport=3
追記
Proxmox の WebUI で、 Monitor というタブがあります。実はここが qm> に相当する部分だったようで、これらのコマンド類はここから設定できるようです。動的に接続したいケースならこれで対応可能な感じです。
補足
これらは USB 2.0 ポートに接続した状態で作業しました。USB 3.0 へのサポートは Windows 8以降らしいので、これからは Windows8 以降を入れてみることにします。
USBメモリを接続する (USB 3.0 ポート)
以下のようなコマンドで操作します。今回必要になるのはデバイスのVendorID, ProductID となりますが、 lsusb コマンドで事前に調べておく必要がある点は変わりません。
device_add nec-usb-xhci,id=xhci,addr=0x5 device_add usb-host,bus=xhci.0,vendorid=0x13fe,productid=0x5500
さっきまでのIDと違うのは別の USB 3.0 のメモリに変えたためです。これを実行すると Windows 8.1 上では以下のようにデバイスが認識されました。ただ2つ見えていて一方が!マークが付いているのが気になりますが、ファイルの中身は確認することが出来ました。
なお、最初の1行は固定でこのようになっているとのことです(現時点では)。
USB WiFiドングルを試す
USB WiFi ドングルを仮想マシンゲストの Windows8.1 に接続してみます。
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/7p, 480M |__ Port 5: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 12, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 3: Dev 15, If 0, Class=Vendor Specific Class, Driver=rt2800usb, 480M |__ Port 4: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
WiFiドングルも同様に接続状態を見て以下のようにして、ゲストに接続してみました
device_add usb-host,hostbus=1,hostport=5.1.3
しかしながらドライバのインストールなどは進むものの、以下のような感じになってしまい使用することができませんでした。
これを Windows7 のゲスト環境へつないでみましたがやはりダメでした。可否はデバイスによるのかもしれません。