Quero usar dd no Linux para fazer uma imagem de backup do meu disco. Com dispositivos sata, há um /dev/sda para o disco e /dev/sdaX para cada partição.
Mas com este nvme eu vejo /dev/nvme0, /dev/nvme0n1 e /dev/nbme0n1pX. Este último é claramente as partições, mas qual dos primeiros eu devo usar para fazer backup do meu disco? (nvme0 vs nvme0n1).
Qual é o propósito de ter 2 dispositivos representando o disco?
E quando eu restauro o disco, em qual dispositivo eu escrevo?
Você deve usar
/dev/nvme0n1
para criar uma imagem do seu disco inteiro. Este é o dispositivo de bloco associado ao dispositivo nvme; você pode verificar isso olhando os números principais/secundários do dispositivo:O número maior 259 corresponde aos dispositivos de bloco:
O dispositivo principal 238 corresponde aos dispositivos "nvme":
Um dispositivo de bloco é "um disco"; você pode criar um backup desses dispositivos e depois gravá-lo em outro dispositivo de bloco, seja o destino nvme ou outro.
/dev/nvme0
é um dispositivo nvme, e você o usaria se precisasse interagir com o controlador nvme subjacente, por exemplo, usando onvme
cli ./dev/nvme0n1
, e você precisará do mesmo alvo para restauração também.A especificação para NVMe inclui o conceito de 'namespaces'. Citando diretamente dos recursos oficiais em https://nvmexpress.org/resource/nvme-namespaces/ :
Se isso parece meio técnico, é. De uma perspectiva prática, você pode pensar em namespaces NVMe como partições que são entendidas e gerenciadas pelo próprio dispositivo em vez de pelo host, com a opção de controlar algumas das funcionalidades e configurações do dispositivo independentemente para cada namespace.
Isso permite que você faça coisas interessantes, como usar a funcionalidade OPAL SED somente em parte do dispositivo NVMe, ou apresentar diferentes fatias do dispositivo para diferentes partes do sistema sem particioná-lo. Os namespaces NVMe também são parte integrante de como o multipathing funciona com NVMe.
Mas o dispositivo de bloco virtual que é um namespace não é a mesma coisa que o controlador NVMe. Por isso, para cada controlador NVMe no sistema, o Linux apresenta um dispositivo de caractere para o controlador (
/dev/nvmeX
), que é usado para emitir comandos de gerenciamento (como aqueles usados para reconfigurar namespaces), e um dispositivo de bloco para cada namespace naquele controlador (/dev/nvmeXnY
).Para quase todos os dispositivos NVMe enviados comercialmente, haverá um único namespace cobrindo todo o dispositivo (porque isso permite que você conecte o dispositivo e o use imediatamente, sem necessidade de configuração, a menos que queira fazer algo diferente com os namespaces), então você verá apenas um dispositivo de bloco para cada dispositivo NVMe.
Como um aparte, eu apoio fortemente o comentário de que você deveria estar olhando para algo diferente
dd
de backups. Ele não pode fazer backups incrementais, ele não pode realmente fazer backups estáveis de forma confiável no sistema que está sendo copiado, ele é totalmente dependente de ferramentas externas para desduplicação, compressão e criptografia, e é astronomicamente improvável que você precise de todo o estado extra que ele está salvando (nada sensato se importa com layouts de blocos no disco, quase nada sensato, exceto software de backup, se importa com números de inode, o punhado de atributos estendidos que não podem ser despejados por software de backup real deve ser regenerado manualmente na restauração de qualquer maneira, etc.).