【自宅ラボ】vSphere の USB NIC を自動認識させてみる

【自宅ラボ】vSphere の USB NIC を自動認識させてみる


前回導入した "USB Network Native Driver for ESXi" ですが、ドキュメント上にも記載されているとおり、導入のみでは起動時の処理の都合上、仮想スイッチとの紐付けが毎回解除されてしまいます。

対処方法は手順はドキュメントに記載されておりますが、細かな情報無しに読み解く必要がある状況でしたので、設定方法を解説してみます。


前提条件

すでに "USB Network Native Driver for ESXi" の導入が完了している必要があります。

また、 ESXi Shell を操作するため、作業時はコンソールでの ESXi Shell の有効化、または、 SSH サービスの有効化が必要です。

ESXi Shell の有効化については公式ドキュメント Using the ESXi Shell も併せて参照してください。


未設定時の動作

本設定を未設定の場合、 ESXi の起動時に USB NIC の検出が行われず、標準スイッチや分散スイッチからアップリンクポートの紐付けが解除されます。

アップリンク未設定


もちろん都度再紐付けを行うことも出来ますが、起動直後にすぐに環境が利用出来ない状態となるため設定の実施をオススメします。


USB NIC が1つの場合の設定

利用する USB NIC が1つの場合、簡単な手順で紐付け処理が可能です。
ただし、 Flings のページにも記載されているとおり、当該設定の状態で2つ以上の USB NIC を接続して起動すると PSoD が生じるため注意してください。

事前確認

Flingsの手順にはありませんが、設定を行う『vmkusb_nic_fling』モジュールの設定状況を表示してみます。

[root@esx01:~] esxcli system module parameters list -m vmkusb_nic_fling
Name                         Type    Value  Description
---------------------------  ------  -----  -----------
usbBusFullScanOnBootEnabled  int            Enable USB Bus full scan on system boot: 0 No (Default), 1 Yes
usbCdromPassthroughEnabled   int            Enable USB CDROM device for USB passtrough: 0 No (Default), 1 Yes
usbStorageRegisterDelaySecs  int            Delay to register cached USB storage device: Min: 0 second, Max: 600 seconds, Default: 10 seconds
vusb0_mac                    string         Persist vusb0 MAC Address: xx:xx:xx:xx:xx:xx
vusb10_mac                   string         Persist vusb10 MAC Address: xx:xx:xx:xx:xx:xx
vusb11_mac                   string         Persist vusb11 MAC Address: xx:xx:xx:xx:xx:xx
vusb1_mac                    string         Persist vusb1 MAC Address: xx:xx:xx:xx:xx:xx
vusb2_mac                    string         Persist vusb2 MAC Address: xx:xx:xx:xx:xx:xx
vusb3_mac                    string         Persist vusb3 MAC Address: xx:xx:xx:xx:xx:xx
vusb4_mac                    string         Persist vusb4 MAC Address: xx:xx:xx:xx:xx:xx
vusb5_mac                    string         Persist vusb5 MAC Address: xx:xx:xx:xx:xx:xx
vusb6_mac                    string         Persist vusb6 MAC Address: xx:xx:xx:xx:xx:xx
vusb7_mac                    string         Persist vusb7 MAC Address: xx:xx:xx:xx:xx:xx
vusb8_mac                    string         Persist vusb8 MAC Address: xx:xx:xx:xx:xx:xx
vusb9_mac                    string         Persist vusb9 MAC Address: xx:xx:xx:xx:xx:xx

『usbBusFullScanOnBootEnabled』の値を『1』とすることで、 ESXi 起動時に USB Bus のフルスキャンを行うようにすることができます。


設定

以下のコマンドで『usbBusFullScanOnBootEnabled』の値を『1』に設定します。

esxcli system module parameters set -p "usbBusFullScanOnBootEnabled=1" -m vmkusb_nic_fling


確認

改めて『vmkusb_nic_fling』モジュールの設定状況を表示してみます。

