| name | ib-switch |
| description | Mellanox SX6036 InfiniBand スイッチのシリアルコンソール操作。ステータス確認、show コマンド、IB 設定、FW 管理を行う。 |
| argument-hint | <subcommand> [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 を含めないこと:
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'
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 サーバを起動し、スイッチからフェッチする:
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 |
参照