Amazon Elastic Compute Cloud
User Guide for Linux Instances

Mapeamento de dispositivos de blocos

Cada instância em execução tem um volume do 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 Associação de 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 associá-los à medida que a instância é executada.

Para obter mais informações sobre volumes de dispositivos raiz, consulte Alteração do volume do dispositivo raiz para persistência.

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 anexado a um computador ou acessado remotamente, como se estivesse ligado fisicamente ao computador. O Amazon EC2 oferece suporte a dois tipos de dispositivos 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 nas 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 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 do 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 Especificação de um mapeamento de dispositivos de blocos para uma AMI e Atualização do 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 Associação de 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.

Especificação de 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 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 para 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):

Visualização dos 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. (Lembre-se de que 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 da 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.

Limites

  • 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.

Atualização do 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).

To add volumes to an instance using the command line (Para adicionar volumes a uma instância usando a linha de comando)

Use o comando run-instances da AWS CLI para especificar um mapeamento de dispositivos de blocos para uma instância.

Especifique o mapeamento de dispositivos de blocos usando o parâmetro a seguir:

--block-device-mappings [mapping, ...]

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 se ligue a uma instância em execução por esta 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 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.

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

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

Atualização do 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. Observe que você não precisa parar a instância antes de alterar esse atributo.

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

Por exemplo: para preservar o volume do dispositivo raiz no encerramento da instância, especifique o seguinte em 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).

Visualização dos volumes do EBS em um mapeamento de dispositivo de blocos da 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 barra de pesquisa, digite Root Device Type (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. (Lembre-se de que essa caixa de diálogo 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 Block devices (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.

Visualização do mapeamento de dispositivos de blocos da instância para volumes do 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. Você pode usar os metadados da instância para consultar o mapeamento de dispositivos de blocos inteiro. O URI de base de todas as solicitações de metadados da instância é http://169.254.169.254/latest/.

Importante

Os volumes de armazenamento de instâncias de NVMe não são incluídos no mapeamento de dispositivos de blocos

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

[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.

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0

Para obter mais informações, consulte Metadados da instância e dados do usuário.