最近、組み込みの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は同じように動作すると思いますか?)
NVM Expressおよび関連する標準では、コントローラーは1つ以上の名前空間に分割されたストレージへのアクセスを提供します。名前空間は作成および削除できますviaコントローラーには、それらにスペースがあり(または、基になるストレージがシンプロビジョニングをサポートしている限り)、複数のコントローラーが共有名前空間へのアクセスを提供できます。基盤となるストレージの編成方法は、私の知る限り、標準では規定されていません。
ただし、それぞれがPCI Expressポートに接続された独自のストレージとコントローラーを提供し、アクセスポイントが名前空間の上のコントローラーであるため、典型的なNVMe SSDを組み合わせることはできません。したがって、名前空間は複数のコントローラー(複数のコントローラー- can共有ネームスペースへのアクセスを提供します)。ネームスペースは、エンタープライズストレージ(SANなど)で使用されるSCSI LUNのようなものと考えるのがよいでしょう。
名前空間の番号付けは1から始まります。これは、コントローラーごとの名前空間識別子が機能するためです。名前空間には、より長く、グローバルに一意の識別子もあります。
名前空間は nvme
コマンドを使用して操作できます。これは、以下を含む低レベルのNVMe機能をサポートします。
アタッチとデタッチは、ラップトップまたはデスクトップのNVMeドライブで遭遇するものではありません。これは、過去のiSCSI SANに取って代わる、Dell EMCが販売しているものなどのNVMeストレージベイで使用します。
詳細については NVM Express標準 (比較的読みやすい)を参照してください。優れた導入については このNVM Expressチュートリアルプレゼンテーション を参照してください。