pc:test_multiple_nvme_namespaces

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

次のリビジョン
前のリビジョン
pc:test_multiple_nvme_namespaces [2023-05-05 23:06]
Decomo 作成
pc:test_multiple_nvme_namespaces [2023-06-08 23:28] (現在)
Decomo
行 1: 行 1:
 ====== 複数のNVMe namespaceを試す ====== ====== 複数のNVMe namespaceを試す ======
  
-NVMeにはNamespace(名前空間)という機能がある。1つのNVMeデバイスを論理的に分割し、それぞれを独立したNVMeストレージのように扱う機能である。+NVMeにはNamespace(名前空間)という機能がある。NVMeデバイスの記憶領域を論理的に分割し、それぞれを独立したNVMeストレージのように扱う機能である。
  
-オプション機能なので、大半の、特にコンシューマ向けNVMe SSDでは非対応なのだが、+馴染みあるところだとパーティションのようなものだが、ファームウェアレイヤーでの分割となり、名前空間同士には明確な前後関係はなく、OSからは別のデバイスとして見えるのが大きな違い。ハードウェアRAIDの仮想ドライブ、ZFSのデータセットに近い。 
 + 
 +名前空間を使うと以下の効能が見込めるとされる。 
 + 
 +  * 名前空間ごとに異なる暗号鍵によるセキュリティの向上 
 +  * オーバープロビジョニングによる書き込み性能、耐久性の向上 
 +  * リカバリ領域などの書込み保護 
 + 
 +名前空間はオプション機能なので、大半のNVMe SSD製品、特にコンシューマ向けは最大1つの名前空間しかサポートしてなかったりして残念ではあるが、使えれば色々遊べそう機能だ。個人的には仮想と物理を行き来するような構成でディスク管理簡単化への期待が高まる(弊宅ではPromoxVEと一部VMのRDM用パーティションが同じSSD上にあり、いぶ面倒な運用となっている。名前空間でデバイスを割ることできれば非常にシンプルになるハズ。)
  
 ===== 試した環境 ===== ===== 試した環境 =====
  
   * ハードウェア   * ハードウェア
-    * Lenovo ThinkCentre TS150 +    * Lenovo ThinkServer TS150 
-    * SAMSUNG PM9A3 (M.2)+    * Supermicro X10SRL-F 
 +    * SAMSUNG PM9A3 (M.2/U.2) 
 +      * 最大32の名前空間に対応
   * ソフトウェア   * ソフトウェア
     * Ubuntu Server 22.04.2 LTS     * Ubuntu Server 22.04.2 LTS
 +
 +FreeBSDerのわたくしといたしましては、FreeBSDの''nvmecontrol''コマンドで試したかったのだけれども、[[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=269912|バグで名前空間が作れない]]という致命的な問題があったので、やむなくLinux環境で試すこととなった。なお、バグは13.2-RELEASEで修正される模様。
  
 ===== 現状の確認 ===== ===== 現状の確認 =====
行 34: 行 46:
 既存の名前空間から使用可能なLBA形式を取得しておく。 既存の名前空間から使用可能なLBA形式を取得しておく。
  
-というのも、後ほど名前空間作成時に使うのだけれども、このリストを名前空間がない状態で取得する術が無さそうなのだ。いざとなれば、てきとーなLBA形式で名前空間作成後、希望の形式で再フォーマットしてやれば済む話だが、二度手間は避けたいので。+というのも、後ほど名前空間作成時に使うのだけれども、名前空間がない状態でこのリストを取得する術が無さそうなのだ。いざとなれば、てきとーなLBA形式で名前空間作成後、希望の形式で再フォーマットしてやれば済む話だが、二度手間は避けたいので。
  
 NVMeコントローラの一覧: NVMeコントローラの一覧:
行 43: 行 55:
 </code> </code>
  