[root@esx01:~] esxcli system module parameters list -m vmkusb_nic_fling
Name                         Type    Value  Description
---------------------------  ------  -----  -----------
usbBusFullScanOnBootEnabled  int     1      Enable USB Bus full scan on system boot: 0 No (Default), 1 Yes
usbCdromPassthroughEnabled   int            Enable USB CDROM device for USB passtrough: 0 No (Default), 1 Yes
usbStorageRegisterDelaySecs  int            Delay to register cached USB storage device: Min: 0 second, Max: 600 seconds, Default: 10 seconds
vusb0_mac                    string         Persist vusb0 MAC Address: xx:xx:xx:xx:xx:xx
vusb10_mac                   string         Persist vusb10 MAC Address: xx:xx:xx:xx:xx:xx
vusb11_mac                   string         Persist vusb11 MAC Address: xx:xx:xx:xx:xx:xx
vusb1_mac                    string         Persist vusb1 MAC Address: xx:xx:xx:xx:xx:xx
vusb2_mac                    string         Persist vusb2 MAC Address: xx:xx:xx:xx:xx:xx
vusb3_mac                    string         Persist vusb3 MAC Address: xx:xx:xx:xx:xx:xx
vusb4_mac                    string         Persist vusb4 MAC Address: xx:xx:xx:xx:xx:xx
vusb5_mac                    string         Persist vusb5 MAC Address: xx:xx:xx:xx:xx:xx
vusb6_mac                    string         Persist vusb6 MAC Address: xx:xx:xx:xx:xx:xx
vusb7_mac                    string         Persist vusb7 MAC Address: xx:xx:xx:xx:xx:xx
vusb8_mac                    string         Persist vusb8 MAC Address: xx:xx:xx:xx:xx:xx
vusb9_mac                    string         Persist vusb9 MAC Address: xx:xx:xx:xx:xx:xx

『usbBusFullScanOnBootEnabled』の値を『1』となり、 ESXi 起動時に USB Bus のフルスキャンが行われるようになりました。

これにより ESXi 起動時に USB NIC が認識され、標準スイッチ、分散スイッチの紐付けが正しく保持されることとなります。

また、USB NIC が1つの場合は、 ESXi 上の識別として『vusb0』が割当たります。


USB NIC が2つ以上の場合の設定

前述の通り、 USB NIC を2つ以上接続するホストでは、 『usbBusFullScanOnBootEnabled』を利用した場合に PSoD が発生します。

そのため、下記の手順を実施する必要があります。

  1. vusb と仮想スイッチの紐付け強制化
  2. vsub と USB NIC の紐付け固定化


1. vusb と仮想スイッチの紐付け強制化

ESXi 起動時に実行される『/etc/rc.local.d/local.sh』ファイルに設定を含めることで、 ESXi が USB NIC を認識した後に、仮想スイッチとの紐付けを強制させることが出来ます。

『/etc/rc.local.d/local.sh』ファイルについてはナレッジベース KB 2043564 も参考にしてください。

USB NIC が接続する仮想スイッチの種類(標準スイッチ、分散スイッチ)により内容が異なります。

なお、本設定を実施した場合、 USB NIC が未接続状態、未リンクアップ状態では起動の大幅な遅延が生じうるので、設定後は構成を維持することをオススメします。


標準スイッチの場合

標準スイッチの場合、以下の内容を『/etc/rc.local.d/local.sh』の最終行、『exit 0』よりも前の行に追記を行います。

    vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print $NF}')
    count=0
    while [[ $count -lt 20 && "${vusb0_status}" != "Up" ]]
    do
        sleep 10
        count=$(( $count + 1 ))
        vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print $NF}')
    done

    esxcfg-vswitch -R

なお、複数の USB NIC が標準スイッチを利用している場合、その USB NIC の vusbX を定義した内容を追記していく必要があります。


分散スイッチの場合

分散スイッチの場合は、vusb が使用する仮想スイッチとそのポート番号の紐付けを行います。

