目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / ストレージ管理ガイド / ネットワークストレージ / NVMe-oF
適用項目 SUSE Linux Enterprise Server 15 SP6

17 NVMe-oF

この章では、NVMe over Fabricホストおよびターゲットの設定方法について説明します。

17.1 概要

NVM Express® (NVMe®)は、不揮発性ストレージ(通常はSSDディスク)にアクセスするためのインタフェース規格です。NVMeはSATAをはるかに上回る処理速度をサポートし、レイテンシも低くなります。

NVMe-oFRDMATCPNVMe over Fibre Channel (FC-NVMe)などの異なるネットワーキングファブリックを介してNVMeストレージにアクセスするためのアーキテクチャです。NVMe-oFの役割はiSCSIと同様です。耐障害性を向上させるため、NVMe-oFにはマルチパスのサポートが組み込まれています。NVMe-oFマルチパスは、従来のデバイスマッパーマルチパスに基づいていません。

NVMeホストは、NVMeターゲットに接続するマシンです。NVMeターゲットは、そのNVMeブロックデバイスを共有するマシンです。

NVMeはSUSE Linux Enterprise Server 15 SP6でサポートされています。NVMeブロックストレージおよびNVMe-oFターゲットとホストには、専用のカーネルモジュールが用意されています。

ご使用のハードウェアに関する特別な考慮事項があるかどうかを確認するには、17.4項 「特定のハードウェアの設定」を参照してください。

17.2 NVMe-oFホストの設定

NVMe-oFを使用するには、サポートされているネットワーキング方法のいずれかでターゲットを使用可能にする必要があります。NVMe over Fibre Channel、TCP、およびRDMAがサポートされています。以降のセクションでは、NVMe over FabricホストをNVMeターゲットに接続する方法について説明します。

17.2.1 コマンドラインクライアントのインストール

NVMe-oFを使用するには、nvmeコマンドラインツールが必要です。インストールするには、zypperを実行します。

> sudo zypper in nvme-cli

すべての使用可能なサブコマンドを一覧にするには、nvme --helpを使用します。nvmeサブコマンド用のマニュアルページが提供されています。man nvme-SUBCOMMANDを実行すると、このページを参照できます。たとえば、discoverサブコマンドのマニュアルページを参照するには、man nvme-discoverを実行します。

17.2.2 NVMe-oFターゲットの検出

NVMe-oFターゲットで使用可能なNVMeサブシステムを一覧にするには、検出コントローラのアドレスとサービスIDが必要です。

> sudo nvme discover -t TRANSPORT -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID

TRANSPORTは、基盤となる転送メディア(looprdmatcp、またはfc)で置き換えます。DISCOVERY_CONTROLLER_ADDRESSは、検出コントローラのアドレスで置き換えます。RDMAとTCPの場合、これはIPv4アドレスである必要があります。SERVICE_IDは、転送サービスIDで置き換えます。RDMAまたはTCPのように、サービスがIPベースの場合、サービスIDはポート番号を指定します。ファイバチャネルの場合、サービスIDは必要ありません。

NVMeホストは、接続が許可されているサブシステムのみを参照します。

例:

> sudo nvme discover -t tcp -a 10.0.0.3 -s 4420

FCの場合、次のようになります。

> sudo nvme discover --transport=fc \
                --traddr=nn-0x201700a09890f5bf:pn-0x201900a09890f5bf \
                --host-traddr=nn-0x200000109b579ef6:pn-0x100000109b579ef6

詳細については、man nvme-discoverを参照してください。

17.2.3 NVMe-oFターゲットへの接続

NVMeサブシステムを特定した後で、nvme connectコマンドを使用して接続できます。

> sudo nvme connect -t transport -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID -n SUBSYSTEM_NQN

TRANSPORTは、基盤となる転送メディア(looprdmatcpまたはfc)で置き換えます。DISCOVERY_CONTROLLER_ADDRESSは、検出コントローラのアドレスで置き換えます。RDMAとTCPの場合、これはIPv4アドレスである必要があります。SERVICE_IDは、転送サービスIDで置き換えます。RDMAまたはTCPのように、サービスがIPベースの場合、これはポート番号を指定します。SUBSYSTEM_NQNは、検出コマンドによって検出された、目的のサブシステムのNVMe修飾名で置き換えます。NQNは、NVMe修飾名(NVMe Qualified Name)の略語です。NQNは固有である必要があります。

