Mapeamento de dispositivos de blocos - Amazon Elastic Compute Cloud

Mapeamento de dispositivos de blocos

Cada instância que você executa tem um volume de dispositivo raiz associado, seja um volume do Amazon EBS ou um volume de armazenamento de instâncias. Use o mapeamento de dispositivos de blocos para especificar mais volumes do EBS ou volumes de armazenamento de instâncias para anexar a uma instância quando ela for executada. Você pode ligar volumes adicionais do EBS a uma instância em execução; consulte Associar um volume do Amazon EBS a uma instância. Contudo, a única forma de associar volumes de armazenamento de instâncias a uma instância é usar o mapeamento de dispositivos de blocos para anexá-los à medida que a instância é executada.

Para obter mais informações sobre volumes de dispositivos raiz, consulte Alterar o volume raiz para persistir.

Conceitos de mapeamento de dispositivos de blocos

Um dispositivo de blocos é um dispositivo de armazenamento que move dados em sequências de bytes ou de bits (blocos). Esses dispositivos oferecem suporte ao acesso aleatório e geralmente usam E/S em buffer. Os exemplos incluem discos rígidos, unidades de CD-ROM e unidades flash. Um dispositivo de blocos pode ser fisicamente ligado a um computador ou acessado remotamente, como se estivesse ligado fisicamente ao computador.

O Amazon EC2 oferece suporte a dois tipos de dispositivo de blocos:

  • Volumes de armazenamento de instâncias (dispositivos virtuais cujo hardware subjacente é ligado fisicamente ao computador host da instância)

  • Volumes EBS (dispositivos de armazenamento remoto)

Um mapeamento de dispositivos de blocos define os dispositivos de blocos (volumes de armazenamento de instâncias e volumes do EBS) para anexar a uma instância. Você pode especificar um mapeamento de dispositivos de blocos como parte da criação de um AMI para que o mapeamento seja usado por todas as instâncias executadas pela AMI. Como alternativa, você pode especificar um mapeamento de dispositivos de blocos ao executar uma instância, para que o mapeamento cancele o especificado na AMI do qual você iniciou a instância. Observe que todos os volumes de armazenamento de instâncias de NVMe compatíveis com um tipo de instância são automaticamente enumerados e atribuídos a um nome de dispositivo durante a execução da instância. Incluí-los no seu mapeamento de dispositivos de blocos não surtirá nenhum efeito.

Entradas do mapeamento de dispositivos de blocos

Ao criar um mapeamento de dispositivos de blocos, é preciso especificar as informações a seguir para cada dispositivo de blocos que você precisa associar à instância:

  • O nome de dispositivo usado no Amazon EC2. O driver de dispositivo de blocos da instância atribui o nome real do volume ao montar o volume. O nome atribuído pode ser diferente do nome recomendado pelo Amazon EC2. Para obter mais informações, consulte Nomenclatura de dispositivos em instâncias do Linux.

  • [Volumes do armazenamento de instâncias] O dispositivo virtual: ephemeral[0-23]. Observe que o número e o tamanho de volumes de armazenamento de instâncias disponíveis varia por tipo de instância.

  • [Volumes de armazenamento de instâncias de NVMe] Esse volumes são automaticamente enumerados e atribuídos a um nome de dispositivo; incluí-los no seu mapeamento de dispositivos de blocos não surtirá nenhum efeito.

  • [Volumes do EBS] O ID do snapshot a ser usado para criar o dispositivo de blocos (snap-xxxxxxxx). Esse valor é opcional, desde que você especifique um tamanho do volume.

  • [Volumes do EBS] O tamanho do volume, em GiB. O tamanho especificado deve ser maior que ou igual ao tamanho do snapshot especificado.

  • [Volumes do EBS] Determina se o volume no encerramento da instância deve ser excluído (true ou false). O valor padrão é true para o volume do dispositivo raiz e false para volumes associados. Quando você cria a AMI, o mapeamento de dispositivos de blocos dele herda essa configuração da instância. Quando você executa uma instância, ela herda essa configuração da AMI.

  • [Volumes do EBS] O tipo de volume, que pode ser gp2 para Finalidade geral (SSD), io1 ou io2 para Provisioned IOPS SSD, st1 para Disco rígido com throughput otimizado, sc1 para Cold HDD ou standard para Magnético. O valor padrão é gp2.

  • [Volumes do EBS] O número de operações de entrada/saída por segundo (IOPS) que o volume é capaz de suportar. (Não é usado com volumes gp2, st1, sc1 ou standard.)

