Recentemente, comecei a oferecer suporte ao Linux instalado em dispositivos com nvme ssds integrados. Percebi que os arquivos do dispositivo tinham um número extra, além de um número que identificava o número da unidade e o número da partição. As unidades IDE/SATA/SCSI normalmente têm apenas uma letra de unidade e um número de partição.
Por exemplo: /dev/nvme0n1p2
Fiquei me perguntando o que era a parte n1 e, depois de pesquisar um pouco, parece que identifica um 'namespace' nvme. As definições para isso eram meio vagas: "Um namespace NVMe é uma quantidade de memória não volátil (NVM) que pode ser formatada em blocos lógicos".
Então, isso funciona como uma partição definida no nível do controlador de hardware e não em uma tabela de partição MBR ou GPT? Um namespace pode abranger vários SSDs nvme físicos? Por exemplo, você pode criar um namespace que agrupa o armazenamento de vários ssds em um único namespace lógico, semelhante ao RAID 0?
O que você faria com um namespace NVME que você ainda não pode alcançar usando tabelas de partição ou LVM ou um sistema de arquivos que pode gerenciar vários volumes (como ZFS, Btrfs, etc)?
Além disso, por que parece que a numeração do namespace começa em 1 em vez de 0? Isso é apenas algo a ver com a forma como o NVME rastreia os números de namespace em um nível baixo (por exemplo, as partições também começam em 1, não em 0, porque é assim que o padrão para números de partição foi definido, então o kernel do Linux usa qualquer número de partição que está armazenado no disco é - acho que o nvme funciona da mesma maneira?)
No NVM Express e padrões relacionados, os controladores dão acesso ao armazenamento dividido em um ou mais namespaces. Os namespaces podem ser criados e excluídos por meio do controlador, desde que haja espaço para eles (ou o armazenamento subjacente suporta provisionamento dinâmico) e vários controladores podem fornecer acesso a um namespace compartilhado. Como o armazenamento subjacente é organizado não é especificado pelo padrão, até onde posso dizer.
No entanto, os SSDs NVMe típicos não podem ser combinados, pois cada um fornece seu próprio armazenamento e controlador conectado a uma porta PCI Express, e o ponto de acesso é o controlador, acima dos namespaces - portanto, um namespace não pode agrupar vários controladores (vários controladores podem fornecer acesso a um namespace compartilhado). É melhor pensar em namespaces como algo semelhante a SCSI LUNs usados no armazenamento corporativo (SANs etc.).
A numeração de namespace começa em 1 porque é assim que os identificadores de namespace por controlador funcionam. Os namespaces também têm identificadores mais longos e exclusivos globalmente.
Os namespaces podem ser manipulados usando o
nvme
comando, que fornece suporte para recursos NVMe de baixo nível, incluindo:Anexar e desconectar não é algo que você encontrará em unidades NVMe de laptop ou desktop. Você o usaria com compartimentos de armazenamento NVMe, como os vendidos pela Dell EMC, que substituem as SANs iSCSI do passado.
Consulte os padrões do NVM Express para obter detalhes (eles são relativamente fáceis de ler) e esta apresentação do tutorial do NVM Express para uma boa introdução.
Da boca do cavalo :
Você pode verificar quais recursos um namespace suporta com o
nvme
comando, por exemplo, via:Você pode verificar quantos namespaces seu dispositivo suporta assim:
Observando a especificação básica NVMe 1.4b , ela define NSIDs válidos como maiores que 0:
(Seção 6.1.2 NSIDs válidos e inválidos)
Ter 0 como um valor inválido tem a vantagem de poder usar 0 para encerrar uma matriz de IDs de namespace (cf. Seção 4.10 Lista de namespaces).