-NVMeストレージでは複数のコントローラを持つことができ、名前空間はコントローラに割り当てる形となっている。この値も後ほど使うのでメモっておく。+NVMeデバイスでは複数のコントローラを持つことができ、名前空間はコントローラに割り当てる形となっている。この値も後ほど使うのでメモっておく。
  
 NVMeコントローラの詳細: NVMeコントローラの詳細:
行 92: 行 104:
 | ''-f'', ''--flbas'' | LBA形式の指定。''nvme id-ns''で得られた値を指定する。ここでは512バイトセクタとしている。 | | ''-f'', ''--flbas'' | LBA形式の指定。''nvme id-ns''で得られた値を指定する。ここでは512バイトセクタとしている。 |
 | ''-s'', ''--nsze'' | 名前空間の最大サイズ。-fで指定したブロック数単位で指定する。ここでは100GiB÷512バイト=209715200としている。| | ''-s'', ''--nsze'' | 名前空間の最大サイズ。-fで指定したブロック数単位で指定する。ここでは100GiB÷512バイト=209715200としている。|
-| ''-c'', ''--ncap'' | 名前空間の確保サイズ。-sのブロック数以下で指定する。|+| ''-c'', ''--ncap'' | 名前空間の確保サイズ。-sのブロック数以下で指定する。最大サイズ未満を指定すればオーバープロビジョニング状態となる。|
  
 作成した名前空間はコントローラにアタッチして初めて使えるようになる。 作成した名前空間はコントローラにアタッチして初めて使えるようになる。
行 124: 行 136:
 </code> </code>
  
-それぞれのS.M.A.R.T.はこんな感じ。+それぞれのS.M.A.R.T.はこんな感じ。デバイスが対応していれば、名前空間ごとに固有のS.M.A.R.T.を持つこともできるようだ
 ^  nvme0n1  ^  nvme0n2  ^ ^  nvme0n1  ^  nvme0n2  ^
 |<code>$ sudo smartctl -a /dev/nvme0n1 |<code>$ sudo smartctl -a /dev/nvme0n1
行 282: 行 294:
 ==== Windows ==== ==== Windows ====
  
-WindowsではLUN違いのデバイスとして見えるようだ。インストールは未確認だが、認識のされ方的に任意の名前空間にインストール可能であろうと思われる+WindowsではLUN違いのデバイスとして見えるようだ。
  
 {{ :pc:multiple_nvme_namespaces_in_windows_server_2016.png |}} {{ :pc:multiple_nvme_namespaces_in_windows_server_2016.png |}}
  
 +インストーラーでも別ドライブとして認識されており、インストールできると思われる。
  
-UEFIのブートエントリは下記ようになっ+{{ :pc:multiple_nvme_namespaces_in_windows_server_2016_installer.png |}} 
 + 
 +==== Windows + USB ==== 
 + 
 +WindowsとNVMe→USB変換器経由で複数名前空間を持つSSDをつないだ時認識のされ方。 
 + 
 +^  変換チップ  ^  認識のされ方 
 +| ASM2362 | 最初の名前空間のみドライとして認識される | 
 +| JMS583 | 全く認識されない。名前空間が1つみのSSDら問題なく認識されるので、複数名前空間があるとダメい。 |
  
 ==== UEFI (BIOS) ==== ==== UEFI (BIOS) ====
  
 UEFIからの見え方は、恐らくマザボごとにまちまちである可能性が高い。NVMe対応UEFIは必須として、そのUEFIが持つNVMeドライバの対応状況次第だと思う。 UEFIからの見え方は、恐らくマザボごとにまちまちである可能性が高い。NVMe対応UEFIは必須として、そのUEFIが持つNVMeドライバの対応状況次第だと思う。
 +
 +=== ThinkServer TS150 ===
  
 比較的初期のNVMe対応品であると思われるTS150では、名前空間IDが1にあるESPを優先的にブートデバイスとして扱うようだ(あるいは、UEFIの最初のブートエントリが優先されてるのかも)。なお、NSID 1にはUbuntu Server、NSID 2にはFreeBSDをインストールした状態である。 比較的初期のNVMe対応品であると思われるTS150では、名前空間IDが1にあるESPを優先的にブートデバイスとして扱うようだ(あるいは、UEFIの最初のブートエントリが優先されてるのかも)。なお、NSID 1にはUbuntu Server、NSID 2にはFreeBSDをインストールした状態である。
