Crie uma AMI Linux HVM da AWS a partir de uma AMI Paravirtual Linux existente

Crie uma AMI Linux HVM da AWS a partir de uma AMI Paravirtual Linux existente

É possível criar uma AMI de máquina virtual de hardware (HVM) a partir de uma AMI paravirtual (PV) existente.

Meu pensamento inicial foi iniciar uma nova instância PV e usar o ec2-create-imagecomando para criar uma nova imagem enquanto especificava HVM como o tipo de virtualização. Porém, ec2-create-imagenão possui um parâmetro de linha de comando para especificar o tipo de virtualização.

Existe outra maneira de fazer isso?

Responder1

Atualizar

A AWS habilitou esse recurso na API EC2. Está disponível como --virtualization-typeopção paraaws ec2 register-imageno novo awscli baseado em Boto.

Resposta original

Sim! Infelizmente, não existe uma maneira direta de fazer isso. Além disso, algumas instâncias PV podem precisar de modificações no kernel e no bootloader.

  1. Crie um volume a partir do seu PV AMI existente. Se for seu próprio PV AMI, você poderá criar um volume a partir do instantâneo. Se for uma AMI de terceiros, você precisará iniciar uma instância e tirar um snapshot.
  2. Execute uma instância HVM com qualquer AMI.
  3. Pare essa instância HVM.
  4. Desanexe o volume raiz dessa instância.
  5. Anexe o volume PV como volume raiz (/dev/sda1 ou /dev/sda se tiver sido particionado) à instância HVM.
  6. Execute ec2-create-imagena instância HVM.
  7. Inicie outras instâncias com sua nova AMI HVM.

Se isso não funcionar, antes da etapa 5, você precisará anexar esse volume a uma instância em execução, configurar um chroot e instalar um kernel e um gerenciador de inicialização para sua distribuição. Você também pode limpar os logs e qualquer cache de inicialização da nuvem.

Responder2

No meu caso, tive que fazer a conversão manualmente, pois a instância que criei aws ec2 register-imagenão inicializou. Minha solução é baseada emesta postagemnoFórum AWS EC2.

Preparação

Certifique-se de que todos os volumes estejam na mesma zona de disponibilidade.

  1. Faça SSH na máquina PV da qual você deseja migrar e aplique todas as atualizações e, em seguida, efetue logout.

  2. Vá para o Console AWS e inicie uma nova instância HVM selecionando a mesma AMI base a partir da qual o sistema fotovoltaico foi criado (no meu caso, a Amazon Linux AMI de 64 bits).

  3. SSH para esta nova instância e aplique todas as atualizações e, em seguida, efetue logout.

  4. Acesse o Console AWS e interrompa a instância PV. Tire um snapshot do dispositivo raiz e crie um novo volume ( SOURCE VOLUME) a partir desse snapshot.

  5. Pare a instância HVM. Tire um snapshot do dispositivo raiz na nova instância e crie um novo volume ( TARGET VOLUME) a partir desse snapshot. Inicie a (nova) instância HVM novamente.

  6. Usando o Console AWS:

  • Anexe SOURCE VOLUMEà nova instância como /dev/xvdf.
  • Anexe TARGET VOLUMEà nova instância como /dev/xvdg.