Advertências do armazenamento de instâncias de mapeamento de dispositivos de blocos

Há várias advertências a serem consideradas ao executar instâncias com os AMIs que têm volumes de armazenamento de instâncias em seus mapeamentos de dispositivos de blocos.

  • Alguns tipos de instância incluem mais volumes de armazenamento de instâncias que outros, e alguns tipos de instância não contêm nenhum volume de armazenamento de instâncias. Se seu tipo de instância for compatível com um volume de armazenamento de instâncias e o AMI tiver mapeamentos para dois volumes de armazenamento de instâncias, a instância será executada com um volume de armazenamento de instâncias.

  • Volumes de armazenamento de instâncias só podem ser mapeados no momento da execução. Você não pode interromper uma instância sem volumes de armazenamento de instâncias (como t2.micro), alterar a instância para um tipo que suporte os volumes de armazenamento de instâncias e reiniciem a instância com volumes de armazenamento de instâncias. No entanto, você pode criar uma AMI com base na instância e executá-la em um tipo de instância que suporte volumes de armazenamento de instâncias e os mapeie para a instância.

  • Se você executar uma instância com os volumes de armazenamento de instâncias mapeados e, em seguida, interromper a instância e alterá-la para um tipo de instância com menos volumes de armazenamento de instâncias e reiniciá-la, os mapeamentos do volume de armazenamento de instâncias da execução inicial continuarão a ser exibidos nos metadados da instância. Contudo, somente o número máximo de volumes suportados pelo armazenamento de instâncias para aquele tipo de instância estará disponível.

    nota

    Quando uma instância for interrompida, todos os dados nos volumes do armazenamento de instâncias serão perdidos.

  • Dependendo da capacidade de armazenamento das instâncias no momento da execução, as instâncias M3 poderão ignorar os mapeamentos de dispositivos de blocos do armazenamento de instâncias da AMI na execução, a menos que sejam especificadas na execução. Você deve especificar mapeamentos de dispositivos de blocos no armazenamento de instâncias no momento da inicialização, mesmo que a AMI que você está executando tenha os volumes de armazenamento de instâncias mapeados na AMI, de forma a garantir que os volumes de armazenamento das instâncias estejam disponíveis quando a instância é iniciada.

Exemplo de mapeamento de dispositivos de blocos

Essa figura mostra um exemplo de mapeamento de dispositivos de blocos para uma instância com EBS. Isso mapeia /dev/sdb para ephemeral0 e mapeia dois volumes do EBS: uma para /dev/sdh e outro para /dev/sdj. Isso também mostra o volume do EBS que é o volume do dispositivo raiz, /dev/sda1.


          Relação entre instância, volumes de armazenamento de instâncias e volumes do EBS.

Observe que esse exemplo de mapeamento de dispositivos de blocos é utilizado em exemplos de comandos e APIs neste tópico. Você pode encontrar os exemplos de comandos e APIs que criam mapeamentos de dispositivos de blocos em Especificar um mapeamento de dispositivos de blocos para uma AMI e Atualizar o mapeamento de dispositivos de blocos ao executar uma instância.

Como os dispositivos são disponibilizados no sistema operacional

Nomes de dispositivos, como /dev/sdh e xvdh, são usados pelo Amazon EC2 para descrever dispositivos de blocos. O mapeamento de dispositivos de blocos é usado pelo Amazon EC2 para especificar os dispositivos de blocos para uma instância do EC2. Após um dispositivo de blocos ser associado a uma instância, ele deverá ser montado pelo sistema operacional antes que você possa acessar o dispositivo de armazenamento. Quando um dispositivo de blocos é separado de uma instância, ele será desmontando pelo sistema operacional e você não poderá mais acessar o dispositivo de armazenamento.