定義内容を環境に合わせて修正する必要があるため注意が必要です。

また、 Flings のページに記載されているサンプル定義は vusb0 と vusb1 が分散スイッチを使用している例となるため、組み合わせや数が異なる場合、サンプル定義を参考に修正が必要となります。

サンプルと同じく、2つの USB NIC を紐付ける場合、先頭の4行のみを環境に合わせて修正することで利用可能です。

    VDS_0_NAME=DSwitch0      ※vusb0 が接続する分散スイッチの名前を指定
VDS_0_PORT_ID=28      ※vusb0 が接続する分散スイッチ上のポート番号を指定 VDS_1_NAME=DSwitch1      ※vusb1 が接続する分散スイッチの名前を指定
VDS_1_PORT_ID=12      ※vusb1 が接続する分散スイッチ上のポート番号を指定 vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print "v0:" $NF}') && vusb1_status=$(esxcli network nic get -n vusb1 | grep 'Link Status' | awk '{print "v1:" $NF}') count=0 while [[ $count -lt 40 ]] && [[ "${vusb0_status}" != "v0:Up" || "${vusb1_status}" != "v1:Up" ]] do sleep 5 count=$(( $count + 1 )) vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print "v0:" $NF}') && vusb1_status=$(esxcli network nic get -n vusb1 | grep 'Link Status' | awk '{print "v1:" $NF}') done if [ "${vusb0_status}" = "v0:Up" ]; then esxcfg-vswitch -P vusb0 -V ${VDS_0_PORT_ID} ${VDS_0_NAME} fi if [ "${vusb1_status}" = "v1:Up" ]; then esxcfg-vswitch -P vusb1 -V ${VDS_1_PORT_ID} ${VDS_1_NAME} fi

分散スイッチのポート番号は、vSphere Client にて『ネットワーク』> 対象分散スイッチ > 『ポート』タブ より確認可能です。
紐付けを行う vusb の『ポート ID』を指定します。

分散スイッチ ポート ID


2. vsub と USB NIC の紐付け固定化

ESXi が USB NIC を認識するタイミングの都合等により、 vusb0 と vusb1 が逆転する、といった事象が発生しうるとの情報が Flings に記載されています。

予期せぬトラブルを回避するため、 vusb の認識と USB NIC の MAC アドレスの紐付けを固定化させる設定を行います。


事前確認

前述と同様、設定を行う『vmkusb_nic_fling』モジュールの設定状況を表示してみます。

[root@esx04:~] esxcli system module parameters list -m vmkusb_nic_fling
Name                         Type    Value  Description
---------------------------  ------  -----  -----------
usbBusFullScanOnBootEnabled  int            Enable USB Bus full scan on system boot: 0 No (Default), 1 Yes
usbCdromPassthroughEnabled   int            Enable USB CDROM device for USB passtrough: 0 No (Default), 1 Yes
usbStorageRegisterDelaySecs  int            Delay to register cached USB storage device: Min: 0 second, Max: 600 seconds, Default: 10 seconds
vusb0_mac                    string         Persist vusb0 MAC Address: xx:xx:xx:xx:xx:xx
vusb10_mac                   string         Persist vusb10 MAC Address: xx:xx:xx:xx:xx:xx
vusb11_mac                   string         Persist vusb11 MAC Address: xx:xx:xx:xx:xx:xx
vusb1_mac                    string         Persist vusb1 MAC Address: xx:xx:xx:xx:xx:xx
vusb2_mac                    string         Persist vusb2 MAC Address: xx:xx:xx:xx:xx:xx
vusb3_mac                    string         Persist vusb3 MAC Address: xx:xx:xx:xx:xx:xx
vusb4_mac                    string         Persist vusb4 MAC Address: xx:xx:xx:xx:xx:xx
vusb5_mac                    string         Persist vusb5 MAC Address: xx:xx:xx:xx:xx:xx
vusb6_mac                    string         Persist vusb6 MAC Address: xx:xx:xx:xx:xx:xx
vusb7_mac                    string         Persist vusb7 MAC Address: xx:xx:xx:xx:xx:xx
vusb8_mac                    string         Persist vusb8 MAC Address: xx:xx:xx:xx:xx:xx
vusb9_mac                    string         Persist vusb9 MAC Address: xx:xx:xx:xx:xx:xx

