PCとNASをTwinaxケーブルで直接接続した状態でPCをスリープ後に復帰させるとNASに接続できない問題への対処

Windowschat_bubble0

現在、Windows 10のPCとQNAPのNAS(TS-473)をTwinaxケーブルで直接接続した状態で運用しています。今のところ10GbEはメインのPCからNASにアクセスする際に使用できればそれで良いという考えで、他のデバイスとNASは1GbEで通信出来るようにしています。
SFP+のアダプターとしてはPCもNASもMellanoxのMCX311A-XCATを使用しています。

IPアドレスの設定を済ませればそれでPCとNASが10GbEで繋がるようになるのですが、PCのスリープ復帰後にPCからNASに10GbEで接続できないという問題が発生しました。
(MCX311A-XCATを使用しない1GbEの経路でのみNASに接続できる状態になった)
このようなスリープ復帰に関連する症状の対処法としてまず最初に思い浮かぶのは、デバイスマネージャーから該当デバイスのプロパティ中の[電源の管理]タブの設定を変更するという方法です。スリープ復帰後にWi-Fiや有線LANで接続できない場合の対処法として有名な方法です。
しかしながら、Mellanox ConnectX-3 Ethernet Adapter (MCX311A-XCAT) にはそのタブがありませんでした。なのでとりあえずデバイスを一旦無効にしてから有効化したところ問題が解消したので、今回はその作業を自動化するという対処法を取ることにしました。

デバイスインスタンスパス (デバイスインスタンスID) の確認

デバイスマネージャーから該当デバイスのプロパティを開き、[詳細]タブからデバイスインスタンスIDをコピーします。

バッチファイルの作成

今回は以下のようなバッチファイルを使用することにしました。

@echo off

set instanceId=MLX4\CONNECTX-3_ETH\5^&13654A64^&0^&01

powershell -Command "Disable-PnpDevice -InstanceId '%instanceId%' -Confirm:$false"
powershell -Command "Enable-PnpDevice -InstanceId '%instanceId%' -Confirm:$false"

instanceIdは先程コピーしたIDです。IDは人によって変わると思うので、自分の環境で確認したIDを使用してください。&のエスケープも忘れずに行ってください。

Disable-PnpDevice と Enable-PnpDevice は指定のデバイスを無効/有効に出来るPowerShellのコマンドです。どちらも実行には管理者権限が必要です。実行すると通常は確認のプロンプトがありますが、-Confirm:$false で確認をスキップ出来ます。

これで有効化で何かしらの問題が発生する場合、無効後にtimeoutで数秒待機してから有効化すると良いかもしれません。私の環境では無効後に即有効化でも特に問題は発生しなかったのでtimeoutは入れていません。

タスクスケジューラに登録してスリープ復帰時に実行されるようにする

タスクスケジューラでスリープ復帰時に何かを実行させたい場合は「ログ:システム」「ソース:Power-Troubleshooter」「イベントID:1」をトリガーにすれば良いようです。
以下の記事を参考させていただきました。

実行するプログラムは先程作成したバッチファイルです。
Disable-PnpDevice と Enable-PnpDevice は管理者権限で実行する必要があるので、タスクのプロパティの[全般]タブにある [最上位の特権で実行する] にチェックを入れておきます。
これで、スリープ復帰時に実行されるようになると思います。

備考

とりあえずこれでPC側の問題は解消出来たと思います。
実はNAS側でも問題が発生していて、PCをスリープしたりシャットダウンしたりするとQuLogのイベントログに以下のような警告が出るんですよね。

[Network & Virtual Switch] Interface "Adapter 5" disconnected.

Adapter 5というのはNASがMCX311A-XCATのSFP+ポートに割り当てたIDです。
PCとNASの間に10GbE対応のスイッチを導入すれば解決出来そうな問題なのですが、今のところメインのPCとNAS間以外では10GbEを必要としていないので悩みどころ。

PCとNAS間の10GbE化はつい先日やったばかりですが、そちらはアダプター等を用意してIPアドレスを設定するだけだったので記事にしていません。
一応10GbE化に当たって購入したものをこの記事に載せておきます。

MCX311A-XCATはAliExpressで CTvbs Network Communication Store というところからPC用とNAS用の2つを購入しました。自分が購入したときはセールで4609円でした。

TS-473で使用するにはロープロファイルのブラケットが必要だったのでそれも購入。MCX311A-XCATは2つ購入したので、念のため2個セットの物を購入しました。

TwinaxケーブルはFLYPROFiberの物を購入しました。

藤乃音りょう