Posso alterar o dispositivo EBS raiz da minha instância Amazon EC2?

107

Eu tenho uma instância do Amazon EC2 apoiada por EBS. Eu gostaria de alterar o dispositivo raiz nesta instância. Você pode aconselhar a melhor maneira de fazer isso?

Só encontro documentação sobre como alterar vários atributos de dispositivos de bloco, mas eles não parecem incluir a configuração do dispositivo como raiz.

cone
fonte

Respostas:

191

Sim, é muito fácil:

  1. Pare a instância.
  2. Desanexe o volume EBS raiz.
  3. Anexe o volume EBS alternativo como raiz: /dev/sda1
  4. Inicie a instância.

Isso pressupõe que o seu volume EBS alternativo seja inicializável, é claro - ele deve conter a imagem do sistema operacional inicializável.

Guru de oito bits
fonte
50
A chave é "como a raiz" - de /dev/sda1fato!
Aseem Kishore
6
Obrigado, isso é ótimo. Uma pegadinha é que o DNS / IP pode mudar quando isso acontece, então certifique-se de atualizar qualquer DNS / Elastic IPs etc. Passei um tempo tentando descobrir por que não conseguia mais me intrometer, e esse era o motivo.
mrooney
14
Nem /dev/sdanem /dev/sda1funcionou para mim, mas /dev/xvdafuncionou.
bhspencer
9
Cara, isso foi assustador. /dev/sda- não funcionou. /dev/sda1, dev/sdf- funcionou, mas a instância não inicializou. /dev/xvdafuncionou.
Alex Fortuna
13
O nome que você deve usar é o resultado deste comando: aws ec2 describe-instances --instance-id i-XXXXXXX | grep -i rootDeviceNameno meu caso/dev/xvda
Neoecos
43

Não tenho rep. Suficiente para adicionar um comentário à resposta selecionada, mas quero ressaltar que para mim, /dev/sda1não funcionou (não /dev/xvdaanexou como root) , mas usando funcionou (anexado como root). A instância é uma das mais novas t2.micro usando HVM.

byl83
fonte
Acho que as máquinas que estão em VPC, os nomes de dispositivos do formato / dev / xv * em si funcionam e você não precisa dar nomes no formato / dev / sd *. Esta é uma observação - não sou especialista em dizer isso com confiança.
Mayank Jaiswal de
Eu tenho uma instância que corresponde a esta descrição, que não consegue inicializar ("Incapaz de encontrar o dispositivo root") após desconectar e reconectar o dispositivo root. Eu quero tentar esta resposta, mas se eu não anexá-la como a /dev/sda1AWS se recusará a iniciar minha instância. Preciso definir alguma outra configuração para usar um nome de dispositivo raiz alternativo?
Jack O'Connor,
/ dev / sda1 para Linux / dev / xvda para Windows
Luis
whoopse, certifique-se de identificar a partição, / dev / sda 1 , /dev/sdaé inválida, mas /dev/sda1está bem.
ThorSummoner de
16

Para elaborar o comentário de Diomidis Spinellis no tópico de comentários da resposta aceita, é importante verificar o rótulo do sistema de arquivos do dispositivo que você está tentando alternar como seu novo dispositivo raiz. Ao solucionar problemas de migração de meu próprio servidor, tive que fazer o seguinte antes que minha instância inicializasse:

Use o e2labelcomando para alterar o rótulo no sistema de arquivos ext2 / ext3 / ext4 que você criou para seu novo dispositivo raiz.

Primeiro, verifique o rótulo do sistema de arquivos do seu dispositivo raiz atual.

$ sudo e2label /dev/xvda1
cloudimg-rootfs

Configure o novo dispositivo para ter o mesmo rótulo de sistema de arquivos.

$ sudo e2label /dev/xvdg 'cloudimg-rootfs'

No meu caso, o rótulo era cloudimg-rootfs. Às vezes, simplesmente será /.

É importante entender como funciona o e2label; verifique man e2labelem sua máquina ou visite http://linux.die.net/man/8/e2label para obter mais informações.

Joey
fonte
1
Isso é tão importante que não consigo entender por que essa resposta não é encontrada com mais frequência.
ays0110
3

Esta é a solução sugerida pelo aws. Você pode separar o volume raiz da instância original depois de interrompê-lo. O volume raiz é anexado em / dev / sda1. Depois de desanexado, anexe-o à nova instância. Depois que o volume for conectado, talvez seja necessário montá-lo no sistema operacional. Depois de montado, você deve ver os dados dentro dele.

Depois de adicionar a nova chave, você pode desanexá-la e anexá-la à instância original em / dev / sda1.

Eu sugiro criar um instantâneo do volume raiz antes de fazer qualquer alteração.

Antes de tentar qualquer solução, experimente nas instâncias não importantes ou instâncias pontuais

Yunus
fonte
1

Se quiser fazer isso por meio do CloudFormation, você precisará fazer o seguinte:

  1. Criar instantâneo do volume raiz existente (via console ou CLI)
  2. Crie uma nova AMI a partir deste instantâneo - aumente o tamanho do volume raiz aqui, certifique-se de selecionar o tempo de virtualização correto (paravirtual ou HVM).
  3. Em seu recurso AWS :: EC2 :: Instance, defina o parâmetro ImageId para o novo AMI que você acabou de fazer

Implante sua pilha. Isso recriará sua instância, portanto, certifique-se de usar um endereço Elastic IP ou de ter acesso DNS.

O motivo pelo qual você tem que fazer esta solução alternativa é porque o CF não permitirá que você ajuste o tamanho do volume raiz em EC2 BlockDeviceMappings, ou para ajustar SnapshotId do Volume raiz.

Joe Alamo
fonte
0

Quando o seu volume é montado, ele é corrigido posteriormente com números, por exemplo: quando /dev/sdaé montado, é montado /dev/sda1, /dev/sda2dependendo das partições que você fizer. Como estamos montando o próprio dispositivo root, ele assume que o dispositivo já está montado, por isso precisamos fornecer /dev/sda1para montagem o volume como dispositivo root. Nota: Não deve haver nenhum volume raiz anexado.

Siga estas etapas: 1) Vá para seus volumes, selecione anexar volumes em Ação. 2) Selecione sua instância 3) Para montar como root, dê o nome do dispositivo como /dev/sda1 4) Inicie sua instância.

Prasanthe
fonte