web-dev-qa-db-ja.com

nvme名前空間とは何ですか?それらはどのように機能しますか?

最近、組み込みのnvme ssdsを備えたデバイスにインストールされたLinuxのサポートを開始しました。デバイスファイルには、ドライブ番号とパーティション番号を識別する番号以外に、余分な番号があることに気付きました。 IDE/SATA/SCSIドライブには、通常、ドライブ文字とパーティション番号しかありません。

例:/ dev/nvme0n1p2

私はn1の部分が何であるか疑問に思うようになり、少し検索した後、それはnvmeの「名前空間」を識別するように見えます。 「NVMeネームスペースは、論理ブロックにフォーマットできる大量の不揮発性メモリ(NVM)です。」

それでは、これはハードウェアコントローラーレベルで定義されたパーティションのように機能し、MBRまたはGPTパーティションテーブルでは機能しませんか?名前空間は複数の物理nvme ssdにまたがることができますか?例えば。 RAID 0のように、複数のSSDのストレージを1つの論理名前空間にプールする名前空間を作成できますか?

パーティションテーブルやLVM、または複数のボリューム(ZFS、Btrfsなど)を管理できるファイルシステムを使用してまだ実現できないNVME名前空間をどのように使用しますか?

また、名前空間の番号付けが0ではなく1から始まるように見えるのはなぜですか?これは、NVMEが低レベルでネームスペース番号を追跡する方法と関係があるだけです(たとえば、パーティションも0ではなく1から始まります。これは、パーティション番号の標準が設定された方法であるため、Linuxカーネルはパーティション番号を使用するだけです)それはディスクに格納されています-nvmeは同じように動作すると思いますか?)

21
JeffFromOhio

NVM Expressおよび関連する標準では、コントローラーは1つ以上の名前空間に分割されたストレージへのアクセスを提供します。名前空間は作成および削除できますviaコントローラーには、それらにスペースがあり(または、基になるストレージがシンプロビジョニングをサポートしている限り)、複数のコントローラーが共有名前空間へのアクセスを提供できます。基盤となるストレージの編成方法は、私の知る限り、標準では規定されていません。

ただし、それぞれがPCI Expressポートに接続された独自のストレージとコントローラーを提供し、アクセスポイントが名前空間の上のコントローラーであるため、典型的なNVMe SSDを組み合わせることはできません。したがって、名前空間は複数のコントローラー(複数のコントローラー- can共有ネームスペースへのアクセスを提供します)。ネームスペースは、エンタープライズストレージ(SANなど)で使用されるSCSI LUNのようなものと考えるのがよいでしょう。

名前空間の番号付けは1から始まります。これは、コントローラーごとの名前空間識別子が機能するためです。名前空間には、より長く、グローバルに一意の識別子もあります。

名前空間は nvme コマンドを使用して操作できます。これは、以下を含む低レベルのNVMe機能をサポートします。

  • 低レベルのフォーマットを実行し、さまざまな機能を使用できるようにするフォーマット(安全な消去、LBAフォーマットの選択...);
  • アタッチとデタッチ。コントローラーをネームスペースにアタッチまたはデタッチできるようにします(コントローラーがサポートし、ネームスペースで許可されている場合)。

アタッチとデタッチは、ラップトップまたはデスクトップのNVMeドライブで遭遇するものではありません。これは、過去のiSCSI SANに取って代わる、Dell EMCが販売しているものなどのNVMeストレージベイで使用します。

詳細については NVM Express標準 (比較的読みやすい)を参照してください。優れた導入については このNVM Expressチュートリアルプレゼンテーション を参照してください。

18
Stephen Kitt