Com uma instância do Linux, os nomes de dispositivo especificados no mapeamento de dispositivos de blocos serão mapeados para os dispositivos de blocos quando a instância for inicializada pela primeira vez. O tipo de instância determina quais volumes de armazenamento de instâncias são formatados e montados por padrão. Você pode montar volumes de armazenamento de instâncias adicionais na execução, desde que não ultrapasse o número de volumes de armazenamento de instâncias disponível para seu tipo de instância. Para obter mais informações, consulte Armazenamento de instâncias do Amazon EC2. O driver do dispositivo de blocos para a instância determina quais dispositivos são usados quando os volumes são formatados e montados. Para obter mais informações, consulte Associar um volume do Amazon EBS a uma instância.

Mapeamento de dispositivos de blocos da AMI

Cada AMI tem um mapeamento de dispositivos de blocos que especifica os dispositivos de blocos a serem associados a uma instância quando é executada pela AMI. Uma AMI fornecida pelo Amazon inclui somente um dispositivo raiz. Para adicionar mais dispositivos de blocos a uma AMI, você deve criar sua própria AMI.

Especificar um mapeamento de dispositivos de blocos para uma AMI

Há duas maneiras de especificar volumes além do volume do dispositivo raiz ao criar uma AMI. Se você já tiver associado volumes a uma instância em execução antes de criar uma AMI pela instância, o mapeamento de dispositivos de blocos para a AMI incluirá os mesmos volumes. Para volumes do EBS, os dados existentes são salvos em um novo snapshot, e é esse novo snapshot que é especificado no mapeamento de dispositivos de blocos. Para volumes de armazenamento de instâncias, os dados não são preservados.

Para AMI baseados em EBS, você pode adicionar volumes do EBS e volumes de armazenamento de instâncias usando um mapeamento de dispositivos de blocos. Para AMIs com armazenamento de instâncias, você só poderá adicionar volumes de armazenamento de instâncias ao modificar as entradas de mapeamento de dispositivos de blocos no arquivo manifesto da imagem ao registrar a imagem.

nota

Para instâncias M3, você deve especificar volumes de armazenamento de instâncias no mapeamento de dispositivos de blocos para a instância ao iniciá-los. Quando você executa uma instância M3, os volumes de armazenamento de instâncias especificados no mapeamento de dispositivos de blocos para a AMI poderão ser ignorados se não forem especificados como parte do mapeamento de dispositivos de blocos da instância.

Para adicionar volumes a uma AMI usando o console

  1. Abra o console do Amazon EC2.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione uma instância e escolha Actions (Ações), Image (Imagem), Create Image (Criar imagem).

  4. Na caixa de diálogo Create Image (Criar imagem), escolha Add New Volume (Adicionar novo volume).

  5. Selecione um tipo de volume na lista Type (Tipo) e um nome de dispositivo na lista Device (Dispositivo). Para um volume do EBS, é possível especificar um snapshot, o tamanho do volume e o tipo de volume.

  6. Escolha Create Image.

To add volumes to an AMI using the command line (Para adicionar volumes a uma AMI usando a linha de comando)

Use o comando create-image da AWS CLI para especificar um mapeamento de dispositivos de blocos para uma AMI com EBS. Use o comando register-image da AWS CLI para especificar um mapeamento de dispositivos de blocos para uma AMI com armazenamento de instâncias.

Especifique o mapeamento de dispositivos de blocos usando o parâmetro --block-device-mappings. Os argumentos codificados em JSON podem ser fornecidos diretamente na linha de comando ou por referência a um arquivo:

