Mapear volumes do Amazon EBS para nomes de dispositivo NVMe - Amazon EBS

Mapear volumes do Amazon EBS para nomes de dispositivo NVMe

O EBS usa virtualização de E/S de raiz única (SR-IOV - single-root I/O virtualization) para fornecer anexos de volume em instâncias baseadas em Nitro usando a especificação NVMe. Esses dispositivos dependem dos drivers NVMe padrão no sistema operacional. Normalmente, esses drivers descobrem dispositivos anexados durante a inicialização da instância e cria nós de dispositivo com base na ordem em que os dispositivos respondem, e não em como os dispositivos são especificados no mapeamento de dispositivos de blocos.

No Linux, os nomes de dispositivos NVMe seguem o padrão /dev/nvme<x>n<y>, em que <x> é a ordem de enumeração e, para o EBS, <y> é igual a 1. Ocasionalmente, os dispositivos podem responder à descoberta em uma ordem diferente em inicializações subsequentes da instância, o que faz com que o nome do dispositivo seja alterado. Além disso, o nome de dispositivo atribuído pelo driver de dispositivo de bloco pode ser diferente do nome especificado no mapeamento de dispositivos de blocos.

Recomendamos que você use identificadores estáveis para seus volumes do EBS em sua instância, como um dos seguintes:

  • Para instâncias baseadas em Nitro, os mapeamentos de dispositivos de blocos especificados no console do Amazon EC2, quando você está anexando um volume do EBS ou durante chamadas à API AttachVolume ou RunInstances, são capturados no campo de dados específico ao fornecedor da identificação do controlador NVMe. Com as AMIs do Amazon Linux posteriores à versão 2017.09.01, fornecemos uma regra udev que lê esses dados e cria um link simbólico para o mapeamento de dispositivos de blocos.

  • O ID do volume do EBS e o ponto de montagem são estáveis entre as alterações de estado da instância. O nome do dispositivo NVMe pode mudar, dependendo da ordem em que os dispositivos respondem durante a inicialização da instância. Recomendamos usar o ID do volume do EBS e o ponto de montagem para a identificação consistente do dispositivo.

  • Os volumes do EBS do NVMe têm o ID do volume do EBS definido como o número de série na identificação do dispositivo. Use o comando lsblk -o +SERIAL para listar o número de série.

  • O formato de nome do dispositivo NVMe pode variar dependendo se o volume do EBS foi anexado durante ou após o lançamento da instância. Os nomes de dispositivos NVMe para volumes anexados após o lançamento da instância incluem o prefixo /dev/, enquanto os nomes de dispositivos NVMe para volumes anexados durante o lançamento da instância não incluem o prefixo /dev/.

    • Para AMI do Amazon Linux ou do FreeBSD, use o comando sudo ebsnvme-id /dev/nvme0n1 -u para ter um nome de dispositivo NVMe consistente.

    • Para outras distribuições, use o sudo nvme id-ctrl -V /dev/nvme0n1 para determinar o nome do dispositivo NVMe. Pode ser necessário incluir a opção de comando --vendor-specific.

  • Quando um dispositivo é formatado, um UUID é gerado que persiste durante a vida do sistema de arquivos. Um rótulo de dispositivo pode ser especificado ao mesmo tempo. Para obter mais informações, consulte Disponibilizar um volume do Amazon EBS para uso e Inicialização com o volume errado.

Amazon Linux AMIs

Com a AMI do Amazon Linux 2017.09.01 ou posterior (incluindo o Amazon Linux 2), é possível executar o comando ebsnvme-id da seguinte forma para mapear o nome do dispositivo NVMe para um ID de volume e nome de dispositivo:

O exemplo a seguir mostra o comando e a saída para um volume anexado durante o lançamento da instância. Observe que o nome do dispositivo NVMe não inclui o prefixo /dev/.

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme0n1 Volume ID: vol-01324f611e2463981 sda

O exemplo a seguir mostra o comando e a saída para um volume anexado após o lançamento da instância. Observe que o nome do dispositivo NVMe inclui o prefixo /dev/.

[ec2-user ~]$ sudo /sbin/ebsnvme-id /dev/nvme1n1 Volume ID: vol-064784f1011136656 /dev/sdf

Amazon Linux também cria um link simbólico do nome do dispositivo no mapeamento de dispositivos de blocos (por exemplo, /dev/sdf), para o nome do dispositivo NVMe.