Processo de conversão

  1. SSH para a nova instância e obtenha acesso root:

     sudo su
    
  2. Monte as unidades de origem e de destino.

     mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
     mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
    

    No meu caso, os dispositivos eram /dev/xvdf(fonte) e /dev/xvdg1(destino). Eles podem mudar na sua configuração com base no número de partições e onde você as anexou (consulte a etapa 6 em Preparação). Use ls -al /dev/xvd*para ver as unidades.

  3. Backup /lib/modules/*(se o kernel do PV ami for diferente da nova máquina HVM. Este módulo é usado por alguns serviços da AWS.)

  4. Exclua tudo, exceto /booto volume de destino:

     cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Excluir /bootno volume de origem:

     rm -Rf /mnt/source/boot
    
  6. Copie os dados do volume de origem para o volume de destino preservando todos os atributos:

     rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Edite /mnt/target/etc/fstaba /partição, para que ela faça referência TARGET VOLUMEquando montada em seu local final na etapa (8). Usando um rótulo ou simplesmente algo assim:

     /dev/xvda1 /     ext4    defaults,barrier=0 1 1
    

Em seguida, restaure /lib/modules/o backup feito na Etapa 3. (Se o kernel do PV ami for diferente da nova máquina HVM.)

  1. Pare o sistema e desconecte todos os volumes usando o console AWS. Anexe o TARGET VOLUMEna nova instância como /dev/xvda.

    Certifique-se de anotar onde o dispositivo raiz original foi montado. Na maioria dos casos, deveria ser /dev/xvda.

  2. Inicie sua instância HVM. Agora deve ser uma duplicata exata do seu sistema fotovoltaico. Se tudo parecer bem, agora você pode excluir sua instância PV e também SOURCE VOLUME.

Responder3

TLDR:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI'  --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1 

Etapas detalhadas:

Respondendo ainda mais com base emResposta de Jeff Strunkpara simplificar as etapas e dar um pouco mais de detalhes sobre a imagem do registrador ec2:

  1. Crie uma instância usando imagem PV. Faça/atualize as alterações que desejar.

  2. Crie uma imagem a partir da instância acima.

  3. Encontre o ID do snapshot usado pela AMI acima em EC2 > Elastic Block Store > Snapshot no console do EC2.

    ou se você tiver as ferramentas da API ec2 configuradas:

    ec2-describe-images ami-id_of_above_created_ami

    e encontre o ID do snapshot para o ami

    .. Suposições para etapas adicionais: Suas chaves ec2 e ferramentas de API estão configuradas e prontas para uso:

  4. Registre uma nova AMI HVM usando o instantâneo acima: exemplo:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1

onde

  • -d é a descrição da AMI
  • -n é o nome da AMI
  • -s é o ID do instantâneo da etapa 3.
  • -a é arquitetura
  • --virtualization-type é necessário para torná-lo hvm
  • --sriov serve para habilitar redes aprimoradas, embora possa ser redundante, não tenho certeza.

Para maiores informações:

Responder4

Depois de tentar todas as sugestões aqui contidas, nenhuma das quais funcionou para mim, encontrei um excelente post de blog sobre o assunto, emhttps://www.opswat.com/blog/aws-2015-why-you-need-switch-pv-hvm.

Os elementos (detalhes) do procedimento são:

  1. Instale grubna instância PV a ser migrada (instância de origem).

  2. Faça um snapshot preventivo do volume raiz na instância de origem (volume de origem, SV).

  3. Crie uma instância HVM temporária que migrará o volume.

    1. Usei uma instância do Amazon Linux
  4. Crie um volume de destino (DV) e anexe este e o SV à instância temporária.

    1. O DV deve ser pelo menos tão grande quanto o SV.

    2. Anexe o SV como /dev/{sd,xvd}fe o DV como /dev/{sd,xvd}g.

    3. Particione o DV:

    parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'

    partprobe /dev/xvdg

    udevadm settle

  5. Redimensione para o tamanho mínimo o FS do SV e use dda imagem no DV.

    1. Limpe o FS do volume de origem:e2fsck -f /dev/xvdf

    2. Minimize o mesmo:resize2fs -M /dev/xvdf

    3. Observe a saída do resize2fs (por exemplo Resizing the file system on /dev/xvdf to 269020 (4k) blocks) e anote-a para a próxima etapa.

    4. Duplicar SV para DV:dd if=/dev/xvdf of=/dev/xvdg1 bs=<block size from previous step, here 4k> count=<use block count from last step, here 269020>

    5. Expanda o FS na nova partição:resize2fs /dev/xvdg1

  6. Instale grubno bloco de inicialização do DV

    1. Crie temporariamente arquivos de dispositivo no DV:mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Instale os arquivos grub:

    rm -f /mnt/boot/grub/*stage*

    cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/

    rm -f /mnt/boot/grub/device.map

    1. Instale o grub em um ambiente chroot:

    cat << ARNIE | chroot /mnt grub --batch

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Depois de fazer algumas outras pequenas alterações no volume de destino, ajuste o volume e faça uma AMI a partir dele.

    1. Organize os arquivos temporários do dispositivo:rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. Em /mnt/boot/grub/grub.conf, mude root (hd0)para root (hd0,0), adicione (ou substitua console=*) console=ttyS0à linha do kernel e, se necessário, substitua root=*por root=LABEL=/na linha do kernel

    3. Em /mnt/etc/fstab, certifique-se de que a linha raiz do FS contém uma referência rotulada, por exemplo

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Rotule o novo FS raiz come2label /dev/xvdg1 /

    2. Desmonte o DV da instância temporária e desconecte o SV e o DV da instância temporária.

    3. Tire o DV e, a partir desse snap, crie uma imagem AMI.

  8. Inicie uma instância HVM a partir dessa IHM. Essa é a sua instância migrada.

informação relacionada