--block-device-mappings [mapping, ...] --block-device-mappings [file://mapping.json]

Para adicionar um volume de armazenamento de instâncias, use o mapeamento a seguir.

{ "DeviceName": "/dev/sdf", "VirtualName": "ephemeral0" }

Para adicionar um volume vazio do gp2 de 100 GiB, use o mapeamento a seguir.

{ "DeviceName": "/dev/sdg", "Ebs": { "VolumeSize": 100 } }

Para adicionar um volume do EBS com base em um snapshot, use o mapeamento a seguir.

{ "DeviceName": "/dev/sdh", "Ebs": { "SnapshotId": "snap-xxxxxxxx" } }

Para omitir um mapeamento de um dispositivo, use o mapeamento a seguir:

{ "DeviceName": "/dev/sdj", "NoDevice": "" }

Como alternativa, você pode usar o parâmetro -BlockDeviceMapping com os comandos a seguir (AWS Tools para Windows PowerShell):

Visualizar volumes do EBS em um mapeamento de dispositivo de blocos da AMI

Você pode facilmente enumerar volumes do EBS no mapeamento de dispositivos de blocos para AMI.

Para visualizar os volumes do EBS para uma AMI usando o console

  1. Abra o console do Amazon EC2.

  2. No painel de navegação, selecione AMIs.

  3. Escolha EBS images (Imagens de EBS) da lista Filter (Filtro) para obter uma lista de AMIs com EBS.

  4. Selecione a AMI desejada e examine a guia Details (Detalhes). No mínimo, estarão disponíveis as informações a seguir para o dispositivo raiz:

    • Root Device Type (Tipo de dispositivo raiz) (ebs)

    • Root Device Name (Nome do dispositivo raiz) (por exemplo, /dev/sda1)

    • Block Devices (Dispositivos de blocos) (por exemplo, /dev/sda1=snap-1234567890abcdef0:8:true)

    Se a AMI tiver sido criada com volumes do EBS adicionais usando um mapeamento de dispositivos de blocos, o campo Block Devices (Dispositivos de blocos) exibirá o mapeamento desses volumes adicionais também. (Essa tela não exibe volumes de armazenamento de instâncias.)

To view the EBS volumes for an AMI using the command line (Para visualizar os volumes do EBS para uma AMI usando a linha de comando)

Use o comando describe-images (AWS CLI) ou o comando Get-EC2Image (AWS Tools para Windows PowerShell) para enumerar os volumes do EBS no mapeamento de dispositivos de blocos para uma AMI.

Mapeamento de dispositivos de blocos de instância

Por padrão, uma instância que você inicia inclui todos os dispositivos de armazenamento especificados no mapeamento de dispositivos de blocos da AMI do qual você executou a instância. Você pode especificar alterações ao mapeamento de dispositivos de blocos para uma instância quando ela é iniciada, e essas atualizações se sobrescrevem ou se mesclam com o mapeamento de dispositivos de blocos da AMI.

Limitações

  • Para o volume raiz, você só pode modificar o seguinte: tamanho do volume, tipo de volume e o sinalizador Delete on Termination (Excluir ao encerrar).

  • Quando modificar um volume do EBS, não será possível reduzir o tamanho. Portanto, você deve especificar um snapshot cujo tamanho seja igual ou maior que o tamanho do snapshot especificado no mapeamento de dispositivos de blocos da AMI.

Atualizar o mapeamento de dispositivos de blocos ao executar uma instância

Você pode adicionar volumes do EBS e volumes de armazenamento de instâncias a uma instância quando iniciá-la. Observe que atualizar o mapeamento de dispositivos de blocos para uma instância não cria uma alteração permanente no mapeamento de dispositivos de blocos da AMI do qual ela foi executada.

Para adicionar volumes a uma instância usando o console

  1. Abra o console do Amazon EC2.

  2. No painel, escolha Launch Instance (Executar instância).

  3. Na página Choose an Amazon Machine Image (AMI) (Escolha uma imagem de máquina da Amazon), selecione as AMIs a serem usadas e escolha Select (Selecionar).

  4. Siga o assistente para preencher as páginas Choose an Instance Type e Configure Instance Details.

  5. Na página Add Storage (Adicionar armazenamento), você pode modificar o volume raiz, os volumes do EBS e os volumes de armazenamento de instâncias da seguinte forma:

    • Para alterar o tamanho do volume raiz, localize o volume Root (Raiz) na coluna Type (Tipo) e altere o campo Size (Tamanho).

    • Para excluir um volume do EBS especificado pelo mapeamento de dispositivos de blocos das AMIs usadas para executar a instância, localize o volume e clique no ícone Delete (Excluir).

    • Para adicionar um volume do EBS, escolha Add New Volume (Adicionar novo volume), selecione EBS na lista Type (Tipo) e preencha os campos (Device (Dispositivo), Snapshot, etc.).

    • Para excluir um volume de armazenamento de instâncias especificado pelo mapeamento de dispositivos de blocos da AMI usada para executar a instância, localize o volume e clique no ícone Delete (Excluir).

    • Para adicionar um volume de armazenamento de instâncias, selecione Add New Volume (Adicionar novo volume), Instance Store (Armazenamento de instância) na lista Type (Tipo) e selecione um nome de dispositivo em Device (Dispositivo).

  6. Preencha as páginas restantes do assistente e escolha Launch (Executar).

Como adicionar volumes a uma instância usando a AWS CLI

Use o comando run-instances da AWS CLI com a opção --block-device-mappings para especificar um mapeamento de dispositivos de blocos para uma instância no lançamento.

Por exemplo, vamos supor que a AMI com EBS especifique o seguinte mapeamento de dispositivos de blocos:

  • /dev/sdb=ephemeral0

  • /dev/sdh=snap-1234567890abcdef0

  • /dev/sdj=:100

Para evitar que o /dev/sdj seja anexado a uma instância em execução nesta AMI, use o mapeamento a seguir.

{ "DeviceName": "/dev/sdj", "NoDevice": "" }

Para aumentar o tamanho de /dev/sdh para 300 GiB, especifique o mapeamento a seguir. Observe que você não precisa especificar o ID do snapshot para /dev/sdh, pois especificar o nome do dispositivo basta para identificar o volume.

{ "DeviceName": "/dev/sdh", "Ebs": { "VolumeSize": 300 } }

Para aumentar o tamanho do volume raiz ao iniciar a instância, primeiro chame describe-images com o ID da AMI para verificar o nome de dispositivo do volume raiz. Por exemplo, "RootDeviceName": "/dev/xvda". Para substituir o tamanho do volume raiz, especifique o nome do dispositivo raiz usado pela AMI e o novo tamanho do volume.

{ "DeviceName": "/dev/xvda", "Ebs": { "VolumeSize": 100 } }

Para associar um volume adicional de armazenamento de instâncias, /dev/sdc, especifique o mapeamento a seguir. Se o tipo de instância não oferecer volumes de armazenamento de múltiplas instâncias, esse mapeamento não surtirá efeito. Se a instância for compatível com os volumes de armazenamento de instâncias NVMe, eles serão automaticamente enumerados e receberão um nome de dispositivo NVMe.

{ "DeviceName": "/dev/sdc", "VirtualName": "ephemeral1" }

Como adicionar volumes a uma instância usando o AWS Tools para Windows PowerShell

Use o parâmetro -BlockDeviceMapping com o comando New-EC2Instance (AWS Tools para Windows PowerShell)

Atualizar o mapeamento de dispositivos de blocos de uma instância em execução

Você pode usar o comando modify-instance-attribute da AWS CLI para atualizar o mapeamento de dispositivos de blocos de uma instância em execução. Você não precisa parar a instância para alterar esse atributo.

aws ec2 modify-instance-attribute --instance-id i-1a2b3c4d --block-device-mappings file://mapping.json

Por exemplo: para preservar o volume raiz no encerramento da instância, especifique o seguinte no mapping.json.

[ { "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": false } } ]

