7 ファイバ・チャネル経由のNVMeストレージの操作
Oracle Linuxでは、Non-volatile Memory Express over Fibre Channel (NVMe/FC)プロトコルを使用して、ファイバ・チャネル・ネットワーク経由でホストおよびNVMeソリッド・ステート・ストレージ・デバイスを管理します。NVMe/FCが有効なホスト・バス・アダプタ(HBA)を持つマシンで実行されているOracle Linuxは、ファイバ・ネットワークに接続されたNVMe SSDデバイスを検出して接続できます。nvme-cliパッケージの一部である様々なnvme
コマンドを使用して、これらのアダプタを介してホストからこれらのSSDデバイスへの接続を確立できます。nvme-cliは、Oracle Linuxで使用可能なNVMeストレージCLIユーティリティです。
この章では、ファイバ・チャネル・ネットワーク経由でリモートNVMe SSDデバイスに接続するための特定のBroadcom EmulexやMarvell Qlogicファイバ・チャネル・アダプタなどのHBAデバイスの構成に関する手順について説明します。
NVMe/FCデバイスについて
NVMe/FCは、ファイバ・チャネル・ネットワーク上のNVMeホストおよびNVMe SSDストレージ・デバイスを管理するためのプロトコルです。NVMe/FCには、光ファイバ・ケーブル配線、NVMe/FC対応のインタフェース・アダプタ、NVMe/FC対応のネットワーク・スイッチなどのインフラストラクチャが必要です。ファイバ・チャネル・ネットワークは、通常、iSCSIと比べてスループットが向上し、レイテンシが短縮され、パフォーマンスが向上します。
ホスト(NVMeイニシエータと呼ばれることが多い)は、ファイバ・チャネル・ネットワーク経由でストレージ・ターゲットにアクセスします。ホストは、サーバー、VM、またはリモートNVMe/FCストレージへのアクセス・リクエストを開始できるNVMe/FCアダプタまたはソフトウェア・スタックが装備されている任意のデバイスです。NVMeイニシエータには、ストレージがローカルにアタッチされているように見えます。
NVMeイニシエータおよびターゲットは、NVMeアダプタである専用のNVMe HBAを、ファイバ・チャネル・ネットワークに接続するポートとともに使用します。
イニシエータとターゲットを表すnvme connect
コマンドのパラメータには、次のものがあります:
- host-traddr: このパラメータは、ホスト・トランスポート・アドレスを指定し、イニシエータのアドレスを参照します。アドレスまたは識別子は、ファイバ・チャネル・ファブリックへの接続に使用するホストのファイバ・チャネルHBAポートです。このポートは通常、ローカル・ポートと呼ばれます。
- traddr: このパラメータは、トランスポート・アドレスを指定し、1つ以上のNVMe SSDストレージ・デバイスをホストするターゲット・サーバーまたはコントローラのアドレスを参照します。このポートは通常、リモート・ポートと呼ばれます。
- World Wide Namespace Name (WWNN): これは、NVMeサブシステム内の各ネームスペースに割り当てられたグローバル一意識別子です。NVMeプロトコルは、コマンドを正しいネームスペースにルーティングするときにWWNNを使用します。
- World Wide Namespace Port (WWNP): これは、ネームスペースへのアクセスに使用するポートを指定するグローバル一意識別子です。NVMeプロトコルは、WWNPを使用して、コマンドを適切なネームスペース・デバイスにルーティングします。
ローカル・ポート・アドレスとリモート・ポート・アドレスの組合せを問い合せると、NVMeストレージ・デバイスを表す使用可能なターゲット・ネームスペースを検出できます。ストレージ・デバイスのネームスペースを特定したら、ローカル・ポート・アドレスとリモート・ポート・アドレスをデバイスのネームスペースと組み合せて、ホストをターゲットNVMeストレージ・デバイスに接続できます。
NVMe仕様の詳細は、https://nvmexpress.org/specifications/を参照してください。
NVMe/FCストレージ・アダプタの互換性
NVMe/FC検出および切断機能は、次のドキュメントに記載されているファイバ・チャネル・ストレージ・アダプタと互換性があります: https://linux.oracle.com/Component_Compatibility_Guide.pdf。
NVMe-CLIのインストールおよびホスト・ネームスペースの識別
次の手順では、nvme-cli
NVMe CLIユーティリティをインストールし、ホスト・ネームスペースを識別する方法について説明します。
-
ホストで、nvme-cliコマンドライン・ユーティリティを開きます:
sudo dnf install nvme-cli
- ホストにネームスペースが存在することを確認します:
nvme show-hostnqn
ノート:
または、nvme-cli
のインストール時に作成された/etc/nvme/hostnqn
ファイルにネームスペースがあります。
Broadcomホストからのターゲットの検出および接続
次の手順では、Broadcom Emulexファイバ・チャネル・アダプタを使用して、Oracle LinuxホストからNVMe/FCターゲットを検出して接続する方法について説明します。
-
/sys/class/scsi_host/host*/nvme_info
ディレクトリのローカル・ポートおよびリモート・ポートのWWNNおよびWWPNを特定します。たとえば、1つのローカル・ポートと2つのリモート・ポートを持つホストを次に示します:cat /sys/class/scsi_host/host*/nvme_info NVME Initiator Enabled XRI Dist lpfc1 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc1 WWPN x100000109adcbefh WWNN x200000109adcbefh DID x000000 UNKNOWN NVME Statistics LS: Xmt 0000000000 Cmpl 0000000000 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 0000000000000000 Issue 0000000000000000 OutIO 0000000000000000 abort 00000000 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000000 Err 00000000 NVME Initiator Enabled XRI Dist lpfc0 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc0 WWPN x100000109acfgcad WWNN x200000109acfgcad DID x011700 ONLINE NVME RPORT WWPN x2015c146dc13a14b WWNN x2014c146dc13a14b DID x011307 TARGET DISCSRVC ONLINE NVME RPORT WWPN x2016c146dc13a14b WWNN x2014c146dc13a14b DID x011105 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000000028 Cmpl 0000000028 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 00000000000019fa Issue 00000000000019fa OutIO 0000000000000000 abort 00000005 noxri 00000000 nondlp 00000000 qdepth 00000000 wqerr 00000000 err 00000000 FCP CMPL: xb 00000005 Err 00000005
- ローカル・ポートとリモート・ポートの1つからWWPNとWWNNの組合せに、次の形式の変更を適用します。
- すべてのWWPNについて、アドレスの先頭に
np-0
を追加します。 - すべてのWWNNについて、アドレスの先頭に
nn-0
を追加します。
たとえば、次のようにします。LPORT WWNN nn-0x200000109acfgcad WWPN pn-0x100000109acfgcad RPORT WWNN nn-0x2014c146dc13a14b WWPN pn-0x2015c146dc13a14b
- すべてのWWPNについて、アドレスの先頭に
- 検出コマンドを実行して、リモート・ポートで使用可能なNVMe SSDデバイスを特定します。次のコマンド形式を使用します:
nvme discover --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp>
前述の<rportwwnn>および<rportwwnp>はリモート・ポートのworld wide namespace nameとportで、<rportwwnn>および<rportwwnp>はローカルのworld wide namespace nameとportです。
たとえば、次のコマンド# nvme discover --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad Discovery Log Number of Records 1, Generation counter 2 =====Discovery Log Entry 0====== trtype: fc adrfam: fibre-channel subtype: nvme subsystem treq: not specified portid: 0 trsvcid: none subnqn: nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_broadcom traddr: nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b
- 検出の応答にリストされているsubnqnによって表されるデバイスへの接続を確立します。次のコマンド形式を使用します:
nvme connect --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp> -n <subnqn> -k <s>
前述のコマンドでは、- <rportwwnn>および<rportwwnp>は、リモート・ポートのworld wide namespace nameとportです。
- <rportwwnn>および<rportwwnp>は、ローカルのworld wide namespace nameとportです。
- <subnqn>は、検出コマンドによって生成されたsubnqnパラメータの値です。
- <s>は、コマンドがタイムアウト・メッセージを生成する前に、リモートのNVMeデバイスからの応答を待機するキープアライブ時間(秒)です。
たとえば、次のコマンドは、5秒のタイマーを持つリモート・ポートへの接続を確立します。nvme connect --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad -n nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_broadcom -k 5
- ホストがストレージを使用できるようになったことを確認します。次に例を示します。
nvme list -v Subsystem Subsystem-NQN Controllers ---------------- ------------------------------------------------------------------------------------------------ ---------------- nvme-subsys1 nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_broadcom nvme1 Device SN MN FR TxPort Asdress Slot Subsystem Namespaces -------- -------------------- ---------------------------------------- -------- ------ -------------- ------ ------------ ---------------- nvme1 81EYIJSh2VMMAAAAAAAB NetApp ONTAP Controller FFFFFFFF fc traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b,host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad nvme-subsys1 nvme1n1 Device Generic NSID Usage Format Controllers ------------ ------------ ---------- -------------------------- ---------------- ---------------- /dev/nvme1n1 /dev/ng1n1 0x1 107.37 GB / 107.37 GB 4 KiB + 0 B nvme1
Qlogicホストからのターゲットの検出および接続
次の手順では、Marvell Qlogicファイバ・チャネル・アダプタを使用して、Oracle LinuxホストからNVMe/FCターゲットを検出して接続する方法について説明します。
-
qla2xxx Qlogicモジュールがインストールされ、ロードされていることを確認します。
modprobe -r qla2xxx modprobe qla2xxx
-
ローカルおよびリモート・ポートのWWNNおよびWWPNを特定します。次のコマンドを使用します。
dmesg | grep traddr
たとえば、1つのローカル・ポートと1つのリモート・ポートを持つホストを次に示します:dmesg | grep traddr [ 6.139862] qla2xxx [0000:04:00.0]-ffff:0: register_localport: host-traddr=nn-0x200000109acfgcad:pn-0x100000109acfgcad on portID:10700 [ 6.241762] qla2xxx [0000:04:00.0]-2102:0: qla_nvme_register_remote: traddr=nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b PortID:01050d
- 検出コマンドを実行して、リモート・ポートで使用可能なNVMe SSDデバイスを特定します。次のコマンド形式を使用します:
nvme discover --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp>
前述の<rportwwnn>および<rportwwnp>はリモート・ポートのworld wide namespace nameとportで、<rportwwnn>および<rportwwnp>はローカルのworld wide namespace nameとportです。
たとえば、次のコマンド# nvme discover --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad Discovery Log Number of Records 1, Generation counter 2 =====Discovery Log Entry 0====== trtype: fc adrfam: fibre-channel subtype: nvme subsystem treq: not specified portid: 0 trsvcid: none subnqn: nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_qlogic traddr: nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b
- 検出の応答にリストされているsubnqnによって表されるデバイスへの接続を確立します。次のコマンド形式を使用します:
nvme connect --transport fc --traddr <rportwwnn>:<rportwwnp> --host-traddr <lportwwnn>:<lportwwnp> -n <subnqn> -k <s>
前述のコマンドでは、- <rportwwnn>および<rportwwnp>は、リモート・ポートのworld wide namespace nameとportです。
- <rportwwnn>および<rportwwnp>は、ローカルのworld wide namespace nameとportです。
- <subnqn>は、検出コマンドによって生成されたsubnqnパラメータの値です。
- <s>は、コマンドがタイムアウト・メッセージを生成する前に、リモートのNVMeデバイスからの応答を待機するキープアライブ時間(秒)です。
たとえば、次のコマンドは、5秒のタイマーを持つリモート・ポートへの接続を確立します。nvme connect --transport fc --traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b --host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad -n nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b:test_qlogic -k 5
- ホストがストレージを使用できるようになったことを確認します。次に例を示します。
nvme list -v Subsystem Subsystem-NQN Controllers ---------------- ------------------------------------------------------------------------------------------------ ---------------- nvme-subsys1 nqn.1432-01.com.netapp:sn.c44dd3bsce4245edc1adc021cb11a0f6:test_qlogic nvme1 Device SN MN FR TxPort Asdress Slot Subsystem Namespaces -------- -------------------- ---------------------------------------- -------- ------ -------------- ------ ------------ ---------------- nvme1 81EYIJSh2VMMAAAAAAAB NetApp ONTAP Controller FFFFFFFF fc traddr nn-0x2014c146dc13a14b:pn-0x2015c146dc13a14b,host-traddr nn-0x200000109acfgcad:pn-0x100000109acfgcad nvme-subsys1 nvme1n1 Device Generic NSID Usage Format Controllers ------------ ------------ ---------- -------------------------- ---------------- ---------------- /dev/nvme1n1 /dev/ng1n1 0x1 107.37 GB / 107.37 GB 4 KiB + 0 B nvme1