例:

> sudo nvme connect -t tcp -a 10.0.0.3 -s 4420 -n nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432

FCの場合、次のようになります。

> sudo nvme connect --transport=fc \
             --traddr=nn-0x201700a09890f5bf:pn-0x201900a09890f5bf \
             --host-traddr=nn-0x200000109b579ef6:pn-0x100000109b579ef6 \
             --nqn=nqn.2014-08.org.nvmexpress:uuid:1a9e23dd-466e-45ca-9f43-a29aaf47cb21

または、nvme connect-allを使用して、すべての検出されたネームスペースに接続します。高度な使用法については、man nvme-connectおよびman nvme-connect-allを参照してください。

パスが失われると、NVMeサブシステムでは、nvme connectコマンドのctrl-loss-tmoオプションで定義された時間、再接続しようとします。この時間(デフォルト値は600秒)が経過したら、パスが削除され、ブロックレイヤの上位レイヤ(ファイルシステム)に通知されます。デフォルトでは、ファイルシステムは、読み取り専用にマウントされます。これは通常望ましい動作ではありません。したがって、NVMeサブシステムが制限なしで再接続を試行し続けるようにctrl-loss-tmoオプションを設定することをお勧めします。そのためには、次のコマンドを実行します。

> sudo nvme connect --ctrl-loss-tmo=-1

NVMe over Fabricsサブシステムを起動時に使用できるようにするには、ホストに/etc/nvme/discovery.confファイルを作成し、パラメータをdiscoverコマンドに渡します(17.2.2項 「NVMe-oFターゲットの検出」を参照)。たとえば、次のようにdiscoverコマンドを使用します。

> sudo nvme discover -t tcp -a 10.0.0.3 -s 4420

discoverコマンドのパラメータを/etc/nvme/discovery.confファイルに追加します。

echo "-t tcp -a 10.0.0.3 -s 4420" | sudo tee -a /etc/nvme/discovery.conf

次に、nvmf-autoconnectサービスを有効にします。

> sudo systemctl enable nvmf-autoconnect.service

17.2.4 マルチパス処理

NVMeネイティブマルチパス処理はデフォルトで有効になっています。コントローラID設定のCMICオプションが設定されている場合、NVMeスタックはNVMEドライブをデフォルトでマルチパスデバイスとして認識します。

マルチパスを管理するには、以下を使用できます。

マルチパスの管理
nvme list-subsys

マルチパスデバイスのレイアウトを印刷します。

multipath -ll

コマンドには互換性モードがあり、NVMeマルチパスデバイスを表示します。enable_foreignオプションを有効にしてこのコマンドを使用する必要があることに留意してください。詳細については、18.13項 「その他のオプション」を参照してください。

nvme-core.multipath=N

オプションがブートパラメータとして追加されると、NVMeネイティブマルチパスが無効になります。

17.3 NVMe-oFターゲットの設定

17.3.1 コマンドラインクライアントのインストール

NVMe-oFターゲットを設定するには、nvmetcliコマンドラインツールが必要です。インストールするには、zypperを実行します。

> sudo zypper in nvmetcli

nvmetcliの現在のドキュメントはhttps://git.infradead.org/users/hch/nvmetcli.git/blob_plain/HEAD:/Documentation/nvmetcli.txtから入手できます。

17.3.2 設定手順

次の手順に、NVMe-oFターゲットの設定方法の例を示します。

