web-dev-qa-db-fra.com

Que sont les espaces de noms nvme? Comment travaillent-ils?

J'ai récemment commencé à prendre en charge Linux installé sur des appareils avec ssds nvme intégrés. J'ai remarqué que les fichiers du périphérique avaient un numéro supplémentaire, au-delà d'un numéro identifiant le numéro de lecteur et le numéro de partition. Les lecteurs IDE/SATA/SCSI n'ont normalement qu'une lettre de lecteur et un numéro de partition.

Par exemple:/dev/nvme0n1p2

Je me suis demandé ce qu'était la partie n1, et après un peu de recherche, il semble que cela identifie un "espace de noms" nvme. Les définitions étaient assez vagues: "Un espace de noms NVMe est une quantité de mémoire non volatile (NVM) qui peut être formatée en blocs logiques."

Alors, cela agit-il comme une partition définie au niveau du contrôleur matériel, et non dans une table de partition MBR ou GPT? Un espace de noms peut-il s'étendre sur plusieurs SSD NVME physiques? Par exemple. pouvez-vous créer un espace de noms qui regroupe le stockage de plusieurs ssd dans un seul espace de noms logique, similaire à RAID 0?

Que feriez-vous avec un espace de noms NVME que vous ne pouvez pas déjà réaliser en utilisant des tables de partition ou LVM ou un système de fichiers qui peut gérer plusieurs volumes (comme ZFS, Btrfs, etc.)?

De plus, pourquoi semble-t-il que la numérotation des espaces de noms commence à 1 au lieu de 0? Est-ce juste quelque chose à voir avec la façon dont NVME suit les numéros d'espace de noms à un bas niveau (par exemple, les partitions commencent également à 1, pas à 0, car c'est ainsi que la norme pour les numéros de partition a été définie, donc le noyau Linux utilise simplement quel que soit le numéro de partition qui est stocké sur le disque est - je suppose que nvme fonctionne de la même manière?)

21
JeffFromOhio

Dans NVM Express et les normes associées, les contrôleurs donnent accès au stockage divisé en un ou plusieurs espaces de noms. Les espaces de noms peuvent être créés et supprimés via le contrôleur, tant qu'il y a de la place pour eux (ou que le stockage sous-jacent prend en charge l'allocation dynamique), et que plusieurs contrôleurs peuvent donner accès à un espace de noms partagé. La façon dont le stockage sous-jacent est organisé n'est pas spécifiée par la norme, pour autant que je sache.

Cependant, les SSD NVMe typiques ne peuvent pas être combinés, car ils fournissent chacun leur propre stockage et contrôleur attachés à un port PCI Express, et le point d'accès est le contrôleur, au-dessus des espaces de noms - ainsi un espace de noms ne peut pas grouper plusieurs contrôleurs (plusieurs contrôleurs peut donner accès à un espace de noms partagé). Il est préférable de considérer les espaces de noms comme quelque chose qui ressemble aux LUN SCSI utilisés dans le stockage d'entreprise (SAN, etc.).

La numérotation des espaces de noms commence à 1 car c'est ainsi que fonctionnent les identificateurs d'espace de noms par contrôleur. Les espaces de noms ont également des identificateurs plus longs et uniques au monde.

Les espaces de noms peuvent être manipulés à l'aide de la commande nvme , qui prend en charge les fonctionnalités NVMe de bas niveau, notamment:

  • le formatage, qui effectue un formatage de bas niveau et permet d'utiliser diverses fonctionnalités (effacement sécurisé, sélection du format LBA ...);
  • attacher et détacher, ce qui permet aux contrôleurs d'être attachés ou détachés d'un espace de noms (s'ils le prennent en charge et si l'espace de noms le permet).

La connexion et le détachement ne sont pas quelque chose que vous rencontrerez dans les lecteurs NVMe pour ordinateur portable ou de bureau. Vous l’utiliseriez avec des baies de stockage NVMe telles que celles vendues par Dell EMC, qui remplacent les SAN iSCSI du passé.

Voir les normes NVM Express pour plus de détails (elles sont relativement faciles à lire), et cette présentation du didacticiel NVM Express pour une bonne introduction.

18
Stephen Kitt