行 297: 行 320:
 {{ :pc:multiple_nvme_namespaces_in_ts150_uefi.png |}} {{ :pc:multiple_nvme_namespaces_in_ts150_uefi.png |}}
  
-UEFIのブートエントリはこんな感じ。+UEFIのブートエントリは以下のような感じで、名前空間2にインストールしたFreeBSDも、正しく登録されているようだ
  
 <code> <code>
行 313: 行 336:
 </code> </code>
  
-名前空間2のFreeBSDのブートーダーもく登録れている。+ここで''efibootmgr -n 0003''とし次ブートデバイスをFreeBSDにすると、しっかりFreeBSDが立ち上がってくる。ただしUEFI上でのブートデバイスとしての認識は「ubuntu」のままだった。 
 + 
 +一方で、''efibootmgr -o 0003,0002,0000''としてブートオーダーをFreeBSD優先にして、相変わらずUbuntuが立ち上がってきた。 
 + 
 +いまいち釈然とない挙動だが、とりあえず名前空間が分かれていてもブート自体可能なことは分った。恒常的に起動OSを切り替えたいなら、[[http://www.rodsbooks.com/refind/index.html|rEFInd]]や[[https://github.com/CloverHackyColor/CloverBootloader|CloverBootloader]]あたりを名前空間1に入れておけば良だろう。 
 + 
 +=== Supermicro X10SRL-F === 
 + 
 +SupermicroのマザボX10SRL-Fでは、正しいESPさえあれば名前空間問わずブートデバイスとして検出してくれ模様 
 + 
 +{{ :pc:multiple_nvme_namespaces_in_x10srl-f_uefi.png |}}
  
-ここで''efibootmgr -n 0003''すると、次回はFreeBSD立ち上がってく。ただしUEFIのブートデバイスとして認識は「ubuntu」ままだ+どちらも「UEFI OS」なっていて分かりづらい上が名前空間1のESPにあFreeBSDのブートローダ、下が名前空間2ESPにあるProxmox VEブートローダである。ブートオーダーはPVEが優先となており、問題なくPVEが起動する。さすがSupermicro
  
-また、''efibootmgr -o 0003,0002,0000''としてブーオーダーをFreeBSD優先にしても、相変わらずUbuntuが立ち上がってきた。+===== 参考サイト =====
  
 +  * [[https://narasimhan-v.github.io/2020/06/12/Managing-NVMe-Namespaces.html|Managing Nvme Namespaces | Narasimhan V]]
 +  * [[https://www.drewthorst.com/posts/nvme/namespaces/readme/|NVMe Namespaces · Drew Thorstensen]]
 +  * [[https://metebalci.com/blog/a-quick-tour-of-nvm-express-nvme/|A Quick Tour of NVM Express (NVMe)]]
 +  * [[https://www.bjonnh.net/article/20210721_nvme4k/|Switching your NVME ssd to 4k - Bjonnh.net]]
 +  * 複数Namespaceに対応したSSDリスト
 +    * [[https://www.truenas.com/community/resources/nvme-ssd-namespaces-support-table.178/|NVMe SSD namespaces support table | TrueNAS Community]]
 +    * [[https://forum.level1techs.com/t/nvme-namespaces-little-known-cool-features-of-most-nvme-and-user-programmable-endurance/172660/18|NVMe Namespaces - Little Known Cool Features of (most) NVMe and User-Programmable Endurance - Wikis & How-to Guides - Level1Techs Forums]]
  • pc/test_multiple_nvme_namespaces.1683295569.txt.gz
  • 最終更新: 2023-05-05 23:06
  • by Decomo