Como alternativa, você pode usar o parâmetro -BlockDeviceMapping com o comando Edit-EC2InstanceAttribute (AWS Tools para Windows PowerShell).

Visualizar volumes do EBS em um mapeamento de dispositivos de blocos de instância

Você pode facilmente enumerar volumes do EBS para a instância.

nota

Para instâncias executadas antes do lançamento da API de 2009-10-31, a AWS não pode exibir o mapeamento de dispositivos de blocos. Você deve separar e reassociar volumes de modo que a AWS possa exibir o mapeamento de dispositivos de blocos.

Para visualizar os volumes do EBS para uma instância usando o console

  1. Abra o console do Amazon EC2.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Na caixa de pesquisa, insira Tipo de dispositivo raiz e selecione EBS. Isso exibe uma lista de instâncias baseadas no EBS.

  4. Selecione a instância desejada e examine os detalhes exibidos na guia Description (Descrição). No mínimo, estarão disponíveis as informações a seguir para o dispositivo raiz:

    • Root device type (Tipo de dispositivo raiz) (ebs)

    • Root device (Dispositivo raiz) (por exemplo, /dev/sda1)

    • Block devices (Dispositivos de blocos) (por exemplo /dev/sda1, /dev/sdh e /dev/sdj)

    Se a instância tiver sido executada com volumes do EBS adicionais usando um mapeamento de dispositivos de blocos, o campo Block devices (Dispositivos de blocos) exibirá esses volumes adicionais e também o dispositivo raiz. (Essa tela não exibe volumes de armazenamento de instâncias.)

    
              Dispositivos de blocos para uma instância.
  5. Para exibir informações adicionais sobre um dispositivo de blocos, selecione a entrada ao lado de Dispositivos de blocos. Isso exibe as informações a seguir para o dispositivo de blocos:

    • EBS ID (ID do EBS) (vol-xxxxxxxx)

    • Root device type (Tipo de dispositivo raiz) (ebs)

    • Attachment time (Hora de anexação) (yyyy-mmThh:mm:ss.ssTZD)

    • Block device status (Status do dispositivo de blocos) (attaching, attached, detaching, detached)

    • Delete on termination (Excluir no encerramento) (Yes, No)