設定はツリー構造で格納されます。移動するには、cdコマンドを使用します。オブジェクトを一覧にするには、lsを使用します。createを使用して新しいオブジェクトを作成できます。

  1. nvmetcliインタラクティブシェルを起動します。

    > sudo nvmetcli
  2. 新しいポートを作成します。

    (nvmetcli)> cd ports
    (nvmetcli)> create 1
    (nvmetcli)> ls 1/
    o- 1
      o- referrals
      o- subsystems
  3. NVMeサブシステムを作成します。

    (nvmetcli)> cd /subsystems
    (nvmetcli)> create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
    (nvmetcli)> cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/
    (nvmetcli)> ls
    o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
      o- allowed_hosts
      o- namespaces
  4. 新しいネームスペースを作成し、そのネームスペースにNVMeデバイスを設定します。

    (nvmetcli)> cd namespaces
    (nvmetcli)> create 1
    (nvmetcli)> cd 1
    (nvmetcli)> set device path=/dev/nvme0n1
    Parameter path is now '/dev/nvme0n1'.
  5. 以前に作成したネームスペースを有効にします。

    (nvmetcli)> cd ..
    (nvmetcli)> enable
    The Namespace has been enabled.
  6. 作成したネームスペースを表示します。

    (nvmetcli)> cd ..
    (nvmetcli)> ls
    o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
      o- allowed_hosts
      o- namespaces
        o- 1
  7. すべてのホストがサブシステムを使用できるようにします。この操作は、セキュリティ保護された環境でのみ実行します。

    (nvmetcli)> set attr allow_any_host=1
    Parameter allow_any_host is now '1'.

    または、特定のホストのみが接続できるようにします。

    (nvmetcli)> cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/allowed_hosts/
    (nvmetcli)> create hostnqn
  8. すべての作成されたオブジェクトを一覧にします。

    (nvmetcli)> cd /
    (nvmetcli)> ls
    o- /
      o- hosts
      o- ports
      | o- 1
      |   o- referrals
      |   o- subsystems
      o- subsystems
        o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
          o- allowed_hosts
          o- namespaces
            o- 1
  9. TCPを介してターゲットを使用できるようにします。RDMAにはtrtype=rdmaを使用します。

    (nvmetcli)> cd ports/1/
    (nvmetcli)> set addr adrfam=ipv4 trtype=tcp traddr=10.0.0.3 trsvcid=4420
    Parameter trtype is now 'tcp'.
    Parameter adrfam is now 'ipv4'.
    Parameter trsvcid is now '4420'.
    Parameter traddr is now '10.0.0.3'.

    または、ファイバチャネルを介して使用可能にすることができます。

    (nvmetcli)> cd ports/1/
    (nvmetcli)> set addr adrfam=fc trtype=fc traddr=nn-0x1000000044001123:pn-0x2000000055001123 trsvcid=none
  10. サブシステムをポートにリンクします。

    (nvmetcli)> cd /ports/1/subsystems
    (nvmetcli)> create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82

    dmesgを使用してポートが有効になっていることを確認できるようになりました。

    # dmesg
            ...
    [  257.872084] nvmet_tcp: enabling port 1 (10.0.0.3:4420)

17.3.3 ターゲット設定のバックアップと復元

次のコマンドを使用してJSONファイルにターゲット設定を保存できます。

> sudo nvmetcli
(nvmetcli)> saveconfig nvme-target-backup.json

設定を復元するには、次のコマンドを使用します。

(nvmetcli)> restore nvme-target-backup.json

現在の設定を消去することもできます。

(nvmetcli)> clear

17.4 特定のハードウェアの設定

17.4.1 概要

一部のハードウェアでは、正しく動作させるために特殊な設定が必要です。次の各セクションの見出しを参照し、記載されているデバイスまたはベンダのいずれかに該当しないか確認してください。

17.4.2 Broadcom

Broadcom Emulex LightPulse Fibre Channel SCSIドライバを使用している場合は、lpfcモジュールのターゲットおよびホスト上にカーネル設定パラメータを追加します。

> sudo echo "options lpfc lpfc_enable_fc4_type=3" > /etc/modprobe.d/lpfc.conf

Broadcomアダプタファームウェアのバージョンが11.4.204.33以降であることを確認します。現在のバージョンのnvme-clinvmetcli、およびカーネルがインストールされていることも確認します。

ファイバチャネルポートをNVMeターゲットとして有効にするには、追加のモジュールパラメータを設定する必要があります。たとえば、lpfc_enable_nvmet= COMMA_SEPARATED_WWPNSと指定します。先行する0xとともにWWPNを入力します。たとえば、lpfc_enable_nvmet=0x2000000055001122,0x2000000055003344と指定します。一覧表示されているWWPNのみがターゲットモードに設定されます。ファイバチャネルポートは、ターゲットまたはイニシエータとして設定できます。

