¿Qué son los espacios de nombres nvme? ¿Cómo trabajan?

18

Recientemente comencé a admitir Linux instalado en dispositivos con nvme ssds incorporado. Noté que los archivos del dispositivo tenían un número adicional, más allá de un número que identificaba el número de unidad y el número de partición. Las unidades IDE / SATA / SCSI normalmente solo tienen una letra de unidad y un número de partición.

Por ejemplo: / dev / nvme0n1p2

Me pregunté qué era la parte n1, y después de un poco de búsqueda, parece que identifica un 'espacio de nombres' nvme. Las definiciones para él eran algo vagas: "Un espacio de nombres NVMe es una cantidad de memoria no volátil (NVM) que puede formatearse en bloques lógicos".

Entonces, ¿esto actúa como una partición que se define en el nivel del controlador de hardware y no en una tabla de partición MBR o GPT? ¿Puede un espacio de nombres abarcar múltiples nvme ssd físicos? Por ejemplo, ¿puede crear un espacio de nombres que agrupe el almacenamiento de múltiples SSD en un solo espacio de nombres lógico, similar a RAID 0?

¿Qué haría con un espacio de nombres NVME que no puede lograr utilizando tablas de partición o LVM o un sistema de archivos que pueda administrar múltiples volúmenes (como ZFS, Btrfs, etc.)?

Además, ¿por qué parece que la numeración del espacio de nombres comienza en 1 en lugar de 0? ¿Es eso algo que tiene que ver con cómo NVME rastrea los números de espacio de nombres en un nivel bajo (por ejemplo, las particiones también comienzan en 1, no en 0, porque así es como se estableció el estándar para los números de partición, por lo que el kernel de Linux solo usa el número de partición que se almacena en el disco es - supongo que nvme funciona de la misma manera)

JeffFromOhio
fuente

Respuestas:

17

En NVM Express y los estándares relacionados, los controladores dan acceso al almacenamiento dividido en uno o más espacios de nombres. Los espacios de nombres se pueden crear y eliminar a través del controlador, siempre que haya espacio para ellos (o el almacenamiento subyacente admite el aprovisionamiento delgado), y múltiples controladores pueden proporcionar acceso a un espacio de nombres compartido. La forma en que se organiza el almacenamiento subyacente no está especificada por el estándar, por lo que puedo decir.

Sin embargo, los SSD NVMe típicos no se pueden combinar, ya que cada uno proporciona su propio almacenamiento y controlador conectado a un puerto PCI Express, y el punto de acceso es el controlador, por encima de los espacios de nombres, por lo tanto, un espacio de nombres no puede agrupar múltiples controladores (múltiples controladores pueden proporcionar acceso a un espacio de nombres compartido). Es mejor pensar en los espacios de nombres como algo similar a los LUN SCSI que se usan en el almacenamiento empresarial (SAN, etc.).

La numeración del espacio de nombres comienza en 1 porque así es como funcionan los identificadores de espacio de nombres por controlador. Los espacios de nombres también tienen identificadores más largos y únicos a nivel mundial.

Los espacios de nombres se pueden manipular con el nvmecomando, que proporciona soporte para funciones NVMe de bajo nivel que incluyen:

  • formateo, que realiza un formato de bajo nivel y permite utilizar varias funciones (borrado seguro, selección de formato LBA ...);
  • adjuntar y desconectar, lo que permite que los controladores se conecten o separen de un espacio de nombres (si lo admiten y el espacio de nombres lo permite).

La conexión y desconexión no es algo que encontrará en las unidades NVMe de computadora portátil o de escritorio. Lo usaría con bahías de almacenamiento NVMe como las vendidas por Dell EMC, que reemplazan a las SAN iSCSI del pasado.

Consulte los estándares de NVM Express para obtener más detalles (son relativamente fáciles de leer), y esta presentación del tutorial de NVM Express para una buena introducción.

Stephen Kitt
fuente
Noté que el comando 'nvme' de Linux, además de la compatibilidad para eliminar / crear espacios de nombres, también proporciona conceptos de adjuntar / separar y formatear un espacio de nombres (que parece estar separado de la operación de formato de un sistema de archivos que escribe en el espacio de nombres). ¿Puede proporcionar alguna información sobre cuáles son esas operaciones?
JeffFromOhio
3
Ver mi respuesta actualizada.
Stephen Kitt