To view the EBS volumes for an instance using the command line (Para visualizar os volumes do EBS para uma instância usando a linha de comando)

Use o comando describe-instances (AWS CLI) ou o comando de Get-EC2Instance (AWS Tools para Windows PowerShell) para enumerar os volumes do EBS no mapeamento de dispositivos de blocos para uma instância.

Visualizar o mapeamento de dispositivos de blocos de instância para volumes de armazenamento de instâncias

Quando você ver o mapeamento de dispositivos de blocos para sua instância, verá somente os volumes do EBS, não os volumes de armazenamento de instâncias. É possível usar os metadados da instância para consultar os volumes de armazenamento de instâncias não NVMe no mapeamento de dispositivos de blocos. Os volumes de armazenamento de instâncias NVMe não estão incluídos.

O URI de base de todas as solicitações de metadados da instância é http://169.254.169.254/latest/. Para obter mais informações, consulte Metadados da instância e dados do usuário.

Primeiro, conecte-se à instância em execução. Com base na instância, use esta consulta para obter o mapeamento de dispositivos de blocos.

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" –v http://169.254.169.254/latest/meta-data/block-device-mapping/
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/

A resposta inclui o nome dos dispositivo de blocos para a instância. Por exemplo, a saída de uma instância m1.small com armazenamento de instâncias é semelhante à apresentada a seguir.

ami ephemeral0 root swap

O dispositivo ami é o dispositivo raiz como visto pela instância. Os volumes de armazenamento de instâncias têm o nome ephemeral[0-23]. O dispositivo swap é para o arquivo da página. Se você também tiver mapeado os volumes do EBS, eles serão exibidos como ebs1, ebs2, etc.

Para obter detalhes sobre um dispositivo de blocos individual no mapeamento de dispositivos de blocos, coloque o nome dele na consulta anterior, como mostrado aqui.

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" –v http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0

O tipo de instância determina o número de volumes de armazenamento de instâncias que estão disponíveis para a instância. Se o número de volumes de armazenamento de instâncias em um mapeamento de dispositivos de blocos exceder o número de volumes de armazenamento de instâncias disponível para uma instância, os volumes adicionais serão ignorados. Para visualizar os volumes de armazenamento de instâncias para a instância, execute o comando lsblk. Para saber a quantidade de volumes de armazenamento de instâncias compatível com cada tipo de instância, consulte Volumes de armazenamento de instâncias.