ib-switch

star 17

Mellanox SX6036 InfiniBand スイッチのシリアルコンソール操作。ステータス確認、show コマンド、IB 設定、FW 管理を行う。

miminashi By miminashi schedule Updated 3/30/2026

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 = Falseser.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

参照

Install via CLI
npx skills add https://github.com/miminashi/pvese --skill ib-switch
Repository Details
star Stars 17
call_split Forks 1
navigation Branch main
article Path SKILL.md
More from Creator