17.4.3 Marvell

FC-NVMeは、QLE269xおよびQLE27xxアダプタでサポートされています。FC-NVMeのサポートは、Marvell® QLogic® QLA2xxxファイバチャネルドライバでデフォルトで有効になっています。

NVMeが有効になっていることを確認するには、次のコマンドを実行します。

> cat /sys/module/qla2xxx/parameters/ql2xnvmeenable

結果の1は、NVMeが有効になっていることを示し、0は無効になっていることを示します。

次に、Marvellアダプタファームウェアが少なくともバージョン8.08.204であることを次のコマンドの出力をチェックして確認します。

> cat /sys/class/scsi_host/host0/fw_version

最後に、SUSE Linux Enterprise Serverで使用可能な最新バージョンのnvme-cliQConvergeConsoleCLI、およびカーネルがインストールされていることを確認します。たとえば、次を実行して

# zypper lu && zypper pchk

更新とパッチを確認します。

インストールに関する詳細については、次のMarvellユーザガイドのFC-NVMeのセクションを参照してください。

17.5 NVMe-oF over TCPからのブート

SLESでは、NVM Express® Boot Specification 1.0に従って、NVMe-oF over TCPからのブートをサポートしています。

リモートストレージサーバへのNVMe-oF over TCP接続を試行し、これらの接続をブートに使用するように、UEFIプリブート環境を設定できます。プリブート環境では、ACPIテーブル(NVMe Boot Firmware Table (NBFT))を作成し、ブートに使用されるNVMe-oF設定に関する情報を格納します。オペレーティングシステムは後のブートステージでこのテーブルを使用し、ネットワーキングとNVMe-oF接続を設定して、ルートファイルシステムにアクセスします。

17.5.1 システム要件

NVMe-oF over TCPからシステムをブートするには、次の要件を満たしている必要があります。

  • SLES15 SP6以降。

  • NVMe-oF over TCPをサポートするSANストレージアレイ。

  • NVMe-oF over TCPからのブートをサポートするBIOSを備えたホストシステム。この機能のサポートについては、ハードウェアのベンダにお問い合わせください。NVMe-oF over TCPからのブートは現在、UEFIプラットフォームでのみサポートされています。

17.5.2 インストール

NVMe-oF over TCPからSLESをインストールするには、次の手順に従います。

  1. ホストシステムのUEFIセットアップメニューを使用して、ブート時にNVMe-oF接続が確立されるように設定します。通常、ネットワーキング(ローカルIPアドレス、ゲートウェイなど)とNVMe-oFターゲット(リモートIPアドレス、サブシステムNQN、または検出NQN)の両方を設定する必要があります。設定の説明については、ハードウェアのマニュアルを参照してください。ハードウェアベンダが、BIOS設定を一元的かつリモートで管理する手段を提供している場合があります。詳細については、ハードウェアベンダに問い合わせてください。

  2. 展開ガイドの説明に従ってインストールを準備します。

  3. サポートされているインストール方法を使用して、システムのインストールを開始します。NVMe-oF over TCPへのインストールを有効にするために、特定のブートパラメータを使用する必要はありません。

  4. BIOSが正しく設定されている場合は、YaSTのディスクパーティション設定ダイアログに、BIOSで設定されたサブシステムによってエクスポートされたNVMeネームスペースが表示されます。これらはNVMeデバイスとして表示され、tcp文字列は、デバイスがTCPトランスポートを介して接続されていることを示しています。これらのネームスペースにオペレーティングシステム(特にEFIブートパーティションとルートファイルシステム)をインストールします。

  5. インストールを完了します。

インストール後、システムはNVMe-oF over TCPから自動的にブートするはずです。ブートしない場合は、ブートの優先度がBIOSセットアップで正しく設定されているか確認します。

ブートに使用されるネットワークインタフェース名は、nbft0nbft1などです。NVMe-oFブートに関する情報を取得するには、次のコマンドを実行します。

# nvme nbft show

17.6 詳細情報

nvmeコマンドの機能の詳細については、nvme nvme-helpを参照してください。

次のリンクには、NVMeおよびNVMe-oFの概要があります。