name: ib-switch
description: "Mellanox SX6036 InfiniBand スイッチのシリアルコンソール操作。ステータス確認、show コマンド、IB 設定、FW 管理を行う。"
argument-hint: " [args]"
IB Switch スキル
Mellanox SX6036 InfiniBand スイッチを USB シリアルコンソールまたは SSH 経由で操作する。
概要
| 項目 | 値 |
|---|---|
| モデル | MSX6036F-1SFS (36ポート FDR InfiniBand) |
| ホスト名 | switch-d2b2e2 |
| MLNX-OS | 3.6.8012 (最終版, 2019-02-22) |
| シリアル接続先 | 4号機 (10.10.10.204) /dev/ttyUSB0 |
| シリアル設定 | 9600/8N1, フロー制御なし |
| 認証 | admin / admin |
| 管理 IP | 10.10.10.100/24 (mgmt0, ラボから到達可) |
| SSH | port 22, 要レガシー鍵交換 (下記参照) |
| 内蔵 SM | active (OpenSM4.8.1) |
接続構成: Claude Code → SSH → server 4 → USB serial → SX6036
設定値の読み取り
YQ="${PROJECT_DIR}/bin/yq"
CONFIG="config/switch-sx6036.yml"
SERIAL_HOST=$("$YQ" '.serial_host' "$CONFIG")
SERIAL_HOST_USER=$("$YQ" '.serial_host_user' "$CONFIG")
MGMT_IP=$("$YQ" '.mgmt_ip' "$CONFIG")
スクリプトの転送
セッション開始時に 1 回、スクリプトを server 4 に転送する:
scp ./scripts/sx6036-console.py root@$SERIAL_HOST:/tmp/
pyserial が未インストールの場合:
ssh root@$SERIAL_HOST 'pip3 install pyserial'
サブコマンド
status — 基本ステータス表示
version, fan, temperature, power, protocols をまとめて表示。
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py status'
show — 任意の show コマンド
show サブコマンドは内部で "show " + arg を組み立てるため、引数に show を含めないこと:
# OK: 引数に show を含めない
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py show version'
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py show interfaces brief'
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py show inventory'
# NG: 引数に show を含めると二重になる
# python3 /tmp/sx6036-console.py show "show interfaces ib status 1" → "show show interfaces ..."
ports — IB ポート状態サマリ
36 ポート (IB1/1 〜 IB1/36) の状態を表示。
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py ports'
enable-cmd — enable モードでコマンド実行
operator mode では使えない show running-config, show ib 等を実行。
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py enable-cmd show running-config'
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py enable-cmd show ib sm'
configure — 設定変更
ファイルからコマンドを読み込み、enable → configure terminal で実行。
ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py configure /tmp/ib-config.txt'
設定変更時は oplog で記録する:
./oplog.sh ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py configure /tmp/ib-config.txt'
SSH アクセス
mgmt0 (10.10.10.100) 経由で SSH 接続可能。レガシー鍵交換アルゴリズムが必要。
sshpass -p admin ssh -o StrictHostKeyChecking=no -o KexAlgorithms=diffie-hellman-group14-sha1 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa admin@10.10.10.100 'show version'
- SSH サーバ: mpSSH_0.2.1
- リブート直後は認証が一時的に失敗することがある(システム初期化中)
sx6036-console.pyで扱えない長時間操作(FW fetch/install 等)はシリアルコンソール手動操作を推奨
SM 管理
現在の状態: 内蔵 SM active (server 4 の opensm は disabled)
SM 診断コマンド (enable モード)
show ib smnode switch-d2b2e2 sm-running # SM プロセス実行状態 (active/not active)
show ib smnode switch-d2b2e2 sm-state # SM 設定状態 (enable/disable)
show ib smnode switch-d2b2e2 sm-licensed # ライセンス状態
show ib sm version # SM バージョン (OpenSM4.8.1)
show ib sm routing-info # ルーティングエンジン (minhop)
SM 有効化
configure terminal
ib sm
ib smnode switch-d2b2e2 enable
exit
write memory
SM 設定には2層構造がある:
ib sm— グローバルな SM 有効/無効スイッチib smnode <hostname> enable/disable— ノード単位の SM 有効/無効
SM 無効化 (opensm に切替)
configure terminal
no ib sm
ib smnode switch-d2b2e2 disable
exit
write memory
切替後に server 4 で opensm を起動: systemctl enable --now opensm
FW 管理
イメージ確認
show images
2パーティション構成。現在両方とも 3.6.8012。
FW イメージの取得
server 4 で HTTP サーバを起動し、スイッチからフェッチする:
# server 4 側
ssh root@$SERIAL_HOST 'cd /tmp && python3 -m http.server 8080'
# スイッチ側 (シリアルコンソール)
image fetch http://10.10.10.204:8080/image-PPC_M460EX-3.6.8012.img
- 所要時間: ~5分 (358MB)
- FW イメージ URL:
https://content.mellanox.com/Software/image-PPC_M460EX-3.6.8012.img - MD5:
e2114b923351bf4d499c7200392afecb
FW インストール
image install <file> # 次のブートパーティションに自動インストール
image install <file> location <N> # 指定パーティション (1 or 2) にインストール
partitionキーワードは不可。必ずlocationを使う- 4ステージ: Verify → Uncompress → Create Filesystems → Extract
- 所要時間: ~15分
ブートパーティション切替・リブート
image boot next
write memory
reload
- リブート所要時間: ~8分
- 設定保存は
write memory(configuration writeは MLNX-OS 3.6 では不可)
MLNX-OS CLI モード階層
operator (>) → enable (#) → configure terminal ((config) #)
enable configure terminal
← disable ← exit
- operator mode (
>): show コマンドの一部のみ (version, fan, interfaces brief 等) - enable mode (
#): show running-config, show ib, show interfaces mgmt0, SM 設定の表示 - configure mode (
(config) #): 設定変更 (SM 有効化, IP 変更等)
oplog
- show コマンド: oplog 不要(読み取りのみ)
- 設定変更 (enable-cmd, configure): oplog で記録する
./oplog.sh ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py enable-cmd <cmd>'
./oplog.sh ssh root@$SERIAL_HOST 'python3 /tmp/sx6036-console.py configure /tmp/config.txt'
注意事項
- シリアルポート排他: 同時に 1 セッションのみ接続可能。別のプロセスがシリアルポートを使用中だとエラーになる
- pyserial 必須: server 4 に
pyserialパッケージが必要。OS 再インストールで消失するため、接続失敗時はpip3 install pyserialを再実行 - OS 再インストール後の再セットアップ: pyserial の再インストールに加え、
sx6036-console.pyの再転送 (scp ./scripts/sx6036-console.py root@$SERIAL_HOST:/tmp/) が必要。初回実行時のエラーを2>/dev/nullで抑制しないこと(ファイル不在の検出が遅れる) - 低速通信: 9600 baud (~960 bytes/sec)。36 ポート表示で 5-10 秒かかる。タイムアウトはデフォルト 30 秒
- enable パスワード: 不要(パスワードプロンプトなしで enable モードに入れる)
- pve-lock: 不要(IB スイッチは PVE クラスタとは独立)
- DTR トグルでコンソール復帰: リブート後や長時間放置後にシリアルコンソールが無応答になった場合、pyserial で
ser.dtr = False→ser.dtr = Trueでリセットする。手動の場合はscreenを一度切断 (Ctrl+A, K) して再接続 - 限定シェル
CLI >: リブート直後にCLI >プロンプトになることがある。enableも使えない。exit→ 再ログインで正常なフルプロンプトに復帰 ?ヘルプキーの副作用: シリアル自動化で?を送ると改行も送信され、コマンドが実行されてしまう。手動操作では問題ない- 進捗バーの
#記号:image fetch/image installの進捗バーにプロンプト (#) と同じ文字が含まれる。自動化でプロンプト検出する場合はフルプロンプトパターン (switch-d2b2e2 [standalone: master] #) を使う show interfaces mgmt0は enable モードが必要: operator mode だとエラー- MLNX-OS の ping 構文:
-c Nを使う (count Nは不可) - 設定保存:
write memoryを使う (configuration writeは MLNX-OS 3.6 では不可) - 長時間操作と
sx6036-console.py: FW fetch (5分), install (15分), reload (~8分) はタイムアウトを超えるため、シリアルコンソール手動操作 (screen /dev/ttyUSB0 9600) を推奨 - QSFP+ トランシーバ電力制限: SX6036 (SwitchX-2) はポートあたり最大 2W。CWDM4/LR4 等の高消費電力光モジュール (2.5-3.5W) は非対応。DAC ケーブルまたは Mellanox FDR AOC (<2W) を使用すること。スイッチ側で
Warning: High power transceiver is not supportedが表示されリンクが確立できない - IB トランシーバ情報取得の制約: MLNX-OS 3.6 の IB インターフェースでは
transceiver,module-info,pluggable,cables,running-config interfaceサブコマンドが非対応。サーバ側のethtool -mも IB インターフェースではOperation not supported。トランシーバの詳細診断手段は限定的
IB パーティション / トラフィック分離
パーティションコマンドの対応状況
MLNX-OS 3.6.8012 は ib partition コマンドを 部分的にサポート:
show ib partition(enable mode) — 動作する。Default パーティション (PKey 0x7FFF, ALL members) が表示されるib partition <name> pkey 0x<id>(configure mode) — 動作する。パーティション作成可能ib partition <name> ipoib(configure mode) — 動作するib partition <name> member ALL type full(configure mode) — 動作するib partition <name> member <GUID> type full(configure mode) — 動作しない。% Invalid port GUIDエラー。e41d:2d03:00b4:db21/e41d2d0300b4db21/0xe41d2d0300b4db21いずれのフォーマットも不可
結論: パーティション作成自体は可能だが、個別 GUID によるメンバー制限は MLNX-OS 3.6 では非サポート。ALL のみ指定可能なため、リージョン間のハードウェアレベル Pkey 分離は不可。
採用手段: サブネット分離
リージョンごとに異なる IPoIB サブネットを割り当てて IP レベルで分離:
| リージョン | サブネット | ノード |
|---|---|---|
| Region A | 192.168.100.0/24 | 4号機 (.1), 5号機 (.2), 6号機 (.3) |
| Region B | 192.168.101.0/24 | 7号機 (.7), 8号機 (.8), 9号機 (.9) |
- DRBD はリージョン内で IPoIB、リージョン間で Ethernet (10.x) を使用
- 異なるサブネット間はルーティングなしのため IP レベルで到達不可
- LINSTOR PrefNic は変更不要 (同じ物理インターフェース、IP のみ変更)
- 検証済み: Region A↔B 間は ping 100% packet loss (2026-03-19)
ポートマップ
| ポート | サーバ | 状態 |
|---|---|---|
| IB1/7 | 7号機 | Active 40 Gbps QDR |
| IB1/9 | 9号機 | Active 40 Gbps QDR |
| IB1/11 | 8号機 | Active 40 Gbps QDR |
| IB1/19 | 6号機 | Active 40 Gbps QDR |
| IB1/21 | 5号機 | Active 40 Gbps QDR |
| IB1/23 | 4号機 | Active 40 Gbps QDR |
HCA GUID
| サーバ | IB デバイス | Node GUID | Port GUID (port 1) |
|---|---|---|---|
| 4号機 | ibp134s0 | e41d:2d03:00b4:db20 | e41d:2d03:00b4:db21 |
| 5号機 | ibp134s0 | e41d:2d03:007a:5c60 | e41d:2d03:007a:5c61 |
| 6号機 | ibp134s0 (mlx4_0) | e41d:2d03:00b4:ded0 | e41d:2d03:00b4:ded1 |
| 7号機 | ibp10s0 (mlx4_0) | ec0d:9a03:00e6:cc10 | ec0d:9a03:00e6:cc11 |
| 8号機 | ibp10s0 (mlx4_0) | ec0d:9a03:00de:bb40 | ec0d:9a03:00de:bb41 |
| 9号機 | ibp10s0 (mlx4_0) | f452:1403:006b:7530 | f452:1403:006b:7531 |