AMIs do FreeBSD

Começando com o FreeBSD 12.2-RELEASE, é possível executar o comando ebsnvme-id conforme mostrado acima. Passe o nome do dispositivo NVMe (por exemplo, nvme0) ou o dispositivo de disco (por exemplo, nvd0 ou nda0). O FreeBSD também cria links simbólicos para os dispositivos de disco (por exemplo, /dev/aws/disk/ebs/volume_id).

Outras AMIs em Linux

Com uma versão do kernel de 4.2 ou posterior, é possível executar o comando nvme id-ctrl da seguinte forma para mapear um dispositivo NVMe para um ID de volume. Primeiro, instale o pacote da linha de comando do NVMe, nvme-cli, usando as ferramentas de gerenciamento de pacotes para sua distribuição do Linux. Para obter instruções de download e instalação de outras distribuições, consulte a documentação específica para sua distribuição.

O exemplo a seguir obtém o ID do volume e o nome do dispositivo NVMe para um volume que foi anexado durante o lançamento da instância. Observe que o nome do dispositivo NVMe não inclui o prefixo /dev/. O nome do dispositivo está disponível por meio da extensão específica ao fornecedor do controlador NVMe (384:4095 bytes da identificação do controlador):

[ec2-user ~]$ sudo nvme id-ctrl -V /dev/nvme0n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : vol01234567890abcdef mn : Amazon Elastic Block Store ... 0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "sda..."

O exemplo a seguir obtém o ID do volume e o nome do dispositivo NVMe para um volume que foi anexado após o lançamento da instância. Observe que o nome do dispositivo NVMe inclui o prefixo /dev/.

[ec2-user ~]$ sudo nvme id-ctrl -V /dev/nvme1n1 NVME Identify Controller: vid : 0x1d0f ssvid : 0x1d0f sn : volabcdef01234567890 mn : Amazon Elastic Block Store ... 0000: 2f 64 65 76 2f 73 64 6a 20 20 20 20 20 20 20 20 "/dev/sdf..."

O comando lsblk lista dispositivos disponíveis e seus pontos de montagem (se aplicável). Isso ajuda você a determinar o nome correto do dispositivo a ser usado. Neste exemplo, /dev/nvme0n1p1 é montado como o dispositivo raiz e /dev/nvme1n1 é anexado mas não montado.

[ec2-user ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:3 0 100G 0 disk nvme0n1 259:0 0 8G 0 disk nvme0n1p1 259:1 0 8G 0 part / nvme0n1p128 259:2 0 1M 0 part

Você pode executar o comando ebsnvme-id para mapear o número do disco do dispositivo NVMe para um ID de volume do EBS e um nome de dispositivo. Por padrão, todos os dispositivos NVMe do EBS estão enumerados. É possível passar um número de disco para enumerar informações de um dispositivo específico. A ebsnvme-id ferramenta está incluída nas mais recentes AWS AMIs do Windows Server, localizadas emC:\ProgramData\Amazon\Tools.

Começando com o pacote do driver AWS NVMe, 1.5.0, a versão mais recente da ebsnvme-id ferramenta é instalada pelo pacote do driver. A versão mais recente só está disponível no pacote do driver. O link de download autônomo da ferramenta ebsnvme-id não receberá mais atualizações. A última versão disponível por meio do link autônomo é a 1.1.0, que pode ser baixada usando o link ebsnvme-id.zip para extrair o conteúdo para a sua instância do Amazon EC2, a fim de obter acesso ao ebsnvme-id.exe.

PS C:\ProgramData\Amazon\Tools> ebsnvme-id.exe Disk Number: 0 Volume ID: vol-0d6d7ee9f6e471a7f Device Name: sda1 Disk Number: 1 Volume ID: vol-03a26248ff39b57cf Device Name: xvdd Disk Number: 2 Volume ID: vol-038bd1c629aa125e6 Device Name: xvde Disk Number: 3 Volume ID: vol-034f9d29ec0b64c89 Device Name: xvdb Disk Number: 4 Volume ID: vol-03e2dbe464b66f0a1 Device Name: xvdc
PS C:\ProgramData\Amazon\Tools> ebsnvme-id.exe 4 Disk Number: 4 Volume ID: vol-03e2dbe464b66f0a1 Device Name: xvdc