このように、『vusb0_mac』〜『vusb11_mac』 までの12個の vusb と MAC アドレスの紐付けに対応していますが、既定では『Value』は空白であり、紐付けられてはいない状況です。


設定

今回は2つのUSB NICを利用しているため、それぞれ『vusb0_mac』と『vusb1mac』にMACアドレスの紐付けを行います。

MAC アドレスは実際の USB NIC のものに合わせてください。
※例示のため、一部をマスクしています。

esxcli system module parameters set -p "vusb0_mac=00:e0:4c:xx:xx:xx vusb1_mac=00:e0:4c:yy:yy:yy" -m vmkusb_nic_fling


確認

コマンド実行後、改めて設定状況を確認してみます。

[root@esx04:~] esxcli system module parameters list -m vmkusb_nic_fling
Name                         Type    Value              Description
---------------------------  ------  -----------------  -----------
usbBusFullScanOnBootEnabled  int                        Enable USB Bus full scan on system boot: 0 No (Default), 1 Yes
usbCdromPassthroughEnabled   int                        Enable USB CDROM device for USB passtrough: 0 No (Default), 1 Yes
usbStorageRegisterDelaySecs  int                        Delay to register cached USB storage device: Min: 0 second, Max: 600 seconds, Default: 10 seconds
vusb0_mac                    string  00:e0:4c:xx:xx:xx  Persist vusb0 MAC Address: xx:xx:xx:xx:xx:xx
vusb10_mac                   string                     Persist vusb10 MAC Address: xx:xx:xx:xx:xx:xx
vusb11_mac                   string                     Persist vusb11 MAC Address: xx:xx:xx:xx:xx:xx
vusb1_mac                    string  00:e0:4c:yy:yy:yy  Persist vusb1 MAC Address: xx:xx:xx:xx:xx:xx
vusb2_mac                    string                     Persist vusb2 MAC Address: xx:xx:xx:xx:xx:xx
vusb3_mac                    string                     Persist vusb3 MAC Address: xx:xx:xx:xx:xx:xx
vusb4_mac                    string                     Persist vusb4 MAC Address: xx:xx:xx:xx:xx:xx
vusb5_mac                    string                     Persist vusb5 MAC Address: xx:xx:xx:xx:xx:xx
vusb6_mac                    string                     Persist vusb6 MAC Address: xx:xx:xx:xx:xx:xx
vusb7_mac                    string                     Persist vusb7 MAC Address: xx:xx:xx:xx:xx:xx
vusb8_mac                    string                     Persist vusb8 MAC Address: xx:xx:xx:xx:xx:xx
vusb9_mac                    string                     Persist vusb9 MAC Address: xx:xx:xx:xx:xx:xx

『vusb0_mac』と『vusb1mac』のValueにMACアドレスが埋め込まれています。


設定後の動作

ESXi の再起動を行い、意図した仮想スイッチとの紐付けが自動的に行われることを確認します。

仮想スイッチ 自動紐付け


おわりに

今回の設定により、ホストの起動後にラボ環境が使用出来るまでのダウンタイムをほぼ無くすことができました。

また、最大で12個までの USB NIC を扱うことが出来ることも分かり、ラボとしての利用では十分すぎる量に対応していると感じました。

ラボ環境が整いつつありますが、そろそろホストも追加して環境を強固にしていけたらいいなと考えています。

コメント

このブログの人気の投稿

Mac 上の Boot Camp Windows 環境を VMware Fusion へインポートしてみる

Androidデバイスの画面をリアルタイムで投影する方法

【自宅ラボ】VCSA のリストアを実施してみる (vSphere 8)