Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Hyper-V仮想マシンへのUSBデバイスパススルー(リダイレクト)完全ガイド

Hyper-Vには、他のハイパーバイザー(VMware ESXiやProxmoxなど)と比べた大きな弱点があります。それは、ホストから仮想マシンへのUSBデバイスのリダイレクト機能が標準で十分に備わっていないことです。Hyper-V 2012 R2以降、USBパススルー関連の機能改善は進められてきましたが、依然として競合製品には及びません。本記事では、Hyper-VにおけるUSBリダイレクトの仕組みと具体的な設定方法を詳しく解説します。

Hyper-V USBパススルーの概要

USBパススルーとは、ハイパーバイザーのホスト(またはネットワーク経由で別のサーバーやデバイス)に接続されたUSBデバイスを、仮想マシンへリダイレクトする機能のことです。この機能を使えば、USBメモリ、認証トークン、USBドングル、モデムなど、物理ホストのUSBポートに接続されたさまざまなデバイスを仮想マシンから利用できるようになります。

しかし残念ながら、Hyper-Vはフル機能のUSBパススルーをサポートしていません。物理ホストに接続された任意のUSBデバイスを自由に仮想マシンへ渡すことはできません(この点でVMwareは優れており、ESXiでは柔軟なUSBパススルーが可能です)。Hyper-Vには外部USBデバイスを利用するための組み込み手段がいくつか存在しますが、いずれも大きな制約を伴います。

現在、Hyper-V仮想マシンへUSBデバイスをリダイレクトする主な方法は以下の4つです。

  • Hyper-Vホストに接続したUSBドライブを仮想マシンに直接割り当てる
  • Hyper-Vコンソールの「拡張セッションモード」を利用する
  • RDPセッション経由でUSBデバイスをリダイレクトする
  • ネットワーク経由でUSBを転送するソフトウェア/ハードウェアソリューション(USB over IP)を使う

最後の方法では、サードパーティ製のUSB over IPソリューションが必要になります。具体的には、ネットワークUSBハブや、TCP/IPネットワーク越しに別のサーバーのUSBデバイスを転送するソフトウェアなどが該当します。商用製品の多くは有料です(AnywhereUSB、DigiUSBなど)。無料で使えるものとしては、1つのUSBドングルと1台のターゲットサーバーまで無償のVirtualHere USBや、やや古いオープンソースプロジェクトであるusbip.sourceforge.net(サーバー側はLinux、クライアントはWindowsに導入可能)があります。

Hyper-V仮想マシンからUSBハードディスクへアクセスする方法

ホストに接続されたUSBハードディスクであれば、稼働中のHyper-V仮想マシンに比較的簡単に直接割り当てることができます。ここでは、仮想マシンからホストのUSBドライブへ直接アクセスさせる手順を紹介します。

注意:
  1. この手順は、システムが固定ディスク(Fixed Disk)として認識するUSBドライブ限定です。USBフラッシュメモリやスマートカードなどのリムーバブルデバイスは、この方法では仮想マシンに割り当てられません(Windowsにリムーバブルデバイスを固定ディスクとして認識させるテクニックは存在します)。
  2. この方法で割り当てたディスクに対しては、スナップショット/チェックポイントを作成できません。

設定手順

  1. USBドライブをHyper-Vホストに接続する
    Hyper-Vロールが有効なWindowsホストでも、Microsoft Hyper-V Server(無償版)でも構いません。ドライブがシステムに認識され、ドライブ文字が自動的に割り当てられます(割り当てられない場合はディスクの管理で確認してください)。

  2. ディスクをオフラインにする
    「ディスクの管理」(diskmgmt.msc)を開き、対象のUSBドライブ(例:20GBのUSBドライブ=ディスク1)を右クリックして[オフライン]を選択します。
    Windows Server CoreやHyper-V ServerなどGUIスナップインが一部使えない環境では、PowerShellのStorageモジュールで代用できます。以下のコマンドで、ホスト上の物理ディスクを一覧表示し、指定ディスクをオフライン化できます。

    Get-Disk
    Get-Disk -Number 1 | Set-Disk -IsOffline:$true
  3. 仮想マシンに物理ディスクとして追加する
    Hyper-Vマネージャーを開き、USBドライブを接続したい仮想マシンの設定画面を表示します。[SCSI コントローラー]セクションで新しいドライブを追加し、種類を[物理ハード ディスク]にします。ドロップダウンメニューから対象のUSBドライブを選択してください(表示例:ディスク 1 20.00 GB バス 0 Lun 0 ターゲット 1)。
    補足: SCSIデバイスはホットアド/ホットリムーブに対応しているため、仮想マシンをシャットダウンせずに追加できます。

  4. ゲストOS側でディスクをオンライン化する
    仮想マシンのコンソールを開くか、RDPで接続してゲストOS(Windows)にログインします。「ディスクの管理」を起動すると、新しいディスクが認識されているはずです。オフライン状態なら右クリックして[オンライン]にします。初期状態ではドライブ文字が割り当てられていないため、パーティションを右クリックして[ドライブ文字とパスの変更]から、空いているドライブ文字またはマウントポイントを指定してください。

以上で完了です。外部USBストレージがHyper-V仮想マシンに直接接続され、通常のディスクとして利用できるようになります。

重要: データ損失を防ぐため、USBポートから物理的に取り外す前に、仮想マシン内のどのアプリケーションもそのディスクにアクセスしていないことを必ず確認してください。

安全に取り外すには、Hyper-Vマネージャーで仮想マシンの設定画面を開き、[SCSI コントローラー]セクションから該当のハードドライブを選択して[削除]をクリックし、設定を保存します。その後であれば、ホストのUSBポートから物理的に取り外しても問題ありません。

拡張セッションモードでUSBデバイスを仮想マシンにリダイレクトする

Windows Server 2012 R2 / Windows 8.1世代以降のHyper-Vでは、拡張セッションモード(Enhanced Session Mode / ESM)を使うことで、クライアントPCに接続された任意のUSBデバイスを仮想マシンへ転送できます。接続にはHyper-Vマネージャーのvmconnect.exe(仮想マシン接続ツール)を使用し、仮想マシンのコンソールに接続しながらリダイレクトするUSBデバイスを選択します。

事前準備:拡張セッションモードの有効化

まず、Hyper-Vホスト側で拡張セッションモードを有効にします。PowerShellなら次のコマンド一発です。

Set-VMHost -EnableEnhancedSessionMode $true

GUIで設定する場合は、Hyper-Vマネージャーの[Hyper-V の設定]→[拡張セッション モード]ポリシーから有効化できます。

設定後、Hyper-V仮想マシン管理サービスを再起動しておきましょう。

Get-Service vmms | Restart-Service

さらに、仮想マシン設定の[統合サービス]セクションで[ゲスト サービス]を有効にしておく必要があります。

USBデバイスのリダイレクト手順

  1. Hyper-Vマネージャーで仮想マシンを選択し、[接続]ボタンをクリックします。あるいはvmconnect.exeを直接実行し、Hyper-Vサーバー名と仮想マシン名を指定しても構いません。vmconnectはコマンドラインオプションをサポートしているため、用途に応じたbatファイルを作ってユーザーに配布することも可能です。
  2. 仮想マシンが拡張セッションモードに対応していれば、RDP接続のプロパティに似た画面が表示されます。[オプションの表示][ローカル リソース][ローカル デバイスとリソース][詳細]の順にクリックします。
  3. 仮想マシンへリダイレクトしたいUSBデバイスにチェックを入れます。目的のデバイスがまだ接続されていない場合は、[その他のサポートされているプラグ アンド プレイ (PnP) デバイス][後で接続するデバイス]のオプションを選択しておきましょう。

これで、クライアントPCに接続されたUSBデバイスが、Hyper-V仮想マシンのコンソールセッション内で自動的に利用可能になります。

拡張セッションモードの特徴と制限

  • ゲストOSはWindowsのみ対応(Windows 8.1 / Windows Server 2012 R2以降)
  • 仮想マシンへの直接のネットワークアクセスは不要。すべての通信はHyper-Vホスト経由で行われ(クライアントからTCPポート2179でホストに接続)、ホストはVMBusを介して仮想マシンと通信する
  • クライアントPCにHyper-Vマネージャー(vmconnect.exe)がインストールされている必要がある

なお、この方式はRDPセッション経由でローカルホストのUSBデバイスをリダイレクトする仕組みとほぼ同じです。RDPによるリダイレクトの詳細については、ここでは割愛します。

補足として、ネットワーク経由でUSBデバイスをリダイレクトしている場合(USB over IPやRDPセッション経由)、仮想マシンを別ホストへライブマイグレーション(Hyper-V Live Migration / vMotion相当)させた後でも、USBキーへのアクセスは継続できるというメリットがあります。

  1. 【Hyper-V 2019入門】PowerShellを使って仮想マシンを作成する手順をわかりやすく解説

    仮想マシンの作成方法には、GUI(グラフィカルユーザーインターフェース)を使用する方法と、PowerShellを使用する方法の2つがあります。これまでの記事でも触れたように、両方の選択肢がある場合、多くのIT管理者は直感的に操作できるGUIを選びがちです。しかし、PowerShellを使いこなせるようになると、作業の自動化や一括管理が可能になり、業務効率は格段に向上します。本記事では、Hyper-V 2019環境においてPowerShellで仮想マシンを作成する具体的な手順を解説します。なお、PowerShellはWindowsクライアントおよびWindows Serverの各OSに標準搭載さ

  2. Hyper-V 2019で仮想マシンをエクスポート・インポートする完全ガイド

    2019年8月に、Hyper-V 2019のインストールから仮想マシンの構築・展開までを解説する全4回のシリーズ記事を公開しました。まだお読みでない方は、以下のリンクからご確認いただけます。Part 1:Hyper-V 2019 Server Coreのインストール方法Part 2:Hyper-V 2019 Core Serverの初期設定Part 3:Hyper-V 2019 Coreのリモート管理Part 4:Hyper-V 2019で最初の仮想マシンを作成する本記事の概要本記事では、あるHyper-V 2019サーバーから別のHyper-V 2019サーバーへ仮